<?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>226170</bug_id>
          
          <creation_ts>2021-05-24 02:22:24 -0700</creation_ts>
          <short_desc>Virtualize GraphicsContext</short_desc>
          <delta_ts>2022-11-08 16:42:58 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227578</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=246590</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763071</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 02:22:24 -0700</bug_when>
    <thetext>Virtualize GraphicsContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763072</commentid>
    <comment_count>1</comment_count>
      <attachid>429514</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 02:23:15 -0700</bug_when>
    <thetext>Created attachment 429514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763073</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 02:23:53 -0700</bug_when>
    <thetext>Not even close to ready for review, I just want to fiddle with EWS (and use it to get Windows building).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763236</commentid>
    <comment_count>3</comment_count>
      <attachid>429560</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 13:53:39 -0700</bug_when>
    <thetext>Created attachment 429560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763268</commentid>
    <comment_count>4</comment_count>
      <attachid>429569</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 15:06:58 -0700</bug_when>
    <thetext>Created attachment 429569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763290</commentid>
    <comment_count>5</comment_count>
      <attachid>429578</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 15:47:42 -0700</bug_when>
    <thetext>Created attachment 429578
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763316</commentid>
    <comment_count>6</comment_count>
      <attachid>429587</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 16:31:50 -0700</bug_when>
    <thetext>Created attachment 429587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763350</commentid>
    <comment_count>7</comment_count>
      <attachid>429598</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 17:26:49 -0700</bug_when>
    <thetext>Created attachment 429598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763388</commentid>
    <comment_count>8</comment_count>
      <attachid>429612</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 19:19:44 -0700</bug_when>
    <thetext>Created attachment 429612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763420</commentid>
    <comment_count>9</comment_count>
      <attachid>429623</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 20:49:37 -0700</bug_when>
    <thetext>Created attachment 429623
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763446</commentid>
    <comment_count>10</comment_count>
      <attachid>429631</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-24 23:27:31 -0700</bug_when>
    <thetext>Created attachment 429631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763456</commentid>
    <comment_count>11</comment_count>
      <attachid>429635</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 00:40:55 -0700</bug_when>
    <thetext>Created attachment 429635
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763462</commentid>
    <comment_count>12</comment_count>
      <attachid>429638</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 01:40:22 -0700</bug_when>
    <thetext>Created attachment 429638
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763465</commentid>
    <comment_count>13</comment_count>
      <attachid>429639</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 02:08:03 -0700</bug_when>
    <thetext>Created attachment 429639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763467</commentid>
    <comment_count>14</comment_count>
      <attachid>429640</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 03:09:42 -0700</bug_when>
    <thetext>Created attachment 429640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763627</commentid>
    <comment_count>15</comment_count>
      <attachid>429680</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 12:41:46 -0700</bug_when>
    <thetext>Created attachment 429680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763637</commentid>
    <comment_count>16</comment_count>
      <attachid>429683</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 12:59:33 -0700</bug_when>
    <thetext>Created attachment 429683
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763642</commentid>
    <comment_count>17</comment_count>
      <attachid>429684</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 13:03:09 -0700</bug_when>
    <thetext>Created attachment 429684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763662</commentid>
    <comment_count>18</comment_count>
      <attachid>429680</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-05-25 13:35:11 -0700</bug_when>
    <thetext>Comment on attachment 429680
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:341
&gt; +    void setDrawLuminanceMask(bool drawLuminanceMask) { m_state.drawLuminanceMask = drawLuminanceMask; updateState(m_state, GraphicsContextState::DrawLuminanceMaskChange); }
&gt; +    bool drawLuminanceMask() const { return m_state.drawLuminanceMask; }

Maybe we could rename these to reduce ambiguity: setIsDrawingLuminanceMask/isDrawingLuminanceMask

&gt; Source/WebCore/platform/graphics/NullGraphicsContext.h:52
&gt; +    bool paintingDisabled() const override { return true; }

Why not final?

&gt; Source/WebCore/platform/graphics/NullGraphicsContext.h:155
&gt; +    const PaintInvalidationReasons m_paintInvalidationReasons { PaintInvalidationReasons::None };

This could be an OptionSet&lt;&gt; in future.

&gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:105
&gt; +    bool fill = mode.contains(TextDrawingMode::Fill);
&gt; +    bool stroke = mode.contains(TextDrawingMode::Stroke);
&gt; +    if (fill &amp;&amp; stroke)
&gt; +        return kCGTextFillStroke;
&gt; +    if (fill)
&gt; +        return kCGTextFill;
&gt; +    return kCGTextStroke;

Could be simplified with some OptionSet&lt;&gt; goop.

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:53
&gt; +class Recorder : public GraphicsContext {

I think we should rename this class to RecordingContext

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:95
&gt; +#if USE(CG) || USE(DIRECT2D)
&gt; +    void setIsCALayerContext(bool) override { }
&gt; +    bool isCALayerContext() const override { return false; }
&gt; +    void setIsAcceleratedContext(bool) override { }
&gt; +#endif
&gt; +
&gt; +    void fillRoundedRectImpl(const FloatRoundedRect&amp;, const Color&amp;) override { ASSERT_NOT_REACHED(); }
&gt; +    void drawLineForText(const FloatRect&amp;, bool, bool, StrokeStyle) override { ASSERT_NOT_REACHED(); }

Can everything be final here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763687</commentid>
    <comment_count>19</comment_count>
      <attachid>429684</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-25 14:41:29 -0700</bug_when>
    <thetext>Comment on attachment 429684
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        In preparation for future patches which introduce new kinds of GraphicsContexts,
&gt; +        virtualize GraphicsContext, moving platform implementations into subclasses
&gt; +        GraphicsContext{CG,Cairo,Direct2D}, NullGraphicsContext, DisplayList::Recorder,
&gt; +        and Nicosia::CairoOperationRecorder.

I think this is great work and it is going to save us from worrying about the paintingDisabled(), m_impl is not null, and the calling the platform function in very function of GraphicsContext. But I do not like the way the superclasses of GraphicsContext are created. I think they should be pointers from now on and the caller should only keep a std::unique_ptr&lt; GraphicsContext &gt; or RefPtr&lt;GraphicsContext&gt; instead. The creation can be the responsibility of GraphicsContext also. For example:

class GraphicsContext {
public:
    static std::unique_ptr&lt; GraphicsContext &gt; create(CGContextRef);

    static std::unique_ptr&lt; GraphicsContext &gt; create(PlatformContextCairo&amp;);
    static std::unique_ptr&lt; GraphicsContext &gt; create(PlatformContextCairo*);
    static std::unique_ptr&lt; GraphicsContext &gt; create(cairo_t*);

    static std::unique_ptr&lt; GraphicsContext &gt; create(DisplayList&amp;, const GraphicsContextState&amp;, const FloatRect&amp; initialClip, const AffineTransform&amp;, Delegate*, DrawGlyphsRecorder::DrawGlyphsDeconstruction);
};

And this case a caller like the one in GraphicsLayerCA.cpp will do just this:

    auto context = GraphicsContext::create(*m_displayList, GraphicsContextState(), initialClip, AffineTransform());
    paintGraphicsLayerContents(*context, FloatRect(FloatPoint(), size()));

The reason for me preferring this approach over something like:

    GraphicsContextCG gc(context.get());

is we have to declare the variable to be GraphicsContextCG just to allocate the memory of the object correctly. But I do not think we will ever need to access the members the superclass directly. So using the the base type GraphicsContext is more appropriate and having it a pointer will solve the allocation issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763701</commentid>
    <comment_count>20</comment_count>
      <attachid>429698</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 15:17:59 -0700</bug_when>
    <thetext>Created attachment 429698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763746</commentid>
    <comment_count>21</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 16:30:09 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #18)
&gt; Comment on attachment 429680 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429680&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext.h:341
&gt; &gt; +    void setDrawLuminanceMask(bool drawLuminanceMask) { m_state.drawLuminanceMask = drawLuminanceMask; updateState(m_state, GraphicsContextState::DrawLuminanceMaskChange); }
&gt; &gt; +    bool drawLuminanceMask() const { return m_state.drawLuminanceMask; }
&gt; 
&gt; Maybe we could rename these to reduce ambiguity:
&gt; setIsDrawingLuminanceMask/isDrawingLuminanceMask

Leaving it for now.

&gt; &gt; Source/WebCore/platform/graphics/NullGraphicsContext.h:52
&gt; &gt; +    bool paintingDisabled() const override { return true; }
&gt; 
&gt; Why not final?

Copy paste-o.

&gt; &gt; Source/WebCore/platform/graphics/NullGraphicsContext.h:155
&gt; &gt; +    const PaintInvalidationReasons m_paintInvalidationReasons { PaintInvalidationReasons::None };
&gt; 
&gt; This could be an OptionSet&lt;&gt; in future.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp:105
&gt; &gt; +    bool fill = mode.contains(TextDrawingMode::Fill);
&gt; &gt; +    bool stroke = mode.contains(TextDrawingMode::Stroke);
&gt; &gt; +    if (fill &amp;&amp; stroke)
&gt; &gt; +        return kCGTextFillStroke;
&gt; &gt; +    if (fill)
&gt; &gt; +        return kCGTextFill;
&gt; &gt; +    return kCGTextStroke;
&gt; 
&gt; Could be simplified with some OptionSet&lt;&gt; goop.

Both true.

&gt; &gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:53
&gt; &gt; +class Recorder : public GraphicsContext {
&gt; 
&gt; I think we should rename this class to RecordingContext

Strongly Agree. Leaving it for now.

&gt; &gt; Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:95
&gt; &gt; +#if USE(CG) || USE(DIRECT2D)
&gt; &gt; +    void setIsCALayerContext(bool) override { }
&gt; &gt; +    bool isCALayerContext() const override { return false; }
&gt; &gt; +    void setIsAcceleratedContext(bool) override { }
&gt; &gt; +#endif
&gt; &gt; +
&gt; &gt; +    void fillRoundedRectImpl(const FloatRoundedRect&amp;, const Color&amp;) override { ASSERT_NOT_REACHED(); }
&gt; &gt; +    void drawLineForText(const FloatRect&amp;, bool, bool, StrokeStyle) override { ASSERT_NOT_REACHED(); }
&gt; 
&gt; Can everything be final here?

Yes, done.

(In reply to Said Abou-Hallawa from comment #19)
&gt; Comment on attachment 429684 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=429684&amp;action=review
&gt; But I do not think we will ever need to
&gt; access the members the superclass directly. So using the the base type
&gt; GraphicsContext is more appropriate and having it a pointer will solve the
&gt; allocation issue.

I think I agree with the premise (we don&apos;t need to call things on the subclass, and it would be nice if we just had a `GraphicsContext`). I don&apos;t want to de-stack-allocate all of the GraphicsContexts in this patch, though, that&apos;s a separate similarly large change :)

Also I don&apos;t think it&apos;s SO crazy to say `GraphicsContextCG` when *you are passing it a CGContextRef*. The code is already platform-specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763748</commentid>
    <comment_count>22</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-25 16:32:41 -0700</bug_when>
    <thetext>(Windows being the painfully obvious counterpoint to my last point there)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763758</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-25 17:01:37 -0700</bug_when>
    <thetext>Committed r278062 (238144@main): &lt;https://commits.webkit.org/238144@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429698.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763760</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-25 17:02:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/78483981&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429514</attachid>
            <date>2021-05-24 02:23:15 -0700</date>
            <delta_ts>2021-05-24 13:53:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524022314.patch</filename>
            <type>text/plain</type>
            <size>356989</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhkOGFlNWMwY2NmYmU3
NmM4NGI4ZWY4OGRmODFlMmQ0YWVhZTIyOS4uZTVhMjc0YmRlOTlmZWI3ZmEzZDg2OWIxMTRiOTYz
ZjcyZTg4MWJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwogMjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ2hlY2tlZExvY2sgdGhlIGRlZmF1
bHQgTG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCA0OTBmZjE2NWUxOTcxNDA1NTUxOGJhMzJjNWMyNGYyN2VkZGVm
YTAyLi4zZmMzNDlhMWU5MGMxYTEyMjA4ZTFiYTZkYjIxNTIwOTkwZTNkMmIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI5IEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25A
YXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9jYWlyby9T
aGFyZWFibGVCaXRtYXBDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvY2cvU2hhcmVhYmxl
Qml0bWFwQ0cuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdy
YXBoaWNzQ29udGV4dCk6CisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJl
Y3QyRC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToK
KyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtX
S1ByaW50aW5nVmlldyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRD
b250cm9sRm9yTGF5ZXJJbkNvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZlNuYXBz
aG90QXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRyYXdQYWdlc1RvUERGSW1wbCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5kZXJQYWdlKToKKwogMjAyMS0wNS0y
MyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ2hlY2tl
ZExvY2sgdGhlIGRlZmF1bHQgTG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDZm
NmJiNzMzODJjZDJlNTdjN2Q5NGU3ZDExODBkYTMxZTk0N2I5MjguLmNmOGQwZTIzYzBjMmE1OGE2
ZTVmYjBjYWZhYmI3NGI2ZmMyYjc4MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0
aXN0aWNzLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0
aDpwYWdlSGVpZ2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06
CisgICAgICAgICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6
CisgICAgICAgICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAg
ICAoLVtXZWJOb2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5
Ol0pOgorCiAyMDIxLTA1LTIzICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDb252ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mg
d3JhcHBpbmcgYSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBw
b3J0cywgZXRjLikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0
ZDc4OTZmNTcyMDljYmYzOWMuLjc0NmQ4OGYxOWQzNDRlMjRkNDk2NGNmMjQyMGMzN2VmYTFmMzkx
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVf
UFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNs
aWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUZUVy5jbWFrZQppbmRleCA0Y2MzOTE5OTMxNTQ3M2Q5YWQzMTcyYjZhYWMxYjU5
YmE4YmYxOTFjLi4xOGUxN2U3MjgwYjIzNDA2ODRmYzQxNjBkMDUzMWRkYWJiOTZjZjc0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUZUVy5jbWFrZQpAQCAtNDMsNyArNDMsNiBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3Bw
CiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdM
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAppbmRleCA2NjlkOTM1ZDgxZTcwNGMxNzNjMTBmOWU4NTYzNmM0MGZl
YjdjOGE5Li40Y2FhNjI1Yzk0ZDc2YzM5OGJkMGU2MDQwODc1MDA5MGI2N2IzMDlmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dApAQCAtMTk4Myw3ICsxOTgzLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJ
bWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEltcGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE2ZGQwM2M4ZmIyZDZkNmNlZGJmMjhk
YTg0YzNmODc1MGI4ZDU5ZjMuLjU5ZDUxNWU5NDQxNmI3MDM0MTdmN2U5YTNjMTUwNGYzOWZlZjYy
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTg2MSw3ICs4NjEsNiBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyog
TWVkaWFLZXlzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUJGNzMzMURCRkRDMEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQky
RDlCRjc0NzFEQkZEQzQ5MDA3QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMw
RjAwN0E3RDk5IC8qIE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMx
NEZGMUNCRjAwQkEwRkY3IC8qIGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgKi87IH07Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGlj
c0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEQUYzNDNE
MUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYxMDAzODJDRDMg
LyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJGRTk3MDBDRkNC
QUIgLyogTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEQzhEMzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0N0QwMDlCQTU5
NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9u
VW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTYwODgsOCArNjA4Nyw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBK
U1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBNZW51Q29jb2Eu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUNDRDcwMDQ1QTUw
NyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hQb3B1cE1l
bnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIzRjFGQUQ4N0Q2
MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjQwMUZB
RDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEdyYXBoaWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjAzQzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlD
b250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNv
cmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250
cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxMCw4ICsyNzAwNyw2
IEBACiAJCQkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0
cmlidXRlcy5oICovLAogCQkJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0Nv
bnRleHRHTEltYWdlRXh0cmFjdG9yLmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlE
MDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQw
MUZBRDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAw
MTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBG
NTgwQjA5MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4
MEIwQTBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBC
MEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0zMjI5MCw3
ICszMjI4NSw2IEBACiAJCQkJMUNFOEQxMjcyNjE4NUMwRTAwRkMzQUVGIC8qIERpc3BsYXlMaXN0
SXRlbUJ1ZmZlcklkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDM3
N0Q1NzI1NTFDOUM2MDA4MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQkMzRTYyNDMyNjU5NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUNFOEQxMkUyNjE4NjFDNDAwRkMzQUVGIC8qIERpc3BsYXlM
aXN0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjY5NSw3ICszMjY4OSw2IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdy
YXBoaWNzQ29udGV4dEdMSU9TdXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
OUM3QjlGQzEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAw
MEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBE
NjcwODBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGlj
c0xheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyog
R3JhcGhpY3NMYXllckNBLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTI4LDYgKzM0NTIxLDcgQEAK
IAkJCQk0OTlCM0VDNTEyOENDQzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAwMTkwOEEgLyog
UGxhdGZvcm1DQUxheWVyQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDM0U2MjQzMjY1OTc5
MTgwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
NDk3ODcxMUFCQUYzQTUwMENFRjdFNCAvKiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDNUM3NjJCMTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyNjYwMUVCRjE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1F
dmVudEZhY3RvcnlJT1MuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXgg
MDA5NzlkMDA5Yjg1NTYzZTUyN2Y4MjgxZmU3MmE5ZDE3OTkzMGFlMy4uZDQ2OGZiYzBmNzZhYjBi
MmRiMjIyYWQ2MGFjY2RlNGM2NjVkZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlz
cGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0xMjk4
LDEwICsxMjk4LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3co
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgYXV0byBzaGFk
b3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCkgKyBzaGFkb3dPZmZzZXQ7
CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFkb3dSZWN0T3JpZ2luIC0g
YWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICBpZiAoc2hhZG93
LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4
dC5zZXRMZWdhY3lTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93LmNvbG9yKCkpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3co
YWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCksIHNoYWRv
dy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewog
ICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRv
IGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDEyLDExICsx
NDA5LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRp
bmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0
LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09
IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIGlmIChzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSkK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0
LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLQorICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5j
b2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFkb3dDYXN0aW5nUmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAK
aW5kZXggNGY0NmY2NTkwOTU5YTFlNGNkZGNkY2MzNzUyODA1MTZkNDJjYTFkMS4uZTdjMDI4NWY3
NTU0NTQ4MDNiMTQwYzkyMGJkNGIyYWZkZmU2MWY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAK
QEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omlz
QWNjZWxlcmF0ZWQoKSBjb25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UoKS5leGlzdGluZ0RyYXdpbmdD
b250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aXNBY2NlbGVyYXRlZENv
bnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5yZW5kZXJpbmdNb2RlKCkg
PT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsK
ICNlbmRpZgpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjbGlwSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1bGUKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgYy0+Y2FudmFzQ2xpcChw
YXRoLCB0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CisgICAgYy0+Y2xpcFBhdGgocGF0aCwgdG9X
aW5kUnVsZSh3aW5kaW5nUnVsZSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmJlZ2luQ29tcG9zaXRlTGF5ZXIoKQpAQCAtMTIxMiw3ICsxMjEyLDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgd2lkdGgsIGZsb2EKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAg
ICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAgY29udGV4
dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayk7CisgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRy
YW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQogICAgIGlm
IChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAt
MTM3OSw5ICsxMzc5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBs
eVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQg
d2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWln
aHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3Rh
dGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgs
IC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRv
d1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldExlZ2FjeVNo
YWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBj
LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFk
b3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTIwMzAsNyArMjAzMCw3IEBAIEV4
Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFzUGF0dGVy
bj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51bGwoKSwg
cmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1dG8gcmVu
ZGVyaW5nTW9kZSA9ICFkcmF3aW5nQ29udGV4dCgpIHx8IGRyYXdpbmdDb250ZXh0KCktPmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gZHJhd2luZ0Nv
bnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxlbWVudC5j
cmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmluZ01vZGUs
IGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDczLDcgKzI0NzMsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRl
eHRSdW4sIGZsbwogCiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0OwogCi0gICAg
ICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAKICAgICAg
ICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xvcjo6
YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDY1ODNjMzY5ZmRhMWMwNmQ5
NDM3NWNjZGMyM2ZjOGI3MjIzMGJmNWEuLjMxNzJlN2Y3OWY2MGExNDgzYWYwOGZmOGYyNjM2YmY3
MjlhNGNjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQxODcsMTIgKzQxODcs
MTIgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cygpCiAgICAgICAgIHBhZ2Ut
PnNldElzQ291bnRpbmdSZWxldmFudFJlcGFpbnRlZE9iamVjdHMoaXNDdXJyZW50bHlDb3VudGlu
Z1JlbGV2YW50UmVwYWludGVkT2JqZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQordm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0TnVsbDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKIHsKICAgICBpZiAobmVlZHNMYXlv
dXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBHcmFwaGljc0Nv
bnRleHROdWxsIGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxh
dGZvcm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVD
b250ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50
UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00NzQyLDcgKzQ3NDIsNyBA
QCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQg
d2l0aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChHcmFw
aGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0TnVsbCBjb250ZXh0KEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGlj
X2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAs
IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xk
VG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZm
OWEwZi4uODBkMzZmMmNmN2MxN2ExMzRkOWNhNDg1ZTM3MzQ1OGU5Y2I0ODJmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCkBAIC02NjYsOSArNjY2LDkgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgRnJhbWVGbGF0dGVuaW5nIGVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpIGNvbnN0
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9u
KEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKLSAgICB2b2lkIGlu
dmFsaWRhdGVDb250cm9sVGludHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3Jh
cGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRy
b2xUaW50cyk7IH0KLSAgICB2b2lkIGludmFsaWRhdGVJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkg
eyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFw
aGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIHZvaWQgaW52
YWxpZGF0ZUNvbnRyb2xUaW50cygpIHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFw
aGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cyk7IH0KKyAgICB2b2lkIGludmFsaWRhdGVJbWFnZXNXaXRoQXN5bmNEZWNvZGVz
KCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dE51bGw6OlBh
aW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rl
cyk7IH0KIAogICAgIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxhYmxlQXJl
YXMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcAppbmRleCA3M2Q4YjQ5
Y2VhN2NhNjU4ZDU1NDZkM2ViMTUyMmFkMzRjMGFlYzFjLi5hMThmZTViYmFiN2UzNjQ5OTMyOWYy
YWNmN2NmNmYwM2FkMjZiNmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9G
cmFtZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNw
cApAQCAtNzIsNyArNzIsNyBAQCBHRElPYmplY3Q8SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25z
dCBGcmFtZSogZnJhbWUsIEludFJlY3QmIGlyKQogICAgICAgICA4LCB3ICogc2l6ZW9mKFJHQlFV
QUQpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRl
KGNvbnRleHQuZ2V0KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNvbnRleHQuZ2V0KCkp
OworICAgIEdyYXBoaWNzQ29udGV4dENHIGdjKGNvbnRleHQuZ2V0KCkpOwogCiAgICAgZHJhd1Jl
Y3RJbnRvQ29udGV4dChpciwgZnJhbWUtPnZpZXcoKSwgZ2MpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0NhaXJvLmNtYWtlCmluZGV4IGMxYjUzNjA1NzEzNzc0ZGMwMDZkMDI4ZWRhN2M2YTgyMTNkNmNj
YTEuLjIzN2ViZmJiODAzMzhkMzEzZDJhNTFhNzdlMjgzMDlkNzA1ZmJmNjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NhaXJvLmNtYWtlCkBAIC0xMiw3ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0
aWxpdGllcy5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291
cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQK
aW5kZXggNWYwMTQ5NGYzY2ExZTMxZDc0N2JmN2M3YWZiNzZhZDBjZDdmNjcwYi4uMTk3ZTMzY2Rj
Mzc1MzhhYzkwMGM4N2Q1NGQ5YzZjM2YzNTY5ZjVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0yOSw3ICsyOSw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCi1wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQppbmRleCA2
ZDgxMTg4ODg0NjRkODE1NWQ5ZDUwODMyY2NiYTY0M2IxODdkYWQ4Li5hMDdkNjQ2YTJlODBjMWZl
M2U1MTU0YWQ3ZThmNmUwMTQ4OWViOWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRm9u
dENhc2NhZGUuaCIKICNpbXBvcnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiRm9udFNl
bGVjdG9yLmgiCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dENHLmgiCiAjaW1wb3J0ICJJbWFnZS5oIgogI2ltcG9ydCAiTG9jYWxEZWZhdWx0U3lz
dGVtQXBwZWFyYW5jZS5oIgogI2ltcG9ydCAiUGFnZS5oIgpAQCAtMzAwLDcgKzMwMCw3IEBAIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQsIFVSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpCiAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdJbWFnZSA9
IGFkb3B0TlMoW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6aW1hZ2VTaXplXSk7CiAgICAg
W2RyYWdJbWFnZSBfd2ViX2xvY2tGb2N1c1dpdGhEZXZpY2VTY2FsZUZhY3RvcjpkZXZpY2VTY2Fs
ZUZhY3Rvcl07CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdLkNHQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29u
dGV4dChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdLkNHQ29udGV4dCk7CiAKICAg
ICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGxheW91dC5ib3VuZGlu
Z1JlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKGxpbmtJbWFnZUNvcm5lclJhZGl1cykpLCBj
b2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRl
eCA4N2E0NGE1MzQ3YWI4NmJhOGUxOTMwZjA0MjBlNjQ1MDk1NjBiODFkLi45NmM5ZjBlNjhkMWI5
ZjRhMWE4ODVjMDBhMDNmM2IxZjVmMzQ5Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCkBAIC0yMjksOSArMjI5LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6
ZGlzcGxheUxpc3RGb3JUZXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlz
dCA9IG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IHJlY29yZGluZ0NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlz
cGxheUxpc3RDb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0
OjpSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCAqZGlzcGxheUxpc3QsIGNvbnRleHQuc3Rh
dGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBudWxscHRyLCBEaXNwbGF5TGlz
dDo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNv
bnN0cnVjdCk7Ci0gICAgfSk7CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIHJlY29yZGluZ0Nv
bnRleHQoKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVU
cmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwogICAgIAogICAgIEZsb2F0
UG9pbnQgc3RhcnRQb2ludCA9IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVy
LmluaXRpYWxBZHZhbmNlKCkpKTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4
dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAppbmRleCA5OTM2Yjc3NTNiZWY5ZTUxMzExOWYyOTA2M2ZjMzVhZWVkYTY5MzJlLi4xMzlj
N2ZlMmI0MDNiNWM2MjNjNjM0NGU2YTE3MWNjYWM2YjFkYzczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRl
ZFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEltcGwuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgpAQCAtODIsMTEgKzgxLDYgQEAgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKICAgICAsIHNob3VsZFNtb290aEZvbnRz
KHRydWUpCiAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKICAgICAsIHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lmIFVTRShDRykKLSAgICAvLyBDb3JlIEdy
YXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJk
YXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKLSAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0
aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLSAg
ICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2UpCi0jZW5kaWYKICAgICAsIGRyYXdMdW1p
bmFuY2VNYXNrKGZhbHNlKQogewogfQpAQCAtMTYwLDEwICsxNTQsMTAgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEcKICAgICB9CiAKICAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IERlYWwgd2l0aCBz
dGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzLgogICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNl
dCA9IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gc3Rh
dGUuc2hhZG93Qmx1cjsKICAgICAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRv
d0NvbG9yOworICAgICAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dS
YWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTIyOSwxNCArMjIzLDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQu
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSkgewotI2lmIFVTRShDRykKLSAgICAgICAgaWYgKG1fc3RhdGUuc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hhZG93
KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93
Q29sb3IpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hh
ZG93Q29sb3IpOwotICAgIH0KKyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAgICAgY29udGV4dC5zZXRTaGFkb3co
bV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dD
b2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKIAogICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQog
ICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CkBAIC0zMDIsOSArMjkwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6
ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewogICAgICAgICB0cy5kdW1w
UHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKICAgICAgICAgdHMu
ZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOwotI2lm
IFVTRShDRykKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFk
aXVzIiwgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKTsKLSNlbmRpZgorICAgICAgICB0
cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRv
d1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlKSkKQEAgLTM2MSw1NSArMzQ3LDE5IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0
ZUNoCiAgICAgcmV0dXJuIHRzOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQotICAg
IDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQot
ewotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Jbml0KHBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkmIGZhY3RvcnlGdW5jdGlvbikK
LSAgICA6IG1faW1wbChmYWN0b3J5RnVuY3Rpb24oKnRoaXMpKQotewotfQotCiBHcmFwaGljc0Nv
bnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewogICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHko
KSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUNvdW50KTsKLSAgICBwbGF0Zm9ybURlc3Ry
b3koKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+aGFzUGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICEhbV9kYXRhOworICAgIEFTU0VSVCghbV90cmFuc3Bh
cmVuY3lMYXllckNvdW50KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fc3Rh
Y2suYXBwZW5kKG1fc3RhdGUpOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNhdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNhdmVQbGF0Zm9ybVN0YXRl
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9zdGFjay5pc0Vt
cHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CiAgICAgICAgIHJldHVybjsKQEAgLTQyMiwyMCAr
MzcyLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICAvLyBDYW52YXMg
ZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50
byBpbmxpbmUgY2FwYWNpdHkuCiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQogICAgICAgICBt
X3N0YWNrLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cmVz
dG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdG9yZVBsYXRmb3JtU3Rh
dGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIHNhdmUoKTsKIAogICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsK
QEAgLTQ1MSw2NyArMzkxLDIxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpCiAgICAgcmVzdG9y
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0
IHRoaWNrbmVzcykKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsK
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3Mp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUg
c3R5bGUpCi17Ci0gICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOwotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIG1fc3RhdGUuc3Ry
b2tlQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsK
ICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBs
YXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0
ZS5zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7Ci0j
aWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwot
I2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNldCwgYmx1ciwgY29sb3IpOwor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xv
ckNoYW5nZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMZWdhY3lTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZs
b2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2Rl
KQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwogICAgIG1fc3RhdGUuc2hh
ZG93Qmx1ciA9IGJsdXI7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotI2lmIFVT
RShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSB0cnVlOwotI2VuZGlm
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNldCwgYmx1ciwgY29sb3IpOworICAgIG1f
c3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IHJhZGl1c01vZGU7CisgICAgdXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCkBAIC01MTksMTUgKzQxMyw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBG
bG9hdFNpemUoKTsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSAwOwogICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBDb2xvcigpOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VM
ZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmNsZWFyU2hhZG93KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xl
YXJQbGF0Zm9ybVNoYWRvdygpOworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFNoYWRv
d1JhZGl1c01vZGU6OkRlZmF1bHQ7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0Ojpn
ZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNv
bnN0CkBAIC01NDQsNjYgKzQzMSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7CiAg
ICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuZmlsbFBhdHRl
cm4gPSBudWxscHRyOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29sb3Ip
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAgICBtX3N0YXRlLnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgaWYgKG1faW1wbCkK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIG1f
c3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21v
b3RoRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290
aEZvbnRzOwotICAgIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFu
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIHNldFBsYXRmb3JtU2hvdWxk
U21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKQotewotICAgIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0g
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkpCi17Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLQotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
ZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0
ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02MTEsOCArNDM5LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKICAg
ICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwogICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
PSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7
Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYg
cGF0dGVybikKQEAgLTYyMCw4ICs0NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLmZpbGxDb2xvciA9
IHsgfTsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5m
aWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBh
dHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkKQEAgLTYzMCwxNSArNDU2LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHIKICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gV1RG
TW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3Jt
ID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRl
cm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxl
KQotewotICAgIG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsKLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsUnVsZUNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCkBAIC02NDcsNjQgKzQ2NSwz
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4m
JiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbgogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0g
V1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4g
PSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSk7IC8vIEZJ
WE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsKKyAgICAvLyBGSVhNRTogYWxzbyBm
aWxsIHBhdHRlcm4/CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCkKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgZWxzZQotICAgICAgICBiZWdpblBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUNv
dW50OworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNvdW50OwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIG1faW1wbC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIGVu
ZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lD
b3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lDb3VudDsKKyAgICBBU1NFUlQobV90cmFu
c3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1
bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwotCiAgICAgLy8gRGlzcGxh
eSBsaXN0IHJlY29yZGluZyBmb3IgdGV4dCBjb250ZW50IGlzIGRvbmUgYXQgZ2x5cGhzIGxldmVs
LiBTZWUgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzLgogICAgIHJldHVybiBmb250LmRyYXdU
ZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdHbHlwaHMoZm9u
dCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMo
KnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9v
dGhpbmdNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtz
KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRp
b25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgZm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBtYXJr
LCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlU
ZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRp
Q2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CiAgICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhC
aWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwog
ICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1
bkl0ZXJhdG9yKCZydW4sIDApKTsKQEAgLTczNCwxOSArNTI3LDYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLAogICAgIGJpZGlSdW5zLmNsZWFyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQ
bGF0Zm9ybUltYWdlKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7CiAgICAg
cmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXpl
KCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5n
T3B0aW9ucyk7CkBAIC03NjAsMTggKzU0MCwxMiBAQCBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rpbgog
CiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsK
LQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAg
ICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7
CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKElt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2lu
dCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5v
dGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlv
blF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHko
KSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJj
ZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQpAQCAtNzc5LDkgKzU1Myw2IEBAIElt
YWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rv
ciwKICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQog
ICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0
cmV0Y2hUaWxlKSB7CiAgICAgICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KICAgICAgICAgcmV0dXJu
IGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CkBAIC04MDMs
MTQgKzU3NCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCAmJiBtX2ltcGwtPmNhbkRyYXdJbWFnZUJ1ZmZl
cihpbWFnZSkpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhp
c1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIGltYWdl
LmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQpAQCAtODMzLDM2
ICs1OTYsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZl
cihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpIHx8ICFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3Vy
Y2UsIG9wdGlvbnMpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAg
SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5h
dGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdQYXR0ZXJuKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0
LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUGF0dGVybihpbWFnZS5w
bGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBQYXRoIHBh
dGg7CiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsKICAgICBjbGlwUGF0aChwYXRoKTsK
QEAgLTg3MCw5ICs2MTEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXJlY3Qu
aXNSb3VuZGVkKCkpIHsKICAgICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTg4NSwxNCArNjIzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogCiBHcmFwaGljc0NvbnRl
eHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0
Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRl
c3RpbmF0aW9uLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGRyYXdpbmdGdW5jdGlvbikpOwotICAgICAg
ICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwotICAgIH0KLQog
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihkZXN0aW5hdGlvbi5zaXplKCksIGNvbG9yU3BhY2UsICp0aGlzKTsKICAgICBpZiAoIWltYWdl
QnVmZmVyKQogICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpGYWls
ZWRUb0NyZWF0ZUltYWdlQnVmZmVyOwpAQCAtOTA0LDYxICs2MzQsMjIgQEAgR3JhcGhpY3NDb250
ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9E
cmF3aW5nQ29tbWEKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVm
ZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaW1h
Z2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotI2lmICFV
U0UoQ0cpICYmICFVU0UoRElSRUNUMkQpICYmICFVU0UoQ0FJUk8pCiBJbnRSZWN0IEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCi17Ci0gICAg
bV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOwotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdN
b2RlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVRleHRE
cmF3aW5nTW9kZShtb2RlKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBncmFkaWVudCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBncmFkaWVudC5maWxsKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1v
ZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJl
dmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIHNldENvbXBvc2l0ZU9w
ZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKICAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7CkBAIC05
NjcsMjggKzY1OCwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvcwogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAg
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUp
OwotICAgICAgICBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgICAg
IGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3IpOwogICAgICAgICBzZXRDb21wb3NpdGVP
cGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCkpOwogICAgIH0gZWxzZQogICAgICAgICBmaWxs
UmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUp
OwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlSTykKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJlY3Qo
cmVjdCk7CiAKQEAgLTEwMDgsNzAgKzY4NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSbwog
ICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKICAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENv
bG9yKTsKIH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQg
YWxwaGEpCi17Ci0gICAgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOwotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6QWxwaGFDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3Jt
QWxwaGEoYWxwaGEpOwotfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKIHsKICAgICBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3Bl
cmF0aW9uOwogICAgIG1fc3RhdGUuYmxlbmRNb2RlID0gYmxlbmRNb2RlOwotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24s
IGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREcmF3THVtaW5hbmNl
TWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKQotewotICAgIG1fc3RhdGUuZHJhd0x1bWluYW5j
ZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2lt
cGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5h
bmNlTWFza0NoYW5nZSk7Ci19Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UpCi17Ci0gICAgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJh
bmNlOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsKLX0KLSNl
bmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKLS8vIEltcGxlbWVudCB0aGlz
IGlmIHlvdSB3YW50IHRvIGdvIHB1c2ggdGhlIGRyYXdpbmcgbW9kZSBpbnRvIHlvdXIgbmF0aXZl
IGNvbnRleHQgaW1tZWRpYXRlbHkuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1U
ZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpCi17Ci19Ci0jZW5kaWYKLQotI2lm
ICFVU0UoQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVT
RShDRykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNob3VsZFNtb290aEZvbnRzKGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpICYmICFVU0UoQ0FJUk8pCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKKyAgICB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlKTsKIH0KLSNlbmRpZgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRv
UGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ry
b2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQogewpAQCAtMTEwMiwyNCArNzI0LDYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBv
aW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNF
KERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkKLXsKLX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBzY2Fs
ZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNl
U2NhbGVGYWN0b3IpOwotfQotICAgIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVG
YWN0b3IoKSBjb25zdAogewogICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKQEAgLTExMzMs
MjQgKzczNywxMCBAQCBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRy
YXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29ucwogICAgIHJldHVybiB0cmFuc2Zv
cm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6ZSgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtRmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VFbGxpcHNlKGVs
bGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1TdHJva2VFbGxp
cHNlKGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgpOworICAgIHN0cm9rZVBhdGgocGF0aCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCkBAIC0xMTY3LDIzICs3NTcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIHN0
cm9rZVBhdGgocGF0aCk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0
LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9
LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5bGUpOwogfQotI2VuZGlmCiAKIEZsb2F0
UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykKIHsKQEAgLTEyMTgsMjAgKzc5NSw2IEBA
IEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFz
aW5nTW9kZUZvclRleHQoY29uc3QgRmxvCiAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZs
b2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLXsK
LSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Js
dXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwotICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKHN0
YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdGF0ZS5z
dHJva2VDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3Ioc3RhdGUuZmlsbENvbG9yKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0YXRlLnN0cm9rZVN0eWxlKTsKLSAgICBzZXRQ
bGF0Zm9ybUFscGhhKHN0YXRlLmFscGhhKTsKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLSAgICBzZXRQ
bGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotICAgIHNldFBs
YXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotfQotCiBm
bG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRo
KGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9r
ZVRoaWNrbmVzcygpOwpAQCAtMTI4MywzNCArODQ2LDkgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdy
YXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0jaWYgIVVTRShDRykKLQot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRp
b25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29u
c3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT5jYW5Q
YWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAgICBtX2ltcGwtPnBhaW50RnJhbWVG
b3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0
aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjkxMGI4Njg2ZDE5Zjk3MDVj
MDQzNzIxODUwNmZhZTk5NWUyNzM1MC4uYzkwZTYxMTA1NTE3ZjcwYzkzZmExMmNmYzZlZjU3MjNk
Y2IxYTRjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgpAQCAtODYsNyAr
ODcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFz
cyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHRJbXBsOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3MgSW1h
Z2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0OwpAQCAtMTEwLDYgKzExMCwxMyBAQCBlbnVtIGNsYXNz
IFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewogfTsKIHVzaW5nIFRleHREcmF3aW5nTW9kZUZs
YWdzID0gT3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CiAKKy8vIExlZ2FjeSBzaGFkb3cgYmx1
ciByYWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorLy8g
SXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCitlbnVtIGNsYXNzIFNo
YWRvd1JhZGl1c01vZGUgOiBib29sIHsKKyAgICBEZWZhdWx0LAorICAgIExlZ2FjeQorfTsKKwog
ZW51bSBTdHJva2VTdHlsZSB7CiAgICAgTm9TdHJva2UsCiAgICAgU29saWRTdHJva2UsCkBAIC0y
MTksMTQgKzIyNiwxMiBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJj
ZU92ZXIgfTsKICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsK
ICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsKKyAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRv
d1JhZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07CiAKICAgICBib29sIHNo
b3VsZEFudGlhbGlhcyA6IDE7CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7CiAgICAg
Ym9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwogICAgIGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMgOiAxOwotI2lmIFVTRShDRykKLSAgICBib29sIHNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMgOiAxOwotI2VuZGlmCiAgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzayA6IDE7CiAj
aWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBib29sIHVzZURhcmtBcHBlYXJhbmNl
IDogMTsKQEAgLTI1NCw1MCArMjU5LDQwIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNo
YW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi0KLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dCB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dEltcGxGYWN0
b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0SW1wbD4o
R3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVibGljOiAgIAogCiAgICAgR3Jh
cGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0Nv
bnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyA6
IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZhbGlkYXRpbmdDb250cm9sVGlu
dHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMsCi0gICAgICAg
IERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAgR3JhcGhpY3NDb250ZXh0KFBh
aW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7
CiAKICNpZiBVU0UoRElSRUNUMkQpCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8g
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKICAgICBlbnVtIGNsYXNzIEJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRUeXBlIDogdWludDhfdCB7CiAgICAgICAgIENQVU1lbW9yeSwKICAgICAgICAgR1BVTWVt
b3J5CiAgICAgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYm
ICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9u
UmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRh
dGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0lt
YWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAgICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWlu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52
YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVh
bCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNX
aXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAv
LyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlj
a25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9
CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJv
a2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwor
ICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJv
a2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRTdHJva2VD
b2xvcihjb25zdCBDb2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KIAogICAgIHZvaWQgc2V0U3Ryb2tlUGF0
dGVybihSZWY8UGF0dGVybj4mJik7CkBAIC0zMDYsMjI2ICszMDEsMjQxIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRGaWxs
UnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkg
eyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBXaW5kUnVsZSBmaWxsUnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBzZXRGaWxsQ29s
b3IoY29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KIAogICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0g
eyB9KTsKKyAgICB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sKTsKKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFu
Z2UpOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkQW50aWFs
aWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hv
dWxkQW50aWFsaWFzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
bW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3Ro
Rm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxk
U21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9
CiAKICAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNh
dXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCiAgICAg
Ly8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1x
dWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZv
bnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB1cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KIAot
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGU7IH0KKyAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
PSBxdWFsaXR5OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7IH0KKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5OyB9CiAKLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkK
LSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVy
bigpOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgc2V0QWxwaGEo
ZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhhOyB1cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOyB9CisgICAgZmxvYXQgYWxwaGEo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CisKKyAgICB2b2lkIHNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3Jt
YWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRN
b2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KKworICAg
IHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0K
KyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3
THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7IHVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFu
Z2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KKworICAgIHZvaWQgc2V0U2hhZG93
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVz
TW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOworICAgIHZpcnR1YWwgdm9pZCBjbGVh
clNoYWRvdygpOworICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3Im
KSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChi
b29sKTsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBib29sIGhhc1Zp
c2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJs
ZSgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hh
ZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0
aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsgfQorICAgIGJvb2wgaGFzQmx1
cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRl
LnNoYWRvd0JsdXI7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCk7CisjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICB2b2lk
IHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51
c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOyB1cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9CisgICAg
Ym9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0Fw
cGVhcmFuY2U7IH0KICNlbmRpZgotICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25z
dDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUo
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKTsKKyAgICBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHNhdmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogICAgIAogICAgIHVuc2ln
bmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyNpZiBV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxs
eSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/CisgICAgdmlydHVhbCB2b2lkIGFw
cGx5U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVy
bigpID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQg
b2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPworICAgIHZp
cnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gdGhp
cyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3IganVzdCBi
ZSByZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7IH0KKworICAgIC8vIFBpeGVsIFNuYXBwaW5nCisKKyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7
CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9u
cworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25z
dCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7CisgICAgc3Rh
dGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKKworICAgIC8vIEJh
c2ljIFNoYXBlcworCiAgICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90aCBzdHJv
a2luZyBhbmQgZmlsbGluZy4KICAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0KCksIHdo
aWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwogICAgIC8vIHVzaW5nIGEgMS1w
aXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29ycmVjdAog
ICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
KSA9IDA7CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZv
aWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlw
c2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmFp
c2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBj
b25zdCBDb2xvciYgc2hhZG93Q29sb3IpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxs
UGF0aChjb25zdCBQYXRoJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRoKGNv
bnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgo
ZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhZGllbnQmKTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsK
LSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVh
bCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7
CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGlu
ZVdpZHRoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKKyAgICAvLyBGSVhNRTogV2h5IGFyZW4ndCB0aGVzZSBwYXJ0IG9mIHRo
ZSBzdGF0ZT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQg
ZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICAvLyBJbWFnZXMs
IFBhdHRlcm5zLCBhbmQgTWVkaWEKIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIEltYWdlRHJhd1Jl
c3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3Rv
ciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICB2
aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1h
Z2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9u
OjpGcm9tSW1hZ2UgfSk7CisKKyAgICB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9p
bnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1h
Z2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRp
b24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdm9pZCBkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYg
ZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAgICAgdm9p
ZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
LSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCB2
b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24pOworI2VuZGlmCisKKyAgICAvLyBDbGlwcGluZwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jik7
Ci0gICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0g
V2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
ID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwor
ICAgIHZpcnR1YWwgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21t
YW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKTsKICAgICAKLSAgICBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MpOwotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CisgICAgLy8gVGV4dAogCi0jaWYg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNl
KGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKLQotICAgIEZsb2F0U2l6ZSBkcmF3VGV4
dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7
Ci0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFy
a3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNp
Z25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2Fk
ZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZv
bnROb3RSZWFkeSk7Ci0KLSAgICB2b2lkIGJ1aWxkZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYpOwotCi0gICAgZW51bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFsbFNp
ZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpOworICAgIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhh
c2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0
cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25h
bDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Qmlk
aVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAogICAgIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJs
aW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRT
dHJva2UpOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICB2
b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3Qg
RmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJv
a2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsK
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
Ci0gICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFu
c3BhcmVuY3lDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KKyAg
ICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNo
YWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIC8v
IExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtp
dC1ib3gtc2hhZG93LgotICAgIC8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlp
ID4gOHB4LgotICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxh
eWVyKCk7CisgICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAo
bV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXll
cnMoKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclNoYWRvdygpOwotICAgIGJv
b2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25zdDsKLQotICAgIGJv
b2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3Iu
aXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zp
c2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9v
bCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYm
IG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGlt
cGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRz
UmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29u
c3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7
CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAg
ICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1v
ZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAg
dm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VN
YXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAg
Ly8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBh
bGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBj
YW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAgICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJl
bnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5z
Zm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxvYXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsg
cywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9h
dFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9p
ZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
Y2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9h
dCBhbmdsZUluUmFkaWFucykgPSAwOwogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBw
LnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsK
IAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0g
MDsKIAogICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZp
Y2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUg
PSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRl
dmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBh
YmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJ
IGVudmlyb25tZW50LgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3Rv
cikgeyBzY2FsZShmYWN0b3IpOyB9CiAgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7
CiAgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRD
b250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW5mdWxQYWludERldGVjdGVkID0gdHJ1
ZTsgfQotICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVuZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIC8vIExpbmtzCiAKLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKLSNlbmRpZgorICAgIHZpcnR1YWwg
dm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorCisg
ICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
Ly8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24KIAorICAgIHZvaWQgc2V0Q29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAg
Ym9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVs
UGFpbnREZXRlY3RlZDsgfQorCisgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9u
IGJlbG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lO
RE9XUykKICAgICBIREMgZ2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYsIGJvb2wgc3Vw
cG9ydEFscGhhQmxlbmQpOyAvLyBUaGUgcGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUg
YSBiaXRtYXAgZm9yIGNvbXBvc2l0aW5nIGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgogICAg
IHZvaWQgcmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQywgY29uc3QgSW50UmVjdCYsIGJvb2wgc3Vw
cG9ydEFscGhhQmxlbmQpOyAvLyBUaGUgcGFzc2VkIGluIEhEQyBzaG91bGQgYmUgdGhlIG9uZSBo
YW5kZWQgYmFjayBieSBnZXRXaW5kb3dzQ29udGV4dC4KICAgICBIREMgaGRjKCkgY29uc3Q7CiAj
aWYgUExBVEZPUk0oV0lOKQotICAgIEdyYXBoaWNzQ29udGV4dChIREMsIGJvb2wgaGFzQWxwaGEg
PSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgotCiAgICAgLy8gV2hlbiBzZXQgdG8g
dHJ1ZSwgY2hpbGQgd2luZG93cyBzaG91bGQgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQK
ICAgICAvLyByYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVtIGp1c3QgdG8gcmVuZGVyIHRvIHRoZSBz
Y3JlZW4uIERlZmF1bHRzIHRvCiAgICAgLy8gZmFsc2UuCkBAIC01NjQsMTIgKzU3NCwxMiBAQCBw
dWJsaWM6CiAjaWYgVVNFKERJUkVDVDJEKQogICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElEMkQx
RENSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6
IFRvIGJlIHJlbW92ZWQuCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5
KiBzeXN0ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVy
VGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisgICAgc3RhdGljIElEMkQxRmFjdG9yeSog
c3lzdGVtRmFjdG9yeSgpOworICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJl
bmRlclRhcmdldCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpbkRyYXcoKTsKKyAg
ICB2b2lkIGJlZ2luRHJhdygpOwogICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBo
YShjb25zdCBDb2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygp
OworICAgIHZvaWQgZW5kRHJhdygpOwogICAgIHZvaWQgZmx1c2goKTsKIAogICAgIElEMkQxQnJ1
c2gqIHNvbGlkU3Ryb2tlQnJ1c2goKSBjb25zdDsKQEAgLTU4NSw3NyArNTk1LDE1MiBAQCBwdWJs
aWM6CiAjZW5kaWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAg
ICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEs
IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworcHJpdmF0
ZToKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZpbGxFbGxpcHNlQXNQYXRo
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBG
bG9hdFJlY3QmKTsKKworICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlh
c2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENvbG9yJik7
CiAKLSAgICBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0OworICAgIGZsb2F0IGRh
c2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKKyAgICBmbG9h
dCBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OworICAg
IGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZs
b2F0IHBhdHRlcm5XaWR0aCwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OworICAgIFZlY3RvcjxG
bG9hdFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5l
LCBmbG9hdCBjb3JuZXJXaWR0aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQy
KSBjb25zdDsKIAotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGltcGwoKSB7IHJldHVybiBtX2lt
cGwuZ2V0KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwogCiBwcml2YXRl
OgotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAg
dm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUs
IDE+IG1fc3RhY2s7CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQo
SERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCisgICAgdW5zaWduZWQgbV90cmFu
c3BhcmVuY3lMYXllckNvdW50IHsgMCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRl
Y3RlZCB7IGZhbHNlIH07Cit9OwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgcGxhdGZv
cm1Jbml0KEhEQywgSUQyRDFSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZh
bHNlKTsKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCosIEJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKLSNlbmRpZgorLy8gRklYTUU6IE1vdmUgdG8gYSBz
ZXBhcmF0ZSBmaWxlLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0TnVsbCA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRy
b2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKIAotICAgIHZvaWQgc2F2ZVBs
YXRmb3JtU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0TnVsbChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAg
ICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25zKQorICAgIHsKKyAgICB9CiAK
LSAgICB2b2lkIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdz
KTsKK3ByaXZhdGU6CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1T
dHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNr
bmVzcyhmbG9hdCk7CisgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpOb25lOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9s
VGludHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9
PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQor
ICAgIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9u
UmVhc29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQorICAgIGJvb2wg
ZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludElu
dmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdD
b250ZW50ZnVsUGFpbnQ7IH0KIAotICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3Qg
Q29sb3ImKTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsIHsgfQogCi0g
ICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBs
YXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOworI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkg
ZmluYWwgeyB9CisjZW5kaWYKIAotICAgIHZvaWQgc2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIGNsZWFyUGxhdGZv
cm1TaGFkb3coKTsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9CiAKLSAgICB2b2lkIHNldFBsYXRmb3JtQWxw
aGEoZmxvYXQpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWwgeyB9CiAKLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOworICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0gICAgdm9pZCBmaWxsRWxs
aXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1Bh
dGgoY29uc3QgRmxvYXRSZWN0Jik7CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAg
dm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBh
dHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7
IH0KKyNlbmRpZgogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQg
Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFs
IHsgfQorICAgIC8vIEZJWE1FOiBJcyBpdCBvayB0aGF0IHRoaXMgZG9lc24ndCB3b3JrPz8KKyAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKyAgICB2
b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sLCBib29sID0gZmFsc2Us
IFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2ws
IGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9CisgICAg
dm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwg
eyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsIHsgfQorICAgIHZvaWQgcm90YXRlKGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsgfQorICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQorICAgIHZv
aWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQorICAgIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNl
U2NhbGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBzYXZlKCkgZmluYWwgeyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9
CisKKyAgICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gPSBXVEY6Om51bGxvcHQpIGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQorCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0
IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisKKyAgICB2b2lkIGRy
YXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEF0b21TdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBPcHRpb25hbDx1
bnNpZ25lZD4gPSBXVEY6Om51bGxvcHQpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9CisKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZp
bmFsIHsgfQorCisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhp
bmc7IH0KKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9
CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkTm90aGluZzsgfQorCisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1
bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwg
eyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWwgeyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3Vi
bGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHBs
YXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpOworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQogCi0gICAgdm9pZCBkcmF3UGxhdGZv
cm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVBhdHRl
cm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7CisgICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmKSBmaW5hbCB7IH0KIAotICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlh
bGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENvbG9y
Jik7CisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBmbG9hdCBkYXNo
ZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCkgY29uc3Q7Ci0gICAgZmxvYXQg
ZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKLSAgICBm
bG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9h
dCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKLSAgICBWZWN0b3I8Rmxv
YXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwg
ZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50Mikg
Y29uc3Q7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFs
IHsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxs
cHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+IG1faW1wbDsK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KIAotICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlIG1fc3RhdGU7Ci0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0
YWNrOwogCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisjZW5kaWYKKworcHJpdmF0
ZToKICAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKLSAgICB1bnNpZ25l
ZCBtX3RyYW5zcGFyZW5jeUNvdW50IHsgMCB9OwotICAgIGJvb2wgbV9jb250ZW5mdWxQYWludERl
dGVjdGVkIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
ewpAQCAtNzQ0LDggKzgyOSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7
CiB9OwogCi0KLQogY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRp
b25RdWFsaXR5VG9Vc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMjE0YTBhODkyYjZlOTlmOTlkYjgyM2NlYTM1MjFiNGM1ZmY1NWM3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6OkdyYXBoaWNzQ29u
dGV4dEltcGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDogbV9ncmFwaGljc0NvbnRl
eHQoY29udGV4dCkKLXsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4
dEltcGwoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MmZmYjQ1NDVhZTIzNTZmN2MxZmJmNzhjMDQ5NGIz
Y2FjY2UzYjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dEltcGwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dEltcGwpOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29u
dGV4dEltcGwoR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0
SW1wbCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1BsYXRm
b3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhd0ltYWdlQnVm
ZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0jaWYgVVNFKENHKQot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBh
bmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29u
c3QgUGF0aCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHNhdmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgPSAwOwotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKSA9IDA7Ci0jaWYg
RU5BQkxFKFZJREVPKQotICAgIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0ID0gMDsK
LSNlbmRpZgotICAgIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSA9IDA7Ci0KLXBy
aXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBHcmFwaGljc0Nv
bnRleHQmIG1fZ3JhcGhpY3NDb250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDQ0MGY3MjUz
NTgyY2M2NDkzMTVmMjQ3M2IzOTAzMjJiMGE2NjIwODUuLjEzODBlN2VkOWZjOGYzNjQ4ZWYwNjcx
OTM0OGRiZTc3MWNmOTk5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5jcHAKQEAgLTE4OCw4ICsxODgsOSBAQCBJbWFnZURyYXdSZXN1bHQgSW1hZ2U6OmRyYXdU
aWxlZChHcmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAg
IH0KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gRklYTUU6IERvIHdlIHJlYWxs
eSB3YW50IHRvIGtlZXAgdGhpcyBiZWhhdmlvciBkaWZmZXJlbmNlPz8/CiAgICAgLy8gV2hlbiB1
c2luZyBhY2NlbGVyYXRlZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8gc3RyZXRjaCBh
biBpbWFnZSB0aGFuIHRvIHRpbGUgaXQuCi0gICAgaWYgKGN0eHQuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkgeworICAgIGlmIChjdHh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCkgewogICAgICAgICBpZiAoc2l6ZSgpLndpZHRoKCkgPT0gMSAmJiBpbnRlcnNl
Y3Rpb24ob25lVGlsZVJlY3QsIGRlc3RSZWN0KS5oZWlnaHQoKSA9PSBkZXN0UmVjdC5oZWlnaHQo
KSkgewogICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVTcmNSZWN0OwogICAgICAgICAgICAg
dmlzaWJsZVNyY1JlY3Quc2V0WCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oCmluZGV4IDRkM2Y0MzBjNjE3ZDEwMDE2ZWY1MzgwZmQ4OWE5NGNiMGJhZWE2YzMuLjE3
NjQ3NDdkNjE0MGNmMTE2YzljNjQyNmRkYzk3MWFjMmJlYjk4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtNzEsNyArNzEsNiBAQCBjbGFzcyBBZmZpbmVU
cmFuc2Zvcm07CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbDsKIGNsYXNzIFNoYXJlZEJ1
ZmZlcjsKIHN0cnVjdCBMZW5ndGg7CiAKQEAgLTgwLDcgKzc5LDYgQEAgY2xhc3MgSW1hZ2VPYnNl
cnZlcjsKIAogY2xhc3MgSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZy
aWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dEltcGw7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggN2E3ZjY3
MGEyODE0MjQ0Mzg1Mzc3MTk3MWYzOTE3NjRmMjE5ZTI2MC4uY2FhYTg4Y2I1ODkxODFjNDA5YWM1
NDIwY2Q5ZmZhMzJkM2U0NWRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTIwMCw3ICsyMDAsOSBAQCBTaGFkb3dCbHVyOjpTaGFk
b3dCbHVyKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICAsIG1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYg
VVNFKENHKQotICAgIGlmIChzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKSB7CisgICAgLy8g
Q29yZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4
cHggKDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCisgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJl
c2VydmUgdGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFk
b3cuCisgICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KSB7CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1
cyhzdGF0ZS5zaGFkb3dCbHVyKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKHNo
YWRvd0JsdXIsIHNoYWRvd0JsdXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDc4Yzc5Y2Q3
ZTg5ZTkyYzI2YzRmZTZjNDdkZTk1N2ZmZDhmZjk2YzQuLjQ0M2E1NmEyYjc0NWJlYmVkZGQ1ODE2
N2FkNmIxZDMzMjJmYjBiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTc0MSw5ICsxNzQxLDcgQEAg
dm9pZCBHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUm
IGNvbW1pdFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0
aWFsQ2xpcChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGNvbnRleHQsICptX2Rpc3Bs
YXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNm
b3JtKCkpOwotICAgICAgICB9KTsKKyAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIGNvbnRl
eHQoKm1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBB
ZmZpbmVUcmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNv
bnRleHQsIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbi5jcHAKaW5kZXggM2I0NDhhZjA0ZmEyNTVlNGY4NDNlZjQyOWViZDc3
YzlhMWQ4NjhhYi4uODQ2ZWFlNWFiNjRlOTU4MzQ5NDBhZDU1ZDUzMTJjZDBhMjYxMjY2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRm
b3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zs
b2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3Zl
KGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsK
ICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250
LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMw
NTJkNmE5ODkzMWM0Li45MDExZTM0ZDQ5YmU3NDc5MWQxNjA1NWUwMjczOWQyMTJlODg0ZDZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTk0LDcgKzk0
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENB
Q0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FMYXllcjo6Zmxp
cENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRD
RyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBn
ZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNh
bnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxh
eWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
OjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVs
c2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FM
YXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3
Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5
ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMu
LmJhMGZiYzZkNzIwZTU0NzIxNGY1ZDdhNjI5ZjY0OTdlZGU5NTkzNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXll
cldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dl
YlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVk
QmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENH
Q29udGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+
b3duZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50
YXRpb24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50
YXRpb24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAg
Ly8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1
c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVy
IGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAK
aW5kZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uM2U2MjRiYzM2
NTUwMDNmYjlkMWI1MmNlMzVhYjMxMDJjZDM4OGY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWly
by5oIgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fp
cm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRS
b3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0
KFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRD
YWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAs
IG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9w
bGF0Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBo
aWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRm
b3JtQ29udGV4dC0+Y3IoKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQo
bV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJv
KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKKyAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFr
ZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKKyAgICAsIG1fcGxh
dGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4
dCkpCiB7Ci0gICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4
dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9k
YXRhOwotICAgIH0KKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2
YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRm
b3JtQ29udGV4dC5jcigpKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0Nv
bnRleHRDYWlybzo6fkdyYXBoaWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAo
bV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKKyAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwor
fQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK0FmZmluZVRyYW5zZm9ybSBH
cmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2Nh
bGUpIGNvbnN0Cit7CiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSk7CiB9CiAKLVBsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgcmV0dXJuIG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICZtX2Rh
dGEtPnBsYXRmb3JtQ29udGV4dDsKKyAgICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBDYWlybzo6c2F2ZSgqcGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUo
KTsKICAgICBDYWlybzo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCiAvLyBEcmF3
cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBD
YWlybzo6ZHJhd1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3Ms
IHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRm
b3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2Uo
KnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0
aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpw
bGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAogLy8gVGhp
cyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hh
ZG93cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2lu
dDIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRy
YXdMaW5lKCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0
aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxQYXRo
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tl
UGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKICAgICBDYWlybzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7
Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwg
Y29sb3IpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOworICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4w
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgaWYgKCFwYXR0ZXJuKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBDYWlybzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKKyAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3Jt
Q29udGV4dCk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBw
YXR0ZXJuLmdldCgpKTsKKyAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENvbXBv
c2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsK
IAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBD
YWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwp
OworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewogICAgIENhaXJvOjpj
bGlwKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNs
aXBSdWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlw
UnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgs
IGNsaXBSdWxlKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBj
b25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
LQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIENhaXJvOjpT
dGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIo
bV9wbGF0Zm9ybUNvbnRleHQsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRl
c3RSZWN0KTsKK30KIAordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit7CiAjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVB
ZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFN
KHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwg
d2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxh
dGZvcm1Db250ZXh0KCksIHBhdGgsIHdpZHRoLCBjb2xvcik7CiAjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogI2lm
IFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRG
b2N1cygqdGhpcywgcmVjdHMsIGNvbG9yKTsKICAgICBVTlVTRURfUEFSQU0od2lkdGgpOwogICAg
IFVOVVNFRF9QQVJBTShvZmZzZXQpOwogICAgIHJldHVybjsKICNlbHNlCi0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNl
dCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3RzLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJl
Y3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgp
IH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
VW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JU
ZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBv
aW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0
eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKHJlY3QsIHN0eWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdHlsZSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJv
Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2Rl
IHJvdW5kaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gcmVjdDsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJv
dW5kVG9EZXZpY2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fp
cm86OnRyYW5zbGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKQotewotICAgIC8v
IENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9y
cwotICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Ig
c3Ryb2tlCi19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnVwZGF0ZVN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgLy8gQ2Fpcm8gY29udGV4dHMgY2FuJ3QgaG9s
ZCBzZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCi0gICAgLy8gc28gd2Ugc2V0IHRoZW0g
anVzdCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKLX0KKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBD
YWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7CiAKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tl
VGhpY2tuZXNzKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKLX0KKyAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICAgICAgLy8gTWVh
bmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcworICAgICAgICAgICAg
YXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAgICAgICAgICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0
LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBD
YWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAKLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoKnBs
YXRmb3JtQ29udGV4dCgpLCBzdHJva2VTdHlsZSk7CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlh
bGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4
dCgpLCB0cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
LCBjb25zdCBDb2xvciYpCi17Ci0gICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsKLSAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBh
c3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgIC8vIFdlIGZs
aXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBh
eGlzCi0gICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBvZmZzZXQud2lkdGgoKSwgLW9m
ZnNldC5oZWlnaHQoKSB9OwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UGxhdGZvcm1TaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0
Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSk7CiAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRm
b3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpzdHJva2VSZWN0KCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Q2FwKExpbmVDYXAgbGluZUNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVD
YXAoTGluZUNhcCBsaW5lQ2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5l
Q2FwKGxpbmVDYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0
KCksIGxpbmVDYXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFz
aE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVz
LCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnNldExpbmVKb2luKGxpbmVKb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVKb2luKCpw
bGF0Zm9ybUNvbnRleHQoKSwgbGluZUpvaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0
aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRl
ckxpbWl0KG1pdGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29u
dGV4dCgpLCBtaXRlcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUFs
cGhhKGZsb2F0KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21w
b3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCksIGNvbXBvc2l0
ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFz
Q2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKLXsKLSAgICBjbGlwUGF0
aChwYXRoLCB3aW5kUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5yb3RhdGUocmFkaWFucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpyb3RhdGUoKnBsYXRm
b3JtQ29udGV4dCgpLCByYWRpYW5zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2Nh
bGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgQ2Fpcm86OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3IuaXNWYWxp
ZCgpKQorICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8
fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFu
c2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwotICAgIENhaXJv
OjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBJbnRTaXplKGlt
YWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9w
dGlvbnMpOworICAgIENhaXJvOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2
ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxl
KQorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNv
bnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFNo
b3VsZEFudGlhbGlhcygqcGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7CisgICAgcmV0dXJuIENh
aXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5
cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3Ro
aW5nKQogewotfQorICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAg
IHJldHVybjsKIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
Y29uc3QKLXsKLSAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3RvcjxjYWlyb19n
bHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOworICAgIHsKKyAgICAgICAgYXV0byB5T2Zm
c2V0ID0gcG9pbnQueSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBo
czsgKytpKSB7CisgICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zm
c2V0LCB5T2Zmc2V0IH07CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRo
KCk7CisgICAgICAgICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOworICAgICAg
ICB9CisgICAgfQogCi0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRl
eHQoKnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRG
b250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7CisgICAgZG91YmxlIHN5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKworICAgIGlmICgh
Zm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKKyAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKKworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKKyAgICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZp
bGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAgICAgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01v
ZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFk
b3dDb2xvciwKKyAgICAgICAgZm9udFNtb290aGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0OWZiZGY3MjkyMzc5
ZWUyMzFiOWFkZjcwZTdkZjJjMzA3MWUyN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC0w
LDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENB
SVJPKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK3R5cGVkZWYgc3RydWN0IF9j
YWlybyBjYWlyb190OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtQ29u
dGV4dENhaXJvOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDYWlybyBm
aW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJvJik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8oY2Fpcm9fdCopOworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAg
ICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
KyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7
CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgdm9pZCBzZXRMaW5l
Q2FwKExpbmVDYXApIGZpbmFsOworICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOwor
ICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFs
OworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbDsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZp
bmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5
bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVz
dG9yZSgpIGZpbmFsOworCisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsK
KyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9h
dFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSBmaW5hbDsKKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisg
ICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZp
bmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKKyAg
ICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICBGbG9hdFJl
Y3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6
OlJvdW5kaW5nTW9kZSkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtQ29udGV4dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OworICAgIFBsYXRmb3Jt
Q29udGV4dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4
MTdiZmQ0ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNs
dWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29u
dGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250ZXh0
XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxDYWlybz4oY29udGV4dCwgcGxhdGZvcm1D
b250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGNh
aXJvX3QqIGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW2NhaXJvQ29udGV4dF0oR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIGNhaXJvQ29udGV4dCk7Ci0gICAg
ICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dElt
cGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAg
LCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0
KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1f
cHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29u
dGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRl
eHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVkUGxh
dGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4
dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAg
ICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4o
bV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNz
Q29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250
ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86On5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0
LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAmbV9wbGF0Zm9ybUNv
bnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3Mp
OwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hh
bmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250
ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3Mg
Y29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAg
ICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBo
YXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29u
c3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkp
OwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0Owot
ICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0Lndp
ZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFu
Z2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQot
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFu
Z2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1D
b250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xlYXJTaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExp
bmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0
LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgQ2Fpcm86OnNldExpbmVK
b2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fp
cm86OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAg
ICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50
LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0g
ICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYWlybzo6c2F2ZShtX3Bs
YXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBwYXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZp
b3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVy
YXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVy
YXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2
aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUoc3Rh
dGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBDYWlybzo6ZmlsbFJvdW5k
ZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwotICAg
IGVsc2UKLSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LnJl
Y3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1v
ZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKQotewotICAgIENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVS
ZWN0LCB7IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBDYWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBmaWxs
UGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBh
dGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGgg
cGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsKLSAgICBp
ZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJv
R2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55
KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAg
ICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQg
fTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAg
ICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURhdGEo
KS5zY2FsZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5
bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmco
KSkKLSAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGlu
ZzsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBD
YWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJv
R2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAg
ICAgICAgZm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXcoZ3JhcGhpY3NDb250ZXh0KCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNF
RF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQs
IGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9u
cywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWly
bzo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBD
YWlybzo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZShtX3Bs
YXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xp
bmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAg
IENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwg
cGF0aCwgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3RzLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
c2F2ZSgpCi17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9yZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3Rv
cmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZSht
X3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0ZSht
X3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJv
OjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Ci17Ci0gICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4dCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
bV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIENhaXJvOjplbmRUcmFuc3Bh
cmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xp
cChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xp
cE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBP
dXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17
Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7
Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKLXsK
LSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAg
aWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1D
b250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpS
b3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBp
eGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxFKFZJ
REVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBs
ZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThkYmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZj
ZjJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2Fs
aWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJ
bXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwotCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJs
aWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCopOwotCi0gICAgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4dENhaXJvJik7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIGNhaXJvX3QqKTsK
LSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQotICAgIGJvb2wgaGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fp
cm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBm
aWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxl
bmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJv
b2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFu
c3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xp
cFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0j
aWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5Q
YWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+
IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxh
dGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmlu
ZGV4IGQzN2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYzMzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3
NTJlNzk1MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkNvbG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8u
aCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQu
Y3BwCmluZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUwNzYyNzVmNTIzZmE4MDcxZWEuLjliNWMw
YWQwNzQ0NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1
ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0
aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxjYWly
by5oPgpAQCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJgogCiAgICAgUmVm
UHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkp
OwogICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2NvbnRleHQg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
cmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBHcmFw
aGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
YXRoQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0
aENhaXJvLmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJmMDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFm
Li4yYTE5ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1VuaXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNh
aXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIK
ICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0
aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0
Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tl
U3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBw
bGllcihnYyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VD
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFw
aGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhp
Y3NDb250ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFw
aGljc0NvbnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcx
YjhlMWM5MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmY2OTMzZDQ1YTA2ODkwZGZmNjVhYTkyYWE1
NDUxYjVlMzI2NDUyMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBz
dGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBj
YWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29sb3Io
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDR0NvbnRl
eHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7
Ci19Ci0KIGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4
dFJlZiBjb250ZXh0KQogewogICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChDR0Nv
bnRleHRHZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdl
dEJhc2VDVE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNv
bnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkp
CitzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29yZUludGVycG9sYXRpb25RdWFsaXR5KENH
SW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsKICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsK
ICAgICBjYXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OgpAQCAtODIsNiArNzcsMzQgQEAgc3Rh
dGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0lu
dGVycG9sYXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRl
ZmF1bHQ7CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRpb25RdWFsaXR5IGNnSW50ZXJwb2xhdGlv
blF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1
YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAg
ICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRp
b25Ob25lOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0
dXJuIGtDR0ludGVycG9sYXRpb25Mb3c7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6
TWVkaXVtOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xh
dGlvbkhpZ2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30K
Kworc3RhdGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5n
TW9kZUZsYWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxsID0gbW9kZS5jb250YWlucyhUZXh0RHJh
d2luZ01vZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tlID0gbW9kZS5jb250YWlucyhUZXh0RHJh
d2luZ01vZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQorICAgICAgICByZXR1
cm4ga0NHVGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZpbGwpCisgICAgICAgIHJldHVybiBrQ0dU
ZXh0RmlsbDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9rZTsKK30KKwogc3RhdGljIENHQmxlbmRN
b2RlIHNlbGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0x
NTYsMzUgKzE3OSwzNCBAQCBzdGF0aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTQogICAgIHJldHVybiBrQ0dC
bGVuZE1vZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQo
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRl
eHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewogICAgIGlmICghY2dDb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBp
biBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xv
cigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNl
dFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBtX3N0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHko
Q0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9u
IHRoZSBHcmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBpdCBkb2Vzbid0IG1hdHRlcj8KKyAgICBz
ZXRGaWxsQ29sb3IoZmlsbENvbG9yKCkpOworICAgIHNldFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9y
KCkpOworICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CisgICAgbV9z
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFsaXR5
KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250
ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAot
Q0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK0NH
Q29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9j
Z0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZl
KCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMg
Y2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAg
ICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTQsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2ZSgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGlu
IHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4
dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsyMjUsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTI5OCw3ICszMTgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2Us
IGNvbnN0IEZsbwogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9w
ZXJhdGlvbigpOwogICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7
Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24o
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAg
IC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQog
ICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LngoKSwg
YWRqdXN0ZWREZXN0UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNDUsMTAgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG8KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQpOwogI2VuZGlmCi0gICAg
ICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBv
bGRCbGVuZE1vZGUpOworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRl
T3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKElt
YWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGlt
YWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVj
dCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxp
c2Vjb25kcygpIDw8ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8
PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8
ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sg
IiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8
ICJtcyIpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8s
IENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM1OSw3IEBAIHN0YXRpYyB2b2lkIGRy
YXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0
ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhG
bG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0Q0coY29udGV4
dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGlt
YWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQpAQCAtMzQ3LDE2ICszNjcsMTggQEAgc3RhdGljIHZvaWQgcGF0
dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxPbk1haW5UaHJlYWQoW2lt
YWdlID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZvKSldIHsgfSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3Jt
SW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
KyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9u
cy5ibGVuZE1vZGUoKSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVz
dFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0NDUsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBh
IHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRo
aWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogdGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQ
YXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgp
KTsKIApAQCAtNDU4LDE5ICs0NzIsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogfQogCiAvLyBU
aGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0
cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0
aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBm
bG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55
KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSArNTMyLDE1IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhj
b250ZXh0LCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBQYXRoIHBhdGg7
CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRy
YW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0o
Y2dDb250ZXh0KSk7CiAKQEAgLTU2NSwxNiArNTU1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0Nv
bnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVz
ZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQp
KTsKIApAQCAtNjE2LDE1ICs1OTgsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURy
YXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICBy
ZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUg
PSBtX3N0YXRlOwpAQCAtNjU0LDE1ICs2MzEsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8
fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKQEAgLTcxOCwxNiArNjkwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJv
a2VQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdy
YWRpZW50KSB7CkBAIC03OTQsMTYgKzc2MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KSB7CkBAIC04MzMsNyArNzkyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAobV9zdGF0ZS5maWxs
UGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCi0gICAgYm9vbCBkcmF3T3du
U2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYm
ICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1
ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9k
ZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3co
KSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdP
d25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTg0NiwyMyAr
ODA1LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9s
ZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xv
cikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IpOwogCi0gICAgYm9vbCBk
cmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRv
dygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hh
ZG93Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVy
aW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRT
aGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYg
KGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTg4
MSwyMCArODMyLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3Io
Y29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsK
IAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9y
KGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJh
dGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisg
ICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAg
IC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05MjQsMTYgKzg3MCw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xv
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhv
bGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgUGF0aCBwYXRoOwpAQCAtOTUx
LDcgKzg4OSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0CiAgICAgc2V0RmlsbENvbG9yKGNv
bG9yKTsKIAogICAgIC8vIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgYXNzdW1lcyB0aGF0IHRo
ZSBlZGdlcyBvZiByZWN0IGFyZSBjbGlwcGVkIG91dCwgc28gd2Ugb25seSBjYXJlIGFib3V0IHNo
YWRvd3MgY2FzdCBhcm91bmQgaW5zaWRlIHRoZSBob2xlLgotICAgIGJvb2wgZHJhd093blNoYWRv
dyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9z
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAo
cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0Js
dXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAg
ICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4K
QEAgLTk3MCw1MiArOTA4LDI4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0CiAgICAgc2V0Rmls
bENvbG9yKG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3Qp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIC8vIEZJWE1FOiBVc2luZyBDR1JlY3RJbmZpbml0ZSBpcyBtdWNoIGZhc3RlciB0
aGFuIGdldHRpbmcgdGhlIGNsaXAgYm91bmRpbmcgYm94LiBIb3dldmVyLCBkdWUKICAgICAvLyB0
byA8cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBiZSB1c2Vk
IHdpdGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJh
bnNmb3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1
ZSB0byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVzZSBpdCBp
biBmb3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KICAgICBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0Nv
bnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAo
IWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CisgICAg
Ym9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUocGxhdGZvcm1Db250
ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsKICAgICBD
R1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5maW5pdGUg
OiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpLCByZWN0IH07
CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRl
eHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIDIpOwogICAgIENHQ29udGV4dEVP
Q2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0
aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCks
IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwogICAgIGlm
ICghcGF0aC5pc0VtcHR5KCkpCkBAIC0xMDIzLDE2ICs5MzcsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogICAgIENHQ29udGV4dEVPQ2xpcChwbGF0
Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCBDR1JlY3RaZXJvKTsKQEAgLTEwNDksMjMgKzk1NSwxNCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUp
CiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRz
KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4g
SW50UmVjdCgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xp
cEJvdW5kcygpOwotCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xp
cEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgIHNhdmUoKTsKIApAQCAtMTA3NSwxMiAr
OTcyLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1L
bm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5k
UGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5j
eUxheWVyKGNvbnRleHQpOwpAQCAtMTA4OCwxMSArOTgyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJv
dW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zm
c2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBM
QVRGT1JNKFdJTikKQEAgLTExMDAsNyArOTg5LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dP
ZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAog
ICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAj
ZWxzZQotICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCisgICAgaWYgKGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09m
ZnNldHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCkBAIC0xMTIxLDIxICsxMDEwLDIyIEBA
IHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxv
YXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1D
b250ZXh0KCk7CisKKyAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CisgICAgICAg
IENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsK
ICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgCiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGF2b2lkIHRoZSBzaGFkb3cgc2V0dXAg
Y29zdCB3aGVuIHdlIGtub3cgd2UnbGwgcmVuZGVyIHRoZSBzaGFkb3cgb3Vyc2VsdmVzLgogCiAg
ICAgQ0dGbG9hdCB4T2Zmc2V0ID0gb2Zmc2V0LndpZHRoKCk7CiAgICAgQ0dGbG9hdCB5T2Zmc2V0
ID0gb2Zmc2V0LmhlaWdodCgpOwogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7Ci0gICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghbV9z
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpIHsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0g
dXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAKICAgICAgICAgQ0dG
bG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFzZUNUTS5hICsgdXNlclRvQmFzZUNU
TS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTE1Niw3ICsxMDQ2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9h
dCBibHVyLCBjb24KICAgICAvLyBFeHRyZW1lICJibHVyIiB2YWx1ZXMgY2FuIG1ha2UgdGV4dCBk
cmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0aW1lcywgc28gY2xhbXAKICAgICBibHVy
UmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KDEw
MDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoKnRoaXMs
IHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVl
ZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CiAKICAgICAvLyBDaGVjayBm
b3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRoZSBjb2xvciB3YXMgbm90
IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhlcmVmb3JlIGp1c3Qg
dXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAgLTExNjYsNTAgKzEwNTYsNTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb24KICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9mZnNldCksIGJsdXJSYWRpdXMsIGNhY2hl
ZENHQ29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZv
cm1TaGFkb3coKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyBmbGFncykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgp
LCBDR1NpemVaZXJvLCAwLCAwKTsKLX0KKyAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2lt
cGwtPnNldE1pdGVyTGltaXQobGltaXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2Up
KQorICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNo
ZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKSk7CiAKLSAgICBDR0NvbnRleHRTZXRNaXRlckxp
bWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19CisgICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQorICAgICAgICBzZXRDR0Zp
bGxDb2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3IpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNv
bnRleHQsIHN0YXRlLmFscGhhKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5jbGVhclJlY3Qocik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGZsYWdzLmNv
bnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5n
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKKyAgICAgICAgQ0dD
b250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsIHNlbGVjdENHQmxlbmRNb2RlKHN0YXRlLmNvbXBv
c2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKIAotICAgIENHQ29udGV4dENsZWFyUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRT
ZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERy
YXdpbmdNb2RlKSk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFu
dGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkp
CisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNo
b3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCisgICAgICAgIENHQ29u
dGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxp
dHkoc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworCisgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAgICBzZXRD
R1NoYWRvdygqdGhpcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1f
c3RhdGUuc2hhZG93Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQo
cGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JiByKQoreworICAgIENHQ29udGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7Cit9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CkBAIC0x
MjY5LDE2ICsxMTYyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0
aChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNh
cCBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGNhcCkgewogICAgIGNhc2UgQnV0dENhcDoKICAg
ICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1
dHQpOwpAQCAtMTI5MiwxNiArMTE3Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Q2FwKExpbmVDYXAgY2FwKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNo
KGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAo
ZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCkBAIC0xMzEyLDE2ICsxMTg5
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
ZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRm
b3JtQ29udGV4dCgpLCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihqb2luKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIHN3aXRjaCAoam9pbikgewogICAgIGNhc2UgTWl0ZXJKb2luOgogICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5N
aXRlcik7CkBAIC0xMzM1LDk0ICsxMjA0LDQzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lSm9pbihMaW5lSm9pbiBqb2luKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAg
Y2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2Fs
ZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFNjYWxlQ1RN
KHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIG1f
ZGF0YS0+c2NhbGUoc2l6ZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3Rh
dGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUoZmxvYXQgYW5n
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJvdGF0ZShhbmdsZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0
KCksIGFuZ2xlKTsKICAgICBtX2RhdGEtPnJvdGF0ZShhbmdsZSk7CiAgICAgbV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAg
IG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwog
ICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZh
bHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5z
ZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4
dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPnNldENU
TSh0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNs
dWRlU2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Ci0KICAgICAvLyBUaGUgQ1RNIHVzdWFs
bHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVu
IHRoZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBm
YWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCiAgICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRl
ZSB0aGUgZGV2aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBBUEkuCkBA
IC0xNDMyLDE0ICsxMjUwLDggQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiAgICAgcmV0dXJuIENH
Q29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3Vu
ZGluZ01vZGUgcm91bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4g
cmVjdDsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9E
ZXZpY2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIC8vIEl0IGlzIG5vdCBlbm91
Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNlLiBUaGUgcm90YXRpb24g
cGFydCBvZiB0aGUKICAgICAvLyBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBkZXZpY2Ugc3Bh
Y2UgY2FuIG1lc3Mgd2l0aCB0aGlzIGNvbnZlcnNpb24gaWYgd2UgaGF2ZSBhCiAgICAgLy8gcm90
YXRpbmcgaW1hZ2UgbGlrZSB0aGUgaGFuZHMgb2YgdGhlIHdvcmxkIGNsb2NrIHdpZGdldC4gV2Ug
anVzdCBuZWVkIHRoZSBzY2FsZSwgc28KQEAgLTE0ODIsMjcgKzEyOTQsMTEgQEAgRmxvYXRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nTW8KICAgICByZXR1cm4gRmxvYXRSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5k
ZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQogewotICAgIERhc2hBcnJheSB3
aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMuYXBwZW5kKHJlY3Qud2lk
dGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0
KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRo
cy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRp
bmcsIGRvdWJsZUxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENvbG9yIGxv
Y2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0g
Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9p
bnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2Fs
U3Ryb2tlQ29sb3IpOwpAQCAtMTU1NiwxNiArMTM1Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25l
c3MsCiAgICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBmaWxsQ29sb3Io
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
bGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4
dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUgZm9yIGRpc3BsYXkgbGlzdHMuCi0gICAg
fQotCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxSZWYgPSBsaW5rLmNyZWF0ZUNGVVJMKCk7
CiAgICAgaWYgKCF1cmxSZWYpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NzksMzYgKzEzNjcsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiAgICAgQ0dQREZDb250ZXh0U2V0VVJMRm9yUmVjdChj
b250ZXh0LCB1cmxSZWYuZ2V0KCksIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENH
Q29udGV4dEdldENUTShjb250ZXh0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IG1v
ZGUpCi17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotCi0gICAgQ0dJbnRlcnBv
bGF0aW9uUXVhbGl0eSBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci0gICAgc3dp
dGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAg
ICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAg
ICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbk5vbmU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVy
cG9sYXRpb25Mb3c7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25NZWRpdW07Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAg
ICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uSGlnaDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgp
LCBxdWFsaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCBpc0xheWVyQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldElzQ0FM
YXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIGZvciBD
QSBDb250ZXh0LgogICAgIEFTU0VSVChtX2RhdGEpOwogICAgIGlmIChpc0xheWVyQ29udGV4dCkK
QEAgLTE2MTcsMTI5ICsxMzc3LDI4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5
ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0
RmxhZ3MgJj0gfklzTGF5ZXJDR0NvbnRleHQ7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojpp
c0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEgJiYgKG1fZGF0YS0+bV9jb250
ZXh0RmxhZ3MgJiBJc0xheWVyQ0dDb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAv
LyBTaG91bGQgYmUgY2FsbGVkIGZvciBDQSBDb250ZXh0LgotICAgIEFTU0VSVChtX2RhdGEpOwog
ICAgIGlmIChpc0FjY2VsZXJhdGVkKQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzIHw9
IElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiAgICAgZWxzZQogICAgICAgICBtX2RhdGEtPm1fY29u
dGV4dEZsYWdzICY9IH5Jc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorUmVuZGVyaW5nTW9kZSBHcmFw
aGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgcmV0dXJuIG1faW1wbC0+cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJc0FjY2Vs
ZXJhdGVkQ0dDb250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1U
ZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKLSAgICAKLSAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3aW5nTW9k
ZTo6RmlsbCk7Ci0gICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3aW5nTW9k
ZTo6U3Ryb2tlKTsKLSAgICBpZiAoZmlsbCAmJiBzdHJva2UpCi0gICAgICAgIENHQ29udGV4dFNl
dFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0RmlsbFN0cm9rZSk7Ci0gICAgZWxzZSBp
ZiAoZmlsbCkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtD
R1RleHRGaWxsKTsKLSAgICBlbHNlIGlmIChzdHJva2UpCi0gICAgICAgIENHQ29udGV4dFNldFRl
eHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0U3Ryb2tlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR1N0cm9rZUNvbG9yKHBsYXRmb3Jt
Q29udGV4dCgpLCBjb2xvcik7CisgICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJ
c0FjY2VsZXJhdGVkQ0dDb250ZXh0ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25lc3MsIDAuZikpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQo
KSwgZW5hYmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxk
U21vb3RoRm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQot
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFi
bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBh
bHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxw
aGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHBsYXRmb3JtQ29udGV4dCgpLCBzZWxlY3RD
R0JsZW5kTW9kZShjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAg
Ly8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0
byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRv
IGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVz
LCBzdWNoIGFzIGZvY3VzIHJpbmdzLApAQCAtMTc0NywxMyArMTQwNiw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgQ0dDb250ZXh0U2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgQ0dB
ZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
KSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0
RmlsbEVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMuCiAgICAgaWYgKG1f
c3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgZmls
bEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBAIC0xNzY0LDEzICsxNDE4LDggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KQogICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRleHQsIGVsbGlwc2UpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAg
ICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29s
b3JzLgogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0
dGVybikgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc4MSwx
OCArMTQzMCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJl
Y3QoY29udGV4dCwgZWxsaXBzZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c0ludGVybmFsTGlua3MoKSBjb25zdAordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0RGVzdGlu
YXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKIHsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERl
c3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3QgcmVjdCA9IGRlc3RS
ZWN0OwpAQCAtMTgwMiwxNSArMTQ0MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0
aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmCiAgICAg
Q0dQREZDb250ZXh0U2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZT
dHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvc2l0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBDR1Bv
aW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdldENUTShjb250ZXh0
KSk7CiAgICAgQ0dQREZDb250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnRleHQsIG5hbWUu
Y3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
aAppbmRleCAyNWEwODY2ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBkYzc1Li45MzBmOTI0
NWM2MWMwZjkzMTE1Nzk5OTJjMjhkNmRmYWJkNTQyNDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTcy
LDUgKzcyLDEwNSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKIH07CiAK
K2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNz
Q29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsK
KworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhIREMsIGJvb2wgaGFz
QWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisKKyAgICB+
R3JhcGhpY3NDb250ZXh0Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgp
IGZpbmFsOworCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3Jk
ZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmlu
YWw7CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmlu
YWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKworICAgIHZvaWQg
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKKworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKKworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKworICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5h
bDsKKworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7CisgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNs
aXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKwor
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5P
ZGQpIGZpbmFsOworCisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7CisKKyAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lkIHNldExp
bmVKb2luKExpbmVKb2luKSBmaW5hbDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZp
bmFsOworCisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7Cisg
ICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
IGZpbmFsOworICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5hbDsKKyAg
ICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKworICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qg
ZmluYWw7CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKworICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYp
IGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisjZW5kaWYKKworICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKworICAgIHZv
aWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKwor
ICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisKKyAgICBib29sIHN1cHBv
cnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZv
aWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisKKworcHJpdmF0ZToKKyAgICBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKK307CisKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCmluZGV4IDVmZmNlMTJmZWEyMTlm
MzEwMGE4YmViOTYyMzMwODA4NzhjYTdiYTYuLjY4NjVmMGJkNDFiYjQ4NDYwZGJhMWY0ZjZiYTU4
MDc4NGNjYWVlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTg1
LDcgKzg1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNnQ29udGV4dCkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVs
bHB0ciwgZGF0YSwgbnVtQnl0ZXMsIFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
KSB7CiAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGNlZDNhZGJh
MmI0YzEyZjBlODIzYTA4OGQyNWZjMTVhYTg4OWE0MjcuLmRjNWQyNTQ2YzQ0Yzg2NTViYWQzYmQw
YjQ1ZWNlMzQwZGM1MzExNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0aENHLmNwcApAQCAtMjQ0LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29u
dGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBh
dGgoY29udGV4dCwgcGxhdGZvcm1QYXRoKCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAK
ICAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0
LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYgc3Ryb2sKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgp
KTsKIAogICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3Jh
cGhpY3NDb250ZXh0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQxYTg5N2ZhYTNl
NWRmZGFiMjNkZjgxMzQuLjA1YTM5MTY1NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRkMDg4YzhkYTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNH
LmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgog
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNr
KHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQogICAgIGlmICghcGxhdGZvcm1JbWFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQo
Y29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKKyAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNz
Q29udGV4dENHKGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCiAgICAgICAgIEZsb2F0UmVj
dCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQo
cGxhdGZvcm1JbWFnZSkpKTsKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwg
cGxhdGZvcm1JbWFnZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCBlMjlhZWNkZmJmZTY4
MDA2N2ZjYmExOTM5ZmFlNTFlZGM4NzkyZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3OGFiY2E4N2Jl
NDIyZmI1ODFjZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDcgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCmluZGV4IDE0MjFlYjkwZDdhNDlkMWU0ODI0YjVh
Yzg5Njg4MTNhMzA1NDNmN2QuLjM4OGFmY2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5NjdmMGU1MzU1
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dy
YXBoaWNzQ29udGV4dENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCkBAIC0xMDYsNDggKzEwNiwzMyBAQCBz
dGF0aWMgdm9pZCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBD
R1BhdGhSZWYgZm9jdXNSaW5nUGF0aAogICAgIGRyYXdGb2N1c1JpbmcoY29udGV4dCwgY29sb3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgcGF0aC5pc051bGwoKSkKKyAgICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1Jpbmco
cGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9y
bVBhdGgoKSwgY29sb3IpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgYm9vbCBk
cmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhS
ZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3N0YXRpYyBib29sIGRyYXdGb2N1c1JpbmdUb0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNv
bnRleHQsIENHUGF0aFJlZiBmb2N1c1JpbmdQYXRoLCBkb3VibGUsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBVTlVTRURfUEFSQU0odGltZU9mZnNldCk7CiAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0
aCk7CiAgICAgcmV0dXJuIGRyYXdGb2N1c1JpbmdBdFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjptYXgoKSwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9v
bCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSB8fCBwYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSAvLyBGSVhNRTogaW1wbGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4K
KyAgICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbmVlZHNSZWRy
YXcgPSBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRo
LnBsYXRmb3JtUGF0aCgpLCB0aW1lT2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91
YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1
cyByaW5nIGRyYXdpbmcuCi0gICAgICAgIHJldHVybjsKLQogICAgIFJldGFpblB0cjxDR011dGFi
bGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkp
OwogICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRS
ZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdChyZWN0KSk7CkBAIC0xNTcsMTYgKzE0
Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMp
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lk
dGgsIG9mZnNldCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUmV0YWlu
UHRyPENHTXV0YWJsZVBhdGhSZWY+IGZvY3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0
ZU11dGFibGUoKSk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0
aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNl
dCwgLW9mZnNldCkpOwpAQCAtMTk5LDExICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xv
ckZvck1hcmtlckxpbmVTdHlsZShEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSBzdHlsZSwg
YgogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBXZSB3
YW50IHRvIGZpbmQgdGhlIG51bWJlciBvZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNvbHZpbmcgdGhl
IGVxdWF0aW9uczoKICAgICAvLyBkb3REaWFtZXRlciA9IGhlaWdodAogICAgIC8vIGRvdERpYW1l
dGVyIC8gZG90R2FwID0gMTMuMjQ3IC8gOS40NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCA1OGM1MTI0ZDRiNmM2MTM2
NGU4ZDM2OTZmMzQ5NWZkYjI2NDU5N2EwLi5lMTM4YzMyMDFkZGU2NDUwMDViODZkMGE5ZjYxYThm
NDBmNzQ2ODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zNzEsNyArMzcxLDcgQEAgR3JhcGhpY3NDb250ZXh0JiBJ
T1N1cmZhY2U6OmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpCiAgICAgaWYgKG1fZ3JhcGhpY3NDb250
ZXh0KQogICAgICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwogCi0gICAgbV9ncmFwaGlj
c0NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oZW5zdXJlUGxhdGZvcm1Db250
ZXh0KCkpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRDRz4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5z
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dCh0cnVlKTsKIAogICAgIHJldHVybiAqbV9ncmFwaGljc0Nv
bnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlci5oCmluZGV4IDIwZGFlZjRiYjQxZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAwNGYzZjcuLjNl
NTUxYjg1NzY2Njc0NDg1NTg1OWVjOThiMWVjYTA2MzU5YzI5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdH
bHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgog
I2luY2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogI2lm
IFVTRShDT1JFX1RFWFQpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgpA
QCAtNjgsNyArNjksOSBAQCBwdWJsaWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRy
YXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0RlY29u
c3RydWN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0ZUludGVy
bmFsQ29udGV4dCgpOworI2lmIFVTRShDT1JFX1RFWFQpCisgICAgVW5pcXVlUmVmPEdyYXBoaWNz
Q29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CisjZW5kaWYKIAogICAgIHZvaWQgcG9w
dWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9p
ZCBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwpA
QCAtOTEsNyArOTQsMTEgQEAgcHJpdmF0ZToKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwogICAg
IERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKLSAg
ICBHcmFwaGljc0NvbnRleHQgbV9pbnRlcm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9URVhU
KQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OworI2Vu
ZGlmCisKICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBG
b250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0
b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNS
ZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzljZTU5OGI1Mjc3
MDJjOGFhMzNkLi5jYWNmNzY0ZjVkZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkxYzg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyQ29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgog
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBDR0Vy
cm9yIGRyYXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdT
dGF0ZVJlZiByc3RhCiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotR3JhcGhpY3ND
b250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK1VuaXF1
ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxD
b250ZXh0KCkKIHsKICAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0
RGVsZWdhdGVDcmVhdGUodGhpcykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2so
Y29udGV4dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dD
b250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcgKzg1LDcgQEAg
R3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0
KCkKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQo
KSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJh
Y2s+KCZXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENHQ29udGV4dERl
bGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJbWFnZSwgcmVp
bnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0ltYWdlKSk7CiAg
ICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVsZWdhdGUoY29u
dGV4dERlbGVnYXRlLmdldCgpLCBrQ0dDb250ZXh0VHlwZVVua25vd24sIG51bGxwdHIsIG51bGxw
dHIpKTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0K
IAogRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVy
LCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAt
MTE5LDM0ICsxMjAsMzEgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJu
YWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgY29udGV4dFN0YXRlKQogewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbENvbG9y
KG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwogICAg
IGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmln
aW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRG
aWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9r
ZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ry
b2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9p
bnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHls
ZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRp
ZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmln
aW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBt
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVy
bik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAg
ICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7
CiAgICAgfQogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5j
dG0pOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7
CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29y
aWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChjb250ZXh0U3Rh
dGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
TGVnYWN5U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwotICAgIGVsc2UK
LSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuY29sb3IpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJh
bnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOworICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQs
IG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xv
ciwgY29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRlcm5hbENvbnRl
eHQuc2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworICAg
IG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHRE
cmF3aW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJu
YWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01v
ZGUpCkBAIC0zMDIsNyArMzAwLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERy
YXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAg
cmV0dXJuOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3NpdGlvbiA9IENH
Q29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQo
KSk7CisgICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9p
bnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIXRleHRQb3Np
dGlvbi54KTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpAQCAtMzIxLDcg
KzMxOSw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91IHNldCB0aGVz
ZSB0d28gZXF1YWwgdG8gZWFjaCBvdGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3UgZ2V0CiAgICAg
Ly8gQ1RNICogY3VycmVudFRleHRNYXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRy
aXgKICAgICAvLyBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5hbFRleHRNYXRy
aXgpID0gWAotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4
dEdldFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRy
aXgobV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gY3RtRml4dXA7CiAgICAgaWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXgg
PSBtX29yaWdpbmFsVGV4dE1hdHJpeC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZpeHVwID0gY3Vy
cmVudFRleHRNYXRyaXggKiBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1ZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDU0
ZDg1NDcxMjNmODk0N2Q2ZjJmYWNkN2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3NmZlOTEyZDY4
MTAyMDc2MTAwMWNjMjRmNjg2ODg2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdD
b250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSwgUmVjb3JkZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY29u
dGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKLSAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5
TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUp
LCBpbml0aWFsQ1RNLCBkZWxlZ2F0ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3Bs
YXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6
ZSksIGluaXRpYWxDVE0sIGRlbGVnYXRlKQogewogfQogCkBAIC00NiwxMyArNDQsNiBAQCB2b2lk
IERyYXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KQogICAgIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNldCgpOwogfQog
Ci1SZWNvcmRlciYgRHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBhdXRvKiBncmFw
aGljc0NvbnRleHRJbXBsID0gY29udGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQoZ3JhcGhpY3ND
b250ZXh0SW1wbCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4oKmdyYXBoaWNz
Q29udGV4dEltcGwpOwotfQotCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlz
dChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewogICAgIGlmIChtX2Rpc3BsYXlMaXN0
LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCmluZGV4IGQzN2MwNzM1YmViNTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRk
ZGVmODU3NTI4YzgyNzllNGYxZWZiZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBE
cmF3aW5nQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd2luZ0NvbnRl
eHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBp
bml0aWFsQ1RNID0geyB9LCBSZWNvcmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7CiAKKyAgICAv
LyBGSVhNRTogRGVkdXBsaWNhdGUgdGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2Nv
bnRleHQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBS
ZWNvcmRlciYgcmVjb3JkZXIoKSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxp
c3QgdGFrZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0
LCB7IH0pOyB9CiAgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNw
bGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAK
IHByb3RlY3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVy
IG1fY29udGV4dDsKICAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbk1lbW9yeURpc3BsYXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAg
Ym9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0
NmIxODJjMGEzLi5mMjIyZTIxODNhMzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0
YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxs
aXBzZSYgaXRlbSkKIAogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KSBjb25zdAogewotI2lmIFVTRShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7
Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggMDc0MDQxZjI2YTFlOTY0ZGM0Yzc2
ZjQ4MmJjNGM5OTNlODdlZTMxNS4uZjExN2NmYTgzOTM2MDg5ZTcxZmQwNWFiNzg2NDhiZDI0OGQ1
ZTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2
IEBAIHB1YmxpYzoKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVy
bkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1h
Z2VJZGVudGlmaWVyOyB9CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0
ZXJuSW1hZ2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1h
Z2VJZGVudGlmaWVyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2Vz
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERl
Y29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAt
MzM1LDkgKzMzMSw3IEBAIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBj
b25zdAogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5j
b2RlciA8PCBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRv
d0NvbG9yOwotI2lmIFVTRShDRykKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNl
TGVnYWN5UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2Mywx
NCArNDU3LDEyIEBAIE9wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiAKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpz
aGFkb3dDb2xvcjsKIAotI2lmIFVTRShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93
c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFk
aXVzOwotICAgICAgICBpZiAoIXNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlv
bmFsPFNoYWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIg
Pj4gc2hhZG93UmFkaXVzTW9kZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0
YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNl
bmRpZiAvLyBVU0UoQ0cpCisgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0
ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VUaGlja25lc3NDaGFuZ2UpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKaW5kZXggNjk0NDgyOGRmYzY0Yjg3NGI5MzdjZWVhZGYyYWVkYzJhNjczODExNS4uMzEx
MWI5MTcxMzAyMDBmOTFmMWQ4MWJkYWZmMGI0YzA2YWY0ZTkxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5
ZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERy
YXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNv
bnN0cnVjdGlvbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1f
ZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZs
b2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwg
RGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRp
c3BsYXlMaXN0KQogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQo
ZmFsc2UpCiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29u
c3RydWN0aW9uKQpAQCAtNTAsOSArNTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAg
IG1fc3RhdGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7
CiB9CiAKLVJlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQot
ICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChw
YXJlbnQubV9kaXNwbGF5TGlzdCkKK1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50
LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlz
cGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5t
X2RlbGVnYXRlKQogICAgICwgbV9pc05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVj
b3JkZXIoKnRoaXMsIHBhcmVudC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25z
dHJ1Y3Rpb24oKSkKQEAgLTE2NiwxMSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6
cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRl
LT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12
b2lkIFJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93Pigp
OwotfQotCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAg
ICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDExIEBAIHZvaWQg
UmVjb3JkZXI6OmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMgd2hhdCB1c2Vk
IHRvIGhhcHBlbi4KKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBt
X2Rpc3BsYXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAgIGFwcGVuZDxE
cmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5LDcgQEAgdm9p
ZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAg
IGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRl
cjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJh
bnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZhbHVlIG9mIElu
Y2x1ZGVEZXZpY2VTY2FsZS4KICAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwpAQCAtMjk4
LDggKzI5Nyw5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3TGluZT4ocG9p
bnQxLCBwb2ludDIpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywg
U3Ryb2tlU3R5bGUpCiB7CisgICAgLy8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHlsZSBub3QgdXNl
ZD8KICAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6
ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQog
CkBAIC0zMjgsNiArMzI4LDE4IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8
RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisj
aWYgUExBVEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKyNlbmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUyLDkg
QEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2lu
ZFJ1bGUpCiAgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJl
Y3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygp
IGNvbnN0CiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3Qg
eWV0IHN1cHBvcnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4g
SW50UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QpCkBAIC00NTIsMzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dAogICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRl
eHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdD
b21tYW5kc1Jlc3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7
Ci0gICAgR3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICAvLyBUaGUg
aW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgotICAgICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0
cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci0gICAgICAgIGF1dG8gc2Nh
bGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rv
cik7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOwotICAgICAgICBpbml0aWFs
Q1RNLnNjYWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxl
ZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBk
ZXN0aW5hdGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRjaGVzIEltYWdl
QnVmZmVyJ3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAg
IEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2Nh
bGUoKSk7CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRlc3RpbmF0aW9u
LnNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsK
KyAgICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBpbml0aWFsQ1RNLnRyYW5zbGF0ZSgw
LCAtc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXpl
IC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFJlY29yZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0
YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0gICAgfSk7CisgICAgUmVjb3JkZXIg
bmVzdGVkQ29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAs
IGluaXRpYWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVz
dGluYXRpb24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdGdW5jdGlvbihuZXN0ZWRDb250ZXh0
KTsKICAgICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbik7Ci19
CiAKLSNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVyOjpjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QKLXsKLSAgICByZXR1cm4gISFwbGF5
ZXIuaWRlbnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2b2lkIFJlY29yZGVyOjpwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikKIHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwogICAg
IGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOwogfQpAQCAt
NTE3LDcgKzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0
OwogICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBp
ZiAoZ3JhcGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9
IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAg
ICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVz
KSk7CkBAIC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6
OmN0bSgpIGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKIH0KIAotY29uc3Qg
RmxvYXRSZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1
cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0
ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgY3RtLnRyYW5zbGF0ZSh4LCB5
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGI4NzZkNmFkYjUx
NDczZjFmMzBhYWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2MWMxNzljN2NhOWM3YzlkMjFmMTk0
MzQwYzk3YmI5OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApA
QCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAiRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1z
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAj
aW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01
MCwxMiArNTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJ
bXBsIHsKK2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIp
OwogcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29y
ZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNE
ZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0
aW9uOjpEZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoRGlzcGxheUxp
c3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdH
bHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29y
ZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBn
ZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3NywyNCBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNSZWNvcmRlcjsKLSAgICBSZWNvcmRl
cihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgaW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuRHJh
d0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8g
RklYTUU6IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNv
bnN0IEltYWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIFVTRShD
RykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBv
dmVycmlkZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkg
b3ZlcnJpZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0Jiwg
Ym9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKwogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQg
ZGFzaE9mZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSNpZiBVU0UoQ0cpCisjaWYg
VVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBv
dmVycmlkZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBvdmVycmlkZTsKICNlbmRpZgpA
QCAtMTIwLDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywg
Y29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNiw3ICsxNTEsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJp
ZGU7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpIG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNv
bnN0IFBhdGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CisgICAg
SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5j
dGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShW
SURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZv
ck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAg
IHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CkBAIC0xNzMsNyAr
MTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAg
IGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAg
IGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAg
ICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkKICAgICAg
ICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21M
b2NhbEJvdW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRl
bS5nbG9iYWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdp
bmdJdGVtRXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRlOgogICAgIEZs
b2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAgICBjb25zdCBG
bG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250ZXh0U3RhdGUg
ewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjkyODZkMjVhMTk1
MTkyMWI4NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAxZjMzZDJmYjIw
MzFmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29s
b3JNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYv
TG9jay5oPgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+
IG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAgICAgICBSZXRh
aW5QdHI8TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFw
SW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZTox
IHBpeGVsc0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBsZXNQZXJQaXhl
bDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNv
bG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAgICAgICBHcmFw
aGljc0NvbnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dD
b250ZXh0KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChiaXRtYXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01h
a2VSZWN0KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1ZDliM2NhNGQx
Y2UwZmViOWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1NDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgi
CiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxh
eWVyLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUxLDcgKzUxLDcg
QEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1
dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxh
eWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCByZWN0c1RvUGFp
bnQgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFpbnQoZ3JhcGhp
Y3NDb250ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXll
cjo6ZHJhd0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSwgcmVjdHNU
b1BhaW50LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3JhcGhpY3NMYXll
clBhaW50U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsKTsK
ICAgICB9CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRl
eHRSZWYpY29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBsYXll
ciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9f
YnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUp
OwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXIt
PmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1MWNjN2UwMWQ0
NzBjNTcwZDlkOWYwNmMyM2Q1ZmM1Li5lODA3Njg1OTgyOWM0MmZlMTgxYzFlYzA3M2NjN2NmNzY2
MWRmOTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAt
PiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2
YQogICAgIHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWlu
dGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChj
b250ZXh0KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJiBjb21t
YW5kTGlzdCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAgICAgbV9zdGF0
ZVN0YWNrLmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwog
fQpAQCAtMTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAogICAgIH0KIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7
CiAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxS
ZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9y
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKQEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3Is
IGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSks
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVk
UmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAg
LTM4Niw3ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQwOCw3
ICs0MDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAt
NDI4LDcgKzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9r
ZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMsNyArNTE4LDcg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86
OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0cjxjYWlyb19z
Y2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCkBAIC01NTMs
NyArNTQ4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAgICAgVU5VU0VE
X1BBUkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAg
LTYxMywxMSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5l
c0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBv
aW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAgICAgICB2aXJ0
dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYyOCw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2lu
dCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5z
dHJva2VDb2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRo
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAg
c3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQogCi1BZmZpbmVU
cmFuc2Zvcm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMyLDcgKzEwMjMs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFz
dCgpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVj
dChzdGF0ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlv
bj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRz
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCitXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhN
RTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1
bHQ6OlN1Y2Nlc3M7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYx
ZmY2MzY1NmFkYTQwOWYwZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhm
ZGY3YzVjMzM5OTcyNzdiYmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29z
aWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAog
bmFtZXNwYWNlIE5pY29zaWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewog
cHVibGljOgotICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgUGFpbnRpbmdPcGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQ
YWludGluZ09wZXJhdGlvbnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KIAogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAt
NTMsNiArNTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpC
bGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlk
ZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2Vi
Q29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxv
YXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0
cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVy
cmlkZTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpIG92ZXJyaWRlOwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdl
YkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3Vs
dCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9p
ZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJ
REVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1
YjhjMWQ4N2EyYzZjMzdjY2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBj
ZmJkMDZhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0Nv
bnRleHRDYWlyby5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29z
aWFCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgog
I2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3
ICs3MSw3IEBAIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmco
QnVmZmVyJiBidWZmZXIpCiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUobV9jYWlyby5zdXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBt
YWtlVW5pcXVlPFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQu
Z2V0KCkpOwotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ+KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeSgqbV9wbGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VV
bmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7
CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkK
QEAgLTEwNCwxMSArMTA0LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRp
bmc6OnJlcGxheShjb25zdCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdD
b250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9u
cyYgcGFpbnRpbmdPcGVyYXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0
aW9uc10oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0
LCBwYWludGluZ09wZXJhdGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4
dCA9IG1ha2VVbmlxdWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25z
KTsKIH0KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGlu
ZygpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJm
NTc1ZDUyYzhiZGJkMWNlMjgyYjhlYmE3ZDUwYmIuLmNkMWQyZDJmMTA5OGQ3MWYxYmFhM2RlMTBh
ZjJkODc4NmYyYTQzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjks
NyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUg
IlBhdGguaCIKIApAQCAtNjcsMjMgKzY3LDEwIEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0
UmVmPiBDR0NvbnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJu
IGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMs
IGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERD
IGhkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdp
dGhIREMoaGRjLCBoYXNBbHBoYSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wg
aGFzQWxwaGEpCi17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0
YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyho
ZGMsIGhhc0FscGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRh
LT5tX2NnQ29udGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRz
IGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZp
bGxDb2xvcigpKTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigp
KTsKLSAgICB9CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5k
b3dzQ29udGV4dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQpAQCAt
MTI3LDE4ICsxMTQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFw
KFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG8KICAgICBDR0NvbnRleHRE
cmF3SW1hZ2UobV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZShwb2ludC54KCks
IHBvaW50LnkoKSwgaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgp
KSwgY2dJbWFnZS5nZXQoKSk7ICAgCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogLy8gRklYTUU6IFRoaXMgaXMg
bmVhcmx5IGlkZW50aWNhbCB0byB0aGUgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nIGZ1
bmN0aW9uIGluIEdyYXBoaWNzQ29udGV4dE1hYy5tbS4KIC8vIFRoZSBjb2RlIGNvdWxkIG1vdmUg
dG8gR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGFuZCBiZSBzaGFyZWQuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZmxvYXQgcmFkaXVz
ID0gKHdpZHRoIC0gMSkgLyAyLjBmOwogICAgIG9mZnNldCArPSByYWRpdXM7CiAgICAgQ0dDb2xv
clJlZiBjb2xvclJlZiA9IGNvbG9yLmlzVmFsaWQoKSA/IGNhY2hlZENHQ29sb3IoY29sb3IpIDog
bnVsbHB0cjsKQEAgLTE2NCwxMSArMTQ4LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwKICAg
ICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIGlmIChzdHlsZS5tb2RlICE9IERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlOjpTcGVsbGluZyAmJiBzdHlsZS5tb2RlICE9IERvY3VtZW50TWFya2VyTGluZVN0
eWxlOjpNb2RlOjpHcmFtbWFyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q2Fpcm9XaW4uY3BwCmluZGV4IGYxNDQyNTcyY2M2ZDFkNTRiYmVlNThiZGJjMzZlZGY3NzRhYWJi
NjQuLjE0OWIyYTViZGFlZjNjZGI3NWFjYjU2NDk4YWNjNGQ5NjUyODYwZGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWly
b1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENhaXJvV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAj
aW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDI5YTgyYTg5NzgyMjliMGY1ODczYWJkZjgyYmZhZjgw
NmNmMTY1OTguLmUzYzZmN2M2MjRhZTZmOTk1ODI3MzRiMGY4ODljOGZmMDZhMTg2YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcApAQCAtNDcsMTcgKzQ3LDE3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhk
YywgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRl
eHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNB
bHBoYSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElE
MkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBo
YSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgSUQy
RDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29sIGhhc0FscGhh
KQogewogICAgIC8vIENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQuCiAgICAgYXV0byB0YXJnZXRQ
cm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAotICAgIEhS
RVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5k
ZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CisgICAgSFJFU1VMVCBo
ciA9IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVu
ZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRj
LCAmcmVjdCk7CkBAIC02NywxMiArNjcsMTIgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkUKICAg
ICBtX2RhdGEtPm1faGRjID0gaGRjOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIEJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKK0dyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUp
CiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCByZW5kZXJlclR5
cGUpOwogfQogCi1JRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
CitJRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCkK
IHsKICAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBudWxscHRyOwog
ICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7CkBAIC04OSw3ICs4OSw3IEBAIElEMkQxRmFjdG9y
eSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKICAgICByZXR1cm4gZGlyZWN0MkRG
YWN0b3J5OwogfQogCi1JRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0
UmVuZGVyVGFyZ2V0KCkKK0lEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiB7CiAgICAgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0
KiBkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKICAgICBpZiAoIWRlZmF1bHRSZW5kZXJU
YXJnZXQpIHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3ND
b250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gZGVmYXVsdFJlbmRlclRh
cmdldDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBi
b29sIGhhc0FscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0
KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgaWYgKCFoZGMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEzNiwxMiArMTM2LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUlu
aXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4
dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBs
YXRmb3JtQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5p
dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQogewogICAgIHBsYXRm
b3JtSW5pdChwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlIHJlbmRlcmluZ1R5cGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9y
bUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIXBsYXRmb3JtQ29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDE2ICsxNTUsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1D
b250ZXh0LCBCaXQKICAgICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRp
b25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0Nv
bnRleHREaXJlY3QyRCgpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK1Bs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBs
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAg
ICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgpOwogfQogCkBAIC0xOTUsMzMgKzE5
MiwyOCBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmN1cnJlbnRHbG9i
YWxBbHBoYSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWxwaGE7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZSgpOwogICAgIERpcmVjdDJEOjpzYXZlKCpwbGF0Zm9ybUNvbnRleHQo
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogICAg
IERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBDT01QdHI8SUQyRDFCaXRtYXA+JiBp
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd05h
dGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGltYWdlU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKKyAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBpbWFnZVNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRl
eHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVu
ZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChI
REMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQog
ewogICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8fCBp
c0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAg
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgRGlyZWN0MkQ6OnJlc3Rv
cmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2Miwz
NCArMjU0LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgOjpEZWxldGVEQyhoZGMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0Jp
dG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJ
bnRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CisgICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKIH0KIAotR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiAgICAgOiBtX3BsYXRm
b3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJp
bmdUeXBlKQogewogICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAgaWYgKG1fcmVu
ZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZTo6R1BVTWVtb3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIAotR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250
ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmlu
Z1R5cGUpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYg
b3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogICAgIDogbV9vd25lZFBsYXRmb3JtQ29u
dGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkKICAgICAsIG1fcGxhdGZvcm1Db250
ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJlclR5cGUocmVuZGVy
aW5nVHlwZSkKQEAgLTI5Nyw3ICsyOTAsNyBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UAogICAg
IGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIApAQCAtMzEwLDkgKzMwMyw4IEBAIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSgpCiAgICAgICAgIGVuZERyYXcoKTsKIH0KIAotSUQyRDFTb2xpZENvbG9yQnJ1c2gqIEdyYXBo
aWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorSUQyRDFTb2xp
ZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEdsb2Jh
bEFscGhhKGNvbG9yKSkuZ2V0KCk7CiB9CiAKQEAgLTM3Miw3MyArMzY0LDYwIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7CiB9CiAK
LUQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0
IENvbG9yJiBjb2xvcikgY29uc3QKK0QyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewogICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAgIHJl
dHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhh
KCkpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlkU3Ryb2tlQnJ1c2go
KSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkU3Ryb2tl
QnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0
cm9rZUJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlk
RmlsbEJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
b2xpZEZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5t
X3NvbGlkRmlsbEJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6
OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZv
cm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNo
KiBHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCog
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdAogewogICAg
IHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdldCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5EcmF3KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmJlZ2luRHJhdygpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5EcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjplbmREcmF3KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZERy
YXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmVuZERyYXcoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZsdXNoKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKIHsKICAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0dGVybihjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5z
Zm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRl
cm4oKnBsYXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIEludFNpemUoaW1hZ2Uu
c2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0
aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIH0KIAogLy8g
RHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgRGlyZWN0MkQ6OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVy
VGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJv
a2VDb2xvcik7CiB9CkBAIC00OTAsNTIgKzQ2OSwyOSBAQCBEMkQxX1NUUk9LRV9TVFlMRV9QUk9Q
RVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3Ryb2tlU3R5bGVQcm9wZXJ0
aQogICAgIHJldHVybiBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9wbGF0Zm9ybUNvbnRl
eHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250
ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lSm9pbiwgbV9wbGF0Zm9ybUNv
bnRleHQubV9taXRlckxpbWl0LCBEMkQxX0RBU0hfU1RZTEVfU09MSUQsIDAuMGYpOwogfQogCi1J
RDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlU3R5bGUoKSBj
b25zdAorSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0
eWxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJl
dHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5bGUoKTsKIH0KIAogLy8gVGhpcyBpcyBv
bmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJv
a2UpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd0xpbmUoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2lu
dDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5z
dHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2Uo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTog
VGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIApAQCAtNTQzLDExICs0OTksOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1c2Vy
VG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJu
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8g
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9C
YXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIApA
QCAtNTU1LDE3OSArNTA4LDEwNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0
dGVybigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaCA9IGFkb3B0
Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0
dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZHJhd1BhdGgoY29udGV4dCwg
cGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5p
c0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRm
b3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUGF0aChjb250ZXh0LCBwYXRoLCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJE
OjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3Qp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4dCwg
cmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250
ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdChjb250ZXh0
LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVu
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGF1dG8gYnJ1c2ggPSBncmFk
aWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7CisgICAg
aWYgKCFicnVzaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAg
IERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
YnJ1c2guZ2V0KCkpOworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOworCisgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21w
b3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVu
ZE1vZGUpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
Y29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJh
dG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQorewogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29s
b3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0
ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNs
aXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQ
YXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcFBh
dGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIApAQCAtNzM1LDE4ICs2MTMsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBsKTsKLQor
ICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKICAg
ICBzYXZlKCk7CiAKICAgICBtX3N0YXRlLmFscGhhID0gb3BhY2l0eTsKIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKIH0KIApAQCAtNzU0LDExOSArNjI3LDEx
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3Bh
cmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgRGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0KICAg
ICBtX3N0YXRlLmFscGhhID0gbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKTsKIAogICAgIHJl
c3RvcmUoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5
TGF5ZXJzKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6dXBk
YXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKLSAgICAodm9pZClvZmZzZXQ7Ci0g
ICAgKHZvaWQpYmx1cjsKLSAgICAodm9pZCljb2xvcjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3ND
aGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5z
dHJva2VTdHlsZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eworICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBh
c3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAvLyBX
ZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRl
IFkgYXhpcworICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFw
aGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOworICAgICAgICAg
ICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAgICAgICAgICAg
bXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkgfTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgq
cGxhdGZvcm1Db250ZXh0KCksIHN0eWxlKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFNo
b3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
IAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFy
dCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5zdHJva2VD
b2xvciA9PSBjb2xvcik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tl
QnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsgICAgCisgICAgfQorICAgIAor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3IpOworICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0aENvbG9y
KGZpbGxDb2xvcigpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhG
b250c0NoYW5nZSkpIHsKKyAgICAgICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJsZSA/
IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFMSUFT
X01PREVfQUxJQVNFRDsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgp
LT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5nTW9kZSk7CisgICAgfQogCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyZWN0KTsKLSAgICAgICAg
cmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxw
aGFDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKKyAg
ICAgICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCk7CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgeworICAgICAgICBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9O
RUlHSEJPUjsKKworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAg
ICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpM
b3c6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFS
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
Ok1lZGl1bToKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9D
VUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFs
aXR5OjpIaWdoOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RF
X0hJR0hfUVVBTElUWV9DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwg
cXVhbGl0eSk7CisgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIERpcmVjdDJEOjpzZXRNaXRlckxp
bWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QpOworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0
MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBEaXJlY3QyRDo6U3Ryb2tl
U291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNl
dExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBjYXApOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZz
ZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9hdCBsZW5ndGgg
PSAwOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkK
QEAgLTg3NSwzNDEgKzc0MiwxNzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAgICAgICAgICAg
ZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKICAgICB9CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzZXRMaW5l
RGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpz
ZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4pOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKIHsKLSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2NhbGUoKnBsYXRmb3Jt
Q29udGV4dCgpLCBzaXplKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpy
b3RhdGUoZmxvYXQgYW5nbGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJvdGF0ZShh
bmdsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCBhbmds
ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp0cmFuc2xh
dGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNs
YXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgeCwgeSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1L
bm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgRGlyZWN0MkQ6OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7
CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1F
OiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVE
ZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBj
b25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZp
bmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwt
PmdldENUTShpbmNsdWRlU2NhbGUpOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgp
KTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0OwotCi0gICAgaWYgKG1faW1wbCkK
LSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGlu
Z01vZGUpOwotCiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVs
cygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFycmF5
IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVjdC53
aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWln
aHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpk
cmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHRoaWNrbmVzcywgd2lk
dGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4
dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUgZm9yIGRpc3BsYXkgbGlzdHMuCi0gICAg
fQotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBt
b2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAgIEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNU
X05FSUdIQk9SOwotCi0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6RGVmYXVsdDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xB
VElPTl9NT0RFX0NVQklDOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVf
SElHSF9RVUFMSVRZX0NVQklDOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gRklYTUU6
IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVy
Q29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCBpc0xheWVyQ29udGV4dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm47Ci0KICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkg
Y29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXllckNvbnRleHQoKSBj
b25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4KICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNB
Y2NlbGVyYXRlZCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6
aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgICh2b2lkKW1vZGU7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIEFTU0VSVChtX3N0YXRlLnN0
cm9rZUNvbG9yID09IGNvbG9yKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2ggPSBicnVzaFdpdGhDb2xv
cihzdHJva2VDb2xvcigpKTsKKyAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIERpcmVjdDJELgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxv
YXQgdGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIEFTU0VSVChtX3N0YXRlLnN0cm9rZVRo
aWNrbmVzcyA9PSB0aGlja25lc3MpOwotICAgIG1fZGF0YS0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRo
aWNrbmVzcyk7Ci19CisgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmls
bFBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpbGwg
ZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgorICAgICAgICBm
aWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3IpOwotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRG
aWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CisgICAgRGlyZWN0MkQ6OmZp
bGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5maWxsQ29sb3Is
IG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxk
QW50aWFsaWFzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0
cm9rZVBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0
cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisgICAg
ICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcygqcGxhdGZvcm1Db250
ZXh0KCksIGVuYWJsZSk7CisgICAgRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwg
bV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhp
bmcpOworICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7
CisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKKyAgICBWZWN0
b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxEV1JJ
VEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsKIAotICAgIGF1dG8gZm9u
dFNtb290aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJU
WVBFIDogRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7Ci0gICAgcGxhdGZvcm1Db250
ZXh0KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5n
TW9kZSk7Ci19CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7
CisgICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCisg
ICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxw
aGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsg
ZnJvbSk7CisgICAgICAgIGlmICghYWR2YW5jZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOwotICAgIG1fZGF0YS0+c2V0QWxwaGEo
YWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9tKTsKKyAg
ICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKKyAgICAgICAg
Z2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAg
ICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKKyAg
ICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24o
KnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgRGlyZWN0MkQ6OmRy
YXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBn
cmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNz
Q29udGV4dCgpKSwKKyAgICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQs
IGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBn
bHlwaE9mZnNldHMsIHhPZmZzZXQsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9y
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK0dyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwg
RnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKLSAgICAvLyBUaGlzIGlzIGEg
bm8tb3AgZm9yIERpcmVjdDJELgorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAg
cmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW1w
bCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVy
bikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlsbCBlbGxpcHNl
cyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAgIGZpbGxFbGxp
cHNlQXNQYXRoKGVsbGlwc2UpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXIuY29w
eUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBE
aXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRl
LmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9z
dGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIGF1dG8qIGNvbnRleHQgPSAmZ3JhcGhpY3NDb250
ZXh0KCk7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZShjb250ZXh0KSkKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
IW1faW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0
cm9rZVBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHN0
cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAg
ICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpkcmF3
RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUs
IG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICAvLyBG
SVhNRTogTm90IGltcGxlbWVudGVkLgogfQorI2VuZGlmCisKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI3
MGMzYzE3M2M5MWE3NmJlYmQyZThlNmRmMjE1NWYxYTE1NGFjMS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdDJET3Bl
cmF0aW9ucy5oIgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJGb250
LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAgICBbJnBs
YXRmb3JtQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ+KGNv
bnRleHQsIHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRl
eHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6Y3JlYXRlRmFjdG9yeShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAg
ICAgICBbcmVuZGVyVGFyZ2V0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RD4oY29udGV4dCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkK
LSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fcGxhdGZvcm1Db250
ZXh0KHBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkpCi17Ci0gICAgbV9wbGF0
Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwot
ICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi1HcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi0g
ICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1D
b250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KHJlbmRlclRhcmdldCkp
Ci0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAs
IG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9w
bGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQo
bV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6On5H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAmbV9wbGF0
Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjp1cGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJE
OjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxl
KG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0
IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5k
IEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0
YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUu
c2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsg
c2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3Rh
dGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xlYXJTaGFkb3coKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2FwIGxp
bmVDYXApCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxp
bmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgRGly
ZWN0MkQ6OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGluZUpvaW4oTGlu
ZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVKb2luKG1fcGxhdGZvcm1D
b250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgRGlyZWN0MkQ6OnNldE1p
dGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJl
Y3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291
cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgRGlyZWN0MkQ6
OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVudC5jcmVhdGVCcnVzaCht
X3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFicnVzaCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZv
cm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3Np
dGVPcGVyYXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBE
aXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2Rl
OjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9y
ID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21w
b3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJsZW5k
TW9kZSk7Ci0KLSAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwot
ICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVs
c2UKLSAgICAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LnJl
Y3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAgIERpcmVjdDJE
OjpGaWxsU291cmNlIGZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKTsKLSAgICBm
aWxsU291cmNlLmJydXNoID0gbV9wbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29sb3Ip
OwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIGZpbGxTb3VyY2UsIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFBh
dGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBn
cmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7
Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJl
Y3QyRDo6c3Ryb2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBEaXJl
Y3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChtX3BsYXRm
b3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3ND
b250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAg
c3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsZWFy
UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7Ci0gICAgaWYgKCFmb250LnBsYXRmb3Jt
RGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB4T2Zmc2V0ID0gcG9p
bnQueCgpOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBocyk7Ci0g
ICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKLSAgICBWZWN0
b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgaWYgKGkg
KyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9t
KTsKLSAgICAgICAgaWYgKCFhZHZhbmNlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChpICsgZnJvbSk7Ci0gICAgICAgIGhv
cml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBoT2Zm
c2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhP
ZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Ci0gICAgfQotCi0g
ICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQo
KTsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBE
aXJlY3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6OkZpbGxTb3Vy
Y2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0
ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAotICAgICAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpLCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9udGFs
QWR2YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdp
bmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUu
c2hhZG93Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VT
aXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd1BhdHRlcm4oKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS5wbGF0Zm9ybUltYWdl
KCkpCi0gICAgICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybihtX3BsYXRmb3JtQ29udGV4dCwgV1RG
TW92ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlv
bnMuYmxlbmRNb2RlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpkcmF3UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBz
dGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdMaW5l
KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlh
bGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwgdGhpY2tuZXNz
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxF
bGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRo
JikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpzYXZlKCkKLXsKLSAgICBEaXJlY3QyRDo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyZXN0b3JlKCkKLXsKLSAgICBE
aXJlY3QyRDo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBE
aXJlY3QyRDo6dHJhbnNsYXRlKG1fcGxhdGZvcm1Db250ZXh0LCB4LCB5KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykK
LXsKLSAgICBEaXJlY3QyRDo6cm90YXRlKG1fcGxhdGZvcm1Db250ZXh0LCBhbmdsZUluUmFkaWFu
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCi17Ci0gICAgRGlyZWN0MkQ6OnNjYWxlKG1fcGxhdGZvcm1Db250ZXh0
LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6Y29u
Y2F0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQotewotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0
cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCi17Ci0gICAg
cmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllciht
X3BsYXRmb3JtQ29udGV4dCwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgRGlyZWN0MkQ6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIERp
cmVjdDJEOjpjbGlwKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcFBhdGgobV9wbGF0
Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNsaXBCb3VuZHMoKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3Rh
dGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFpbWFn
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRl
eHQoKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKGNvbnRleHQpKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkK
LXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRp
bmdNb2RlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhl
bHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsK
LSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1l
bnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBV
U0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjA0NTA1MzE3MDNmYjkwZWVhN2I0MmYyNDc0ZjU5MzZi
ZDNiYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoRElS
RUNUMkQpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLWNsYXNzIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBs
IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShJRDJEMVJlbmRlclRhcmdldCop
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYsIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
KEdyYXBoaWNzQ29udGV4dCYsIElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0gICAgdmlydHVhbCB+R3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCk7Ci0KLSAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4
dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2
b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBh
dGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyJiwg
dW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUp
IG92ZXJyaWRlOwotCi0gICAgYm9vbCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICBib29sIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybigoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBj
b25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJv
dGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmlj
ZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxl
KSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBv
dmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXll
ciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSAgICAKLSAgICB2
b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgRmxvYXRS
ZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0
OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAppbmRleCBhOGVlMzVjNTI3NzgxMjczZjQ3
ZmI1ZDJmNGJjZGY4OGM0NGUwOGM0Li5hZDk1NTRjMDUwYWVlMmUxMGVjMTUzNTllYjhiNDg1ZDM1
MGNkYTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTc4LDcg
Kzc4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIXBsYXRmb3JtQ29udGV4
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRl
eHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIGF1dG8gY29u
dGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+KHBsYXRmb3JtQ29udGV4
dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5j
cHAKaW5kZXggZjhhMTBkNWM0MzZlNzA2MDg5ODcwN2JhOGI2NTQ2NDFjZTJiZGY1NC4uNTMzOGZm
Y2M3YjU2NWY0ODdkOWU3Y2ZiOGYyNjRmN2VhMTI5NjllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcApAQCAtNzMsNyArNzMs
NyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25z
dCBJbnRTaXplKiBzaXplKQogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUoYm1wSW5mby5ibUJpdHMsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhl
aWdodCwKICAgICAgICAgOCwgYm1wSW5mby5ibVdpZHRoQnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRGaXJzdCkpOwogICAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoY2dDb250ZXh0LmdldCgpKTsK
KyAgICBHcmFwaGljc0NvbnRleHRDRyBnYyhjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgRmxvYXRT
aXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CiAgICAgaWYgKHNpemUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dp
bi5jcHAKaW5kZXggMmNlYzk5ZGM3MjlmZTY1ZTA4NTRlZWU3MmRmYzRlZDdhZjA5NTIzYy4uYzll
YjAwYzQ4MjQxZjViY2JmNWM1ZTJkODNiOTQ3Y2I3Yzk0OTc0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcApAQCAt
MjYsNyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0
ckNhaXJvLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpA
QCAtNzUsNyArNzUsNyBAQCBib29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRN
QVAgYm1wLCBjb25zdCBJbnRTaXplKiBzaXplKQogICAgIGNhaXJvX3QqIHRhcmdldFJlZiA9IGNh
aXJvX2NyZWF0ZShpbWFnZSk7CiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZh
Y3RvcnkodGFyZ2V0UmVmKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ2ModGFyZ2V0UmVm
KTsKIAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAg
IGlmIChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdGhEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGF0aERpcmVjdDJELmNwcAppbmRleCBkOTYyMDMwMGFiY2ViYTQ5NGNhNjYxNTFkMDAxZTUy
ZjFjNzg5NDRiLi45MTI5YTE3Yjc3OGEyNDgwY2RmM2MwZWJmYTJkNmU3MjcxYTYwNzkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJE
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVj
dDJELmNwcApAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hD
b250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNj
cmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgc3Ryb2tlU3R5bGVB
cHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0zNDIsNyAr
MzQyLDcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dCgpOwogCiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2Ny
YXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQo
JnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlOjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hD
b250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIAogICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIp
CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQppbmRleCA3MzU5MzNmMTcyMDg1Yjll
NjY5M2FkNDRiMmFmMTYwYjM0MGM0Zjk5Li4zNjE2MDJlNTdiMjRmYjE2Y2JlMmE3YTk5ZjZlNWM4
MGEzMzlmYWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0lt
YWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1Mu
bW0KQEAgLTk0LDcgKzk0LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFn
ZShJbWFnZSogaW1hZ2UsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24KIAogICAgIFJldGFp
blB0cjxVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlcj4gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxv
Y1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VTaXpl
XSk7CiAgICAgVUlJbWFnZSAqaW1hZ2VDb3B5ID0gW3JlbmRlci5nZXQoKSBpbWFnZVdpdGhBY3Rp
b25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4
dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNH
Q29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlU2l6ZS5oZWlnaHQp
OwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgYWRqdXN0ZWRJbWFnZVNjYWxlLCAtYWRqdXN0ZWRJ
bWFnZVNjYWxlIH0pOwogICAgICAgICBjb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9p
bnQoKSwgeyBvcmllbnRhdGlvbiB9KTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZwogCiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdy
YXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXpl
XSk7CiAgICAgYXV0byBpbWFnZSA9IFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFw
aGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsK
ICAgICAgICAgY29udGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBjb250ZXh0LmZpbGxS
b3VuZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGltYWdlUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6
UmFkaWkoNCkpLCBDb2xvcjo6d2hpdGUpOwpAQCAtMjA0LDcgKzIwNCw3IEBAIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9y
RGF0YSYgaW5kaWNhCiAKICAgICBhdXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJ
R3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNp
emUoKV0pOwogICAgIHJldHVybiBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhp
Y3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBH
cmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAg
ICAgICAvLyBGSVhNRTogVGhlIGNvbnRleHQgZmxpcCBoZXJlIHNob3VsZCBub3QgYmUgbmVjZXNz
YXJ5LCBhbmQgc3VnZ2VzdHMgdGhhdCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgcmVndWxhcgogICAg
ICAgICAvLyBkcmFnIGluaXRpYXRpb24gZmxvdywgd2UgdW5uZWNlc3NhcmlseSBmbGlwIHRoZSBn
cmFwaGljcyBjb250ZXh0LgogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVJlY3Qu
aGVpZ2h0KCkpOwpAQCAtMjM4LDcgKzIzOCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vCiAg
ICAgYXV0byYgaW1hZ2UgPSAqdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCk7CiAgICAgYXV0
byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0
YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZS5zaXplKCldKTsKICAgICBVSUltYWdlICpmaW5hbElt
YWdlID0gW3JlbmRlci5nZXQoKSBpbWFnZVdpdGhBY3Rpb25zOlsmaW1hZ2VdKFVJR3JhcGhpY3NJ
bWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFw
aGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAg
ICBjb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgRmxvYXRQb2ludCgpKTsKICAgICB9XTsKIApAQCAt
MjUyLDcgKzI1Miw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25z
dCBDb2xvciYgY29sb3IsIGNvbnN0IEZsb2F0UmVjdCYgZWxlbWVuCiAKICAgICBhdXRvIHJlbmRl
ciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkg
aW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplKCldKTsKICAgICBVSUltYWdlICppbWFnZSA9IFty
ZW5kZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAq
cmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgcmVu
ZGVyZXJDb250ZXh0LkNHQ29udGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250
ZXh0IHsgcmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCB9OwogICAgICAgICBjb250ZXh0LnRyYW5z
bGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2Nh
bGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3Qoc3dhdGNoLCBj
b2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
b2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRl
cmVyQ29jb2EuY3BwCmluZGV4IDA5ZmFlZWVlOWVhY2I1MDMyZjFhNzlkNzNiYTAxOGE5YjY1NWJk
MmIuLjVlYzM4ZTY0MWJkNmVkMDNhZDA1MjU2MWQwNGM5Y2RhZmRmYjQxMmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCiAjaW5j
bHVkZSAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQXVk
aW9Nb2R1bGUuaCIKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RHJhZ0ltYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VX
aW4uY3BwCmluZGV4IGQwMjJlN2UxOTFkYWM4MTYzNmQ1Mjk1MWQ0MGQ1M2I4ODczZjU1MDkuLjQ0
NTAxYWIxMzliOGVlZWU5MTRjZTZkODY3NDE3YjJlOWVjOTI0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGluTGFiZWwsIFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6
U2VsZWN0T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KGNvbnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQoY29udGV4dFJlZik7CiAgICAgLy8gT24gTWFjIGFscGhhIGlzIHswLjcsIDAuNywgMC43LCAw
Ljh9LCBob3dldmVyIHdlIGNhbid0IGNvbnRyb2wgYWxwaGEKICAgICAvLyBmb3IgZHJhZyBpbWFn
ZXMgb24gd2luLCBzbyB3ZSB1c2UgMQogICAgIGNvbnN0ZXhwciBhdXRvIGJhY2tncm91bmRDb2xv
ciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMTQwLCAxNDAsIDE0MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2
YjNjZmEyZmI2YzA5YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjRjMGY5Yzk0ZDYzY2ZmMmRkZjE5ZTRh
N2FhY2I0YWU1MWJjODY0ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
b250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBDb250ZW50
ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBm
cmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6
RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJl
Q29udGVudHModHJ1ZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3Jh
cGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRm
dWxQYWludCk7CisgICAgR3JhcGhpY3NDb250ZXh0TnVsbCBjaGVja2VyQ29udGV4dChHcmFwaGlj
c0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRm
dWxQYWludCk7CiAgICAgZnJhbWVWaWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcu
cmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRz
RW50aXJlQ29udGVudHMob2xkRW50aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMz
ODJjMzY4YjA5NDhkNjVhZTZmYjBiN2MwYi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzVi
Y2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCkBAIC02OTAsMTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94
U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRl
clN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRT
aXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlm
ICghYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAg
Y29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygp
LCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsK
KyAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCks
IHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJv
eFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6
IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBM
YXlvdXRTaXplJiBzaXplKQpAQCAtMjQzOSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5
b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9h
dFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2Nh
bGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmlj
ZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNl
dCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9j
YXRpb24oKTsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBw
ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01v
ZGU6OkRlZmF1bHQpOwogCiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRv
IGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsy
NTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3Qg
UGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJh
bnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9m
ZnNldDsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAg
ICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cywgc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
cik7Ci0KKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAg
ICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVj
dCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4
IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2N2NjNjZlZTVhMjVjNzRkZmUuLjM2ODJmYTNhZGNkN2E4
ZWM4MzdlNjY2ZGJmMjQxZjNhYmQ2NjZlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0xNzg5LDcgKzE3ODksNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRv
IHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NM
YXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQobnVsbHB0cik7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dE51bGwgbnVsbENvbnRleHQoR3JhcGhpY3NDb250ZXh0TnVs
bDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24g
ZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJl
bmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5
Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYxNTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2
ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVy
YXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcg
KzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1h
cENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1
cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lk
IFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMx
NTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQwNmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5
OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxl
Qml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1h
cENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsK
ICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkp
OworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0
LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hh
cmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJl
YWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAwOGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1
NGJiYjU4OGQ3ZWYzLi4xNWIyMzc3YzVhOGNhOGRjMjZkZjFiOWE2NmQ1ZGRiOWU1OWUxN2ZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJl
Y3QyRC5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCiAgICAgaWYgKCFz
dXJmYWNlQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3Jl
YXRlRmFjdG9yeShzdXJmYWNlQ29udGV4dC5nZXQoKSkpOworICAgIHJldHVybiBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNy
ZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVC
aXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRz
dFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IGRjMGE3MGI4ODI0YWZk
YzdlYzNkZDFmNjlmNGQ5YjUxOTQyOTI0ZjYuLjRmNzhiNWViNWNkYjUxZjJlYmZjYWZmNjRlY2Qx
OWIxZTYzMGFkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0Jh
Y2tpbmdTdG9yZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9C
YWNraW5nU3RvcmVDYWlyby5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxjYWlyby5oPgpA
QCAtODQsNyArODQsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hh
cmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mCiAgICAgLy8gUGFpbnQgYWxs
IHVwZGF0ZSByZWN0cy4KICAgICBJbnRQb2ludCB1cGRhdGVSZWN0TG9jYXRpb24gPSB1cGRhdGVJ
bmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKICAgICBSZWZQdHI8Y2Fpcm9fdD4gY2Fp
cm9Db250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fYmFja2VuZC0+c3VyZmFjZSgpKSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KGNhaXJvQ29udGV4dC5nZXQoKSk7CiAKICAgICAv
LyBXaGVuIG1fd2ViUGFnZVByb3h5LmRyYXdzQmFja2dyb3VuZCgpIGlzIGZhbHNlLCBiaXRtYXAg
Y29udGFpbnMgdHJhbnNwYXJlbnQgcGFydHMgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSB3ZWJwYWdl
LgogICAgIC8vIEZvciBzdWNoIGNhc2UsIGJpdG1hcCBtdXN0IGJlIGRyYXduIHVzaW5nIENvbXBv
c2l0ZU9wZXJhdG9yOjpDb3B5IHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgc3VyZmFjZS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRleCBmMThi
YThmMDFiMjZkZTNmZDNjZGZiMDI4MTI4NWNmMGQ0YTY2NjlmLi5kMDNlNjQzNGIxYWIyZmJkNWU1
NTQzMjk2OGIzZTlmNTY1OTJiYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0zMCwxNSArMzAsMTYgQEAKIAogI2ltcG9ydCAiQVBJRGF0
YS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNp
bXBvcnQgIlByaW50SW5mby5oIgogI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW1wb3J0
ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFF1YXJ0ei9RdWFydHouaD4KLSNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaD4K
ICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisK
IE5TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxUb3BQcmludGluZ01hcmdpbktleSA9IEAi
V2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iOwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRPcmlnaW5h
bEJvdHRvbVByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbEJvdHRvbU1hcmdpbiI7
CiAKQEAgLTU1NSw3ICs1NTYsNyBAQCAtICh2b2lkKV9kcmF3UHJldmlldzooTlNSZWN0KW5zUmVj
dAogCiAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBwYWdlUHJl
dmlld0l0ZXJhdG9yLT52YWx1ZTsKIAotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOworICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCiAgICAgYml0bWFwLT5wYWludChjb250
ZXh0LCBfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgV2ViQ29yZTo6SW50
UG9pbnQobnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+Ym91bmRzKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggMDRhNDBkZjAy
ZTQ3NDQ4ZjViOThjODlkZjQ4NWI3MDZmMGJlMDM3Yy4uZTQ3YTQ0Y2M0N2U5OTFkZWU5OGY5YjRh
MzZjNWEyY2RmNmYwZDA2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC0zNSw3ICszNSw2IEBACiAjaW1wb3J0ICJMb2dnaW5n
LmgiCiAjaW1wb3J0ICJQREZBbm5vdGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCIKICNpbXBvcnQg
IlBERkNvbnRleHRNZW51LmgiCi0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAi
UERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9uLmgi
CiAjaW1wb3J0ICJQREZQbHVnaW5QYXNzd29yZEZpZWxkLmgiCkBAIC03Miw3ICs3MSw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSFRNTEJvZHlFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVt
ZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgpAQCAtMTA2LDYgKzEw
NSw4IEBACiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogI2lmIEhB
VkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiBAaW50ZXJmYWNlIFBERkRvY3VtZW50ICgpCiAtKGlu
c3RhbmNldHlwZSlpbml0V2l0aFByb3ZpZGVyOihDR0RhdGFQcm92aWRlclJlZilkYXRhUHJvdmlk
ZXI7CkBAIC0xOTQ0LDcgKzE5NDUsNyBAQCB2b2lkIFBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9y
TGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZQogICAgIExv
Y2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJhbmNlKHBhZ2UtPnVzZURhcmtB
cHBlYXJhbmNlKCkpOwogI2VuZGlmCiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3ND
b250ZXh0KTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tCmluZGV4IDE2MjUzYzg4NzA3MzA3NzgwMDBkODUzZDRkZGZkMzIyNzlkODE4
OWUuLmY3YmRiOTU3MDRkYzQ1NjAyMzU5MjYzODFkZjYwNGYwMjgwZDAxMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50Lmg+CkBAIC0zMTcsNyArMzE4
LDcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gV2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUoSW50
UmVjdCByZWN0LCBJbnRTaXplIGJpdG1hcFNpemUKIAogICAgICAgICBDR1BERkNvbnRleHRCZWdp
blBhZ2UocGRmQ29udGV4dC5nZXQoKSwgZGljdGlvbmFyeSk7CiAKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0IHsgcGRmQ29udGV4dC5nZXQoKSB9OwogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnRyYW5zbGF0ZSgwLCAtYml0bWFwU2l6ZS5oZWlnaHQoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYzNjYjhiNzg0NTY4MGQx
NmRmMWE2NzE4ZTY2ZjQ3OGU5ZTk4OGI1Ni4uOWIxMjFjYTllM2Q0MjRiMDUzZGNjYjlmYWVmZTJj
Njc5YjQ3OTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1
bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJlYWxseSBwcm9i
YWJseSB3ZSBzaG91bGQgbW92ZSB0aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5nIGNvZGUgb3V0
IG9mIFdlYlBhZ2UuY3BwLgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4K
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzODgsNyArNTM5Myw3IEBAIHZvaWQgV2ViUGFnZTo6
ZHJhd1BhZ2VzVG9QREZJbXBsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBQcmludElu
Zm8mIHByaW50CiAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFn
ZUluZm8gPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OwogICAgICAgICAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0LmdldCgpLCBw
YWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNv
bnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjb250
ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VS
ZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bv
b2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3
MzljNGFlYWI5YmIzM2E4NS4uMzk5YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUwYWM5OGY1ODE1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaD4KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5k
ZXJQYWdlKGludCBwYWdlTnVtYmVyKQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3KCk7CiAKICAg
ICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lkdGgobV9wYWdl
U2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KG1fY2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250ZXh0LmdldCgp
KTsKICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4dCwgcGFnZU51
bWJlciwgcGFnZVdpZHRoIC8gbV9zY2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3JlKG1fY2Fpcm9D
b250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNv
cmVTdGF0aXN0aWNzLm1tCmluZGV4IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1
ZmJlZjYuLjkyOGFlN2Q1MWUzZjBiN2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAt
MzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HQ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQu
aD4KQEAgLTMwNSw3ICszMDUsNyBAQCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4
dFJlZiljZ0NvbnRleHQgcGFnZVdpZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0KGNnQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNnQ29udGV4dCk7CiAgICAgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5k
YXJpZXMoKmNvcmVGcmFtZSwgZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5Q
aXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAyYmEwMDZkZDNl
N2IyYWZjNTBlZmYyODQ1MzIwZDk2NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1
MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNj
L1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCA8
V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRyYXMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KQEAgLTc4LDcgKzc4LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1Bv
aW50KXBvaW50IGZvbnQ6KE5TRm9udCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICoKIAogICAg
ICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XTsKICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRl
eHQgQ0dDb250ZXh0XTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7
IGNnQ29udGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQg
eyBjZ0NvbnRleHQgfTsKIAogICAgICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEgZmxpcHBlZCBn
cmFwaGljcyBjb250ZXh0LgogICAgICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxp
cHBlZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3Iv
V2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5ZWNmMWRiZGVm
NDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4uOTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2MyYjMzZjEzMTAw
MjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dl
Yk5vZGVIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYklu
c3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9y
dCAiV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIK
IAotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgsNyBAQCAtICh2
b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogCiAgICAgICAgIEFTU0VSVChbW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRl
eHRdKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICAgICAgW193ZWJOb2RlSGlnaGxp
Z2h0IGluc3BlY3RvckNvbnRyb2xsZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogICAgICAg
ICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYzNWQ3YmQ1YTIz
NTFiMmIwMWI2OGJiMWUyMTZmNzQ1N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5NjIwZjUxYmVl
Njk2YjIxMjM5YWIxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQpAQCAtODEsNyArODEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclN0
YXRlTWFjaGluZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2MTMsNyBAQCAt
ICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRlbnRz
T25seQogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50R3JhcGhpY3ND
b250ZXh0KCk7CiAjZW5kaWYKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29udGV4dChj
dHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4KTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShz
ZWxmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA1MTVhZDJiNWIzOGMxNjhhMWJkNzhlOWU5M2FjMDM2MjU2ODZlMzJiLi5kYmZiZWQ3YTliYTNk
MDRkNDQ0ZjM3YzA4MmUxMTVmOTJjN2QzM2MwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjQgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBH
cmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHND
Ry5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0wNS0yMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ2hlY2tlZExvY2sg
dGhlIGRlZmF1bHQgTG9jawpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAppbmRleCA4N2EzNmFjZmU2YTEw
MGNjMzIzZTI0ODk3ZmNlMzgwM2YyMzRhNzc4Li5hNTk4ZDU0YTI3NTI5NThjNDJlNGUyYjc5ZTUz
MzdjNTdiMTc0YjQ2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3RSZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDksNyArNTAsNyBAQCBURVNU
KERpc3BsYXlMaXN0VGVzdHMsIFJlcGxheVdpdGhNaXNzaW5nUmVzb3VyY2UpCiAKICAgICBhdXRv
IGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKICAgICBhdXRvIGNn
Q29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRleHRX
aWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5wbGF0
Zm9ybUNvbG9yU3BhY2UoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRvIGltYWdl
QnVmZmVySWRlbnRpZmllciA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjo6Z2VuZXJhdGUo
KTsKIApAQCAtMTEzLDcgKzExNCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgT3V0T2ZMaW5l
SXRlbURlY29kaW5nRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAgICBhdXRvIGNn
Q29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRleHRX
aWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5nZXQo
KSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250
ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBEaXNwbGF5TGlzdCBvcmlnaW5hbExpc3Q7
CiAgICAgV3JpdGluZ0NsaWVudCB3cml0ZXI7CkBAIC0xNDQsNyArMTQ1LDcgQEAgVEVTVChEaXNw
bGF5TGlzdFRlc3RzLCBJbmxpbmVJdGVtVmFsaWRhdGlvbkZhaWx1cmUpCiAKICAgICBhdXRvIGNv
bG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3Bh
Y2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0
V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkp
OwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAg
R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0
byBydW5UZXN0V2l0aEludmFsaWRJZGVudGlmaWVyID0gWyZdKEZsdXNoSWRlbnRpZmllciBpZGVu
dGlmaWVyKSB7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpZGVudGlmaWVyLmlzVmFsaWQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429560</attachid>
            <date>2021-05-24 13:53:39 -0700</date>
            <delta_ts>2021-05-24 15:06:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524135338.patch</filename>
            <type>text/plain</type>
            <size>366970</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhkOGFlNWMwY2NmYmU3
NmM4NGI4ZWY4OGRmODFlMmQ0YWVhZTIyOS4uNzVkMDQzYjVhNTg4NjI2NzkzN2VlY2UzZDA1M2Mz
OTk2YjUyODlmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1h
a2UgQ2hlY2tlZExvY2sgdGhlIGRlZmF1bHQgTG9jawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0OTBmZjE2NWUxOTcx
NDA1NTUxOGJhMzJjNWMyNGYyN2VkZGVmYTAyLi5mZTQ0MzMzODA4Mzg2MmQ3MDc3MGQzNzkyMmFk
MjFkNjg5NGY1MTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKiBTaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogU2hhcmVk
L3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
Y2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3Rv
cmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZHJhd1ByZXZpZXc6XSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHA6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6
OlBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQpOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3Bw
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUHJpbnRPcGVyYXRpb25HdGs6OnJlbmRlclBhZ2UpOgorCiAyMDIxLTA1LTIzICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBDaGVja2VkTG9jayB0aGUg
ZGVmYXVsdCBMb2NrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNmY2YmI3MzM4MmNk
MmU1N2M3ZDk0ZTdkMTE4MGRhMzFlOTQ3YjkyOC4uY2Y4ZDBlMjNjMGMyYTU4YTZlNWZiMGNhZmFi
Yjc0YjZmYzJiNzgwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5
IEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06
CisgICAgICAgICgtW1dlYkZyYW1lIHByaW50VG9DR0NvbnRleHQ6cGFnZVdpZHRoOnBhZ2VIZWln
aHQ6XSk6CisgICAgICAgICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbToKKyAgICAgICAg
KC1bTlNTdHJpbmcgX3dlYl9kcmF3QXRQb2ludDpmb250OnRleHRDb2xvcjpdKToKKyAgICAgICAg
KiBXZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW06CisgICAgICAgICgtW1dlYk5v
ZGVIaWdobGlnaHRWaWV3IGRyYXdSZWN0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUu
bW06CisgICAgICAgICgtW1dlYkZyYW1lIF9kcmF3UmVjdDpjb250ZW50c09ubHk6XSk6CisKIDIw
MjEtMDUtMjMgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZl
cnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFzcyB3cmFwcGluZyBh
IHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENHIHBvcnRzLCBldGMu
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKaW5kZXggZWY4NTZiY2E5MTRiYTg0ZjJiNDY2YTRkNzg5NmY1NzIw
OWNiZjM5Yy4uNzQ2ZDg4ZjE5ZDM0NGUyNGQ0OTY0Y2YyNDIwYzM3ZWZhMWYzOTFjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCkBAIC0xMjM5LDcgKzEyMzksNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyRmFjdG9yeS5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMu
LjcxMTQ3YTRlMmNkMTVlZTAxYmYxYzAyMWVlY2I2NDU2YmRlYzgwMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxh
eS5jcHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03
MSw3ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25X
aW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcApAQCAtMTg5LDcgKzE4Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0
aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKaW5kZXggNjY5ZDkzNWQ4MWU3MDRjMTczYzEwZjllODU2MzZjNDBmZWI3YzhhOS4uNGNh
YTYyNWM5NGQ3NmMzOThiZDBlNjA0MDg3NTAwOTBiNjdiMzA5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAg
LTE5ODMsNyArMTk4Myw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHRHTC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdM
SW1hZ2VFeHRyYWN0b3IuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBs
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzTGF5ZXJUcmFuc2Zvcm0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVXBkYXRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBhNmRkMDNjOGZiMmQ2ZDZjZWRiZjI4ZGE4NGMzZjg3NTBi
OGQ1OWYzLi41OWQ1MTVlOTQ0MTZiNzAzNDE3ZjdlOWEzYzE1MDRmMzlmZWY2MjAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04
NjEsNyArODYxLDYgQEAKIAkJMkQ5QkY3NDYxREJGREM0NzAwN0E3RDk5IC8qIE1lZGlhS2V5cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcz
MzFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlzLmNwcCAqLzsgfTsKIAkJMkQ5QkY3NDcxREJG
REM0OTAwN0E3RDk5IC8qIE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJGNzJGMURCRkRDMEYwMDdBN0Q5OSAv
KiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgKi87IH07CiAJCTJEOUYwRTEzMTRGRjFDQkYwMEJB
MEZGNyAvKiBsaW5lYXJTUkdCLmljYyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkQ5RjBFMTIxNEZGMUNCRjAwQkEwRkY3IC8qIGxpbmVhclNSR0IuaWNj
ICovOyB9OwotCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMDEy
M0YxRkFEODdENjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFFQTdFMEYxMDAz
ODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50
UHJvcGVydHlNYXAuaCAqLzsgfTsKIAkJMkRDOEQzOTgyNUYyRkU5NzAwQ0ZDQkFCIC8qIE1vZGVs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREM4RDM5
NzI1RjJGRTk0MDBDRkNCQUIgLyogTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyREQ1QTcyNzFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDJERDVBNzI2MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDg4
LDggKzYwODcsNiBAQAogCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEVEMUJD
NUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlYXJjaFBvcHVwTWVudUNvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRTcwNThGMzFCQzVDQ0Q3MDA0NUE1MDcgLyogU2VhcmNo
UG9wdXBNZW51Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoUG9wdXBNZW51Q29jb2EuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8q
IEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFE
NzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGlj
c0NvbnRleHRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwM0MwNzMx
ODg0Njk1RTAwQTVGOENBIC8qIFN5c3RlbU1lbW9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTeXN0ZW1NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjA5OUQwNzE3
Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwMTAsOCArMjcwMDcsNiBAQAogCQkJCTdD
MzMwQTAxMURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAq
LywKIAkJCQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFn
ZUV4dHJhY3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBo
aWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKLQkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1
MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgKi8sCi0JCQkJMEYwMDEyM0YxRkFEODdE
NjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2
OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMzIyOTAsNyArMzIyODUsNiBA
QAogCQkJCTFDRThEMTI3MjYxODVDMEUwMEZDM0FFRiAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQzNzdENTcyNTUxQzlD
NjAwODBBQkZFIC8qIERpc3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJD
M0U2MjQzMjY1OTc5MTgwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFDRThEMTJFMjYxODYxQzQwMEZDM0FFRiAvKiBEaXNwbGF5TGlzdEl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdB
MkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzI2OTUsNyAr
MzI2ODksNiBAQAogCQkJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRl
eHRHTElPU3VyZmFjZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RkMxMDQy
RDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMTlBNzI4ODIzQzI2N0ZFMDA4NTM1M0MgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xN
YW5hZ2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyog
R3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURF
QjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5
ZXJDQS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDUyOCw2ICszNDUyMSw3IEBACiAJCQkJNDk5QjNF
QzUxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDkzRTVFMDkxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBsYXRmb3JtQ0FM
YXllckNvY29hLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzNFNjI0MzI2NTk3OTE4MDA1NDhBQ0Qg
LyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ5Nzg3MTFBQkFG
M0E1MDBDRUY3RTQgLyogUGxhdGZvcm1Db250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzVDNzYyQjE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5
SU9TLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkv
Y3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNw
bGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDAwOTc5ZDAwOWI4
NTU2M2U1MjdmODI4MWZlNzJhOWQxNzk5MzBhZTMuLmQ0NjhmYmMwZjc2YWIwYjJkYjIyMmFkNjBh
Y2NkZTRjNjY1ZGYyMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxh
eS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMTI5OCwxMCArMTI5OCw3
IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29u
dGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdp
biA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBh
dXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmls
bFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJv
eFNoYWRvdygpKQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5
U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0
U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigp
KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hh
ZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAg
IC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91
dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQxMiwxMSArMTQwOSw3IEBAIHZv
aWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYg
cGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnRy
YW5zbGF0ZShleHRyYU9mZnNldCk7CiAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNl
dDsKIAotICAgICAgICBpZiAoc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFk
aXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0KKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgZmlsbENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDRmNDZm
NjU5MDk1OWExZTRjZGRjZGNjMzc1MjgwNTE2ZDQyY2ExZDEuLmU3YzAyODVmNzU1NDU0ODAzYjE0
MGM5MjBiZDRiMmFmZGZlNjFmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yNTIsNyAr
MjUyLDcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc0FjY2VsZXJhdGVk
KCkgY29uc3QKIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAg
IGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlKCkuZXhpc3RpbmdEcmF3aW5nQ29udGV4dCgpOwot
ICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCk7Cisg
ICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAg
LTExMjAsNyArMTEyMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xp
cEludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgsIENhbnZhc0ZpbGxSdWxlCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHJlYWxpemVTYXZlcygpOwotICAgIGMtPmNhbnZhc0NsaXAocGF0aCwgdG9XaW5k
UnVsZSh3aW5kaW5nUnVsZSkpOworICAgIGMtPmNsaXBQYXRoKHBhdGgsIHRvV2luZFJ1bGUod2lu
ZGluZ1J1bGUpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpiZWdp
bkNvbXBvc2l0ZUxheWVyKCkKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRo
LCBmbG9hCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgY29udGV4dC0+
c2F2ZSgpOwogICAgICAgICBzYXZlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQtPnNldExlZ2Fj
eVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAg
ICBjb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogICAgIH0KICAgICBpZiAoc3RhdGUoKS5n
bG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEzNzksOSArMTM3
OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlTaGFkb3coKQog
ICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gc3Rh
dGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUo
KS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9h
dFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93
Q29sb3IpOworICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwg
c3RhdGUoKS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kpOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRT
aXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgYy0+c2V0U2hhZG93
KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9k
ZTo6TGVnYWN5KTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaG91
bGREcmF3U2hhZG93cygpIGNvbnN0CkBAIC0yMDMwLDcgKzIwMzAsNyBAQCBFeGNlcHRpb25PcjxS
ZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFz
UGF0dGVybjo6Y3JlYXRlKG5hdGl2ZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHJlcGVhdFgsIHJl
cGVhdFksIG9yaWdpbkNsZWFuKSB9OwogI2VuZGlmCiAKLSAgICBhdXRvIHJlbmRlcmluZ01vZGUg
PSAhZHJhd2luZ0NvbnRleHQoKSB8fCBkcmF3aW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IGRyYXdpbmdDb250ZXh0KCkgPyBk
cmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSB2aWRlb0VsZW1lbnQuY3JlYXRlQnVmZmVy
Rm9yUGFpbnRpbmcoc2l6ZSh2aWRlb0VsZW1lbnQpLCByZW5kZXJpbmdNb2RlLCBjb2xvclNwYWNl
KCksIHBpeGVsRm9ybWF0KCkpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwpAQCAtMjQ3Myw3ICsyNDczLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBmbG8K
IAogICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+
c2V0TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7
CisgICAgICAgICAgICBjLT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogCiAgICAgICAgICAgICBpZiAo
ZmlsbCkKICAgICAgICAgICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA2NTgzYzM2OWZkYTFjMDZkOTQzNzVjY2RjMjNm
YzhiNzIyMzBiZjVhLi4zMTcyZTdmNzlmNjBhMTQ4M2FmMDhmZjhmMjYzNmJmNzI5YTRjYzMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00MTg3LDEyICs0MTg3LDEyIEBAIHZvaWQg
RnJhbWVWaWV3Ojp1cGRhdGVDb250cm9sVGludHMoKQogICAgICAgICBwYWdlLT5zZXRJc0NvdW50
aW5nUmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzKGlzQ3VycmVudGx5Q291bnRpbmdSZWxldmFudFJl
cGFpbnRlZE9iamVjdCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52
YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHBhaW50
SW52YWxpZGF0aW9uUmVhc29ucykKK3ZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52
YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBw
YWludEludmFsaWRhdGlvblJlYXNvbnMpCiB7CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAg
ICAgIGxheW91dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgR3JhcGhpY3NDb250ZXh0TnVsbCBj
b250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0
KCkpIHsKICAgICAgICAgLy8gRklYTUU6IGNvbnN1bHQgcGFpbnRzRW50aXJlQ29udGVudHMoKS4K
ICAgICAgICAgcGFpbnRDb250ZW50cyhjb250ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwpAQCAtNDc0Miw3ICs0NzQyLDcgQEAgdm9pZCBGcmFt
ZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKGZsb2F0ICpuZXdCb3R0b20sIGZsb2F0
IG9sZFRvcCwgZmxvYXQKIAogICAgIH0KICAgICAvLyBVc2UgYSBjb250ZXh0IHdpdGggcGFpbnRp
bmcgZGlzYWJsZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0
OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIEdyYXBoaWNzQ29udGV4dE51
bGwgY29udGV4dChHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6
Ok5vbmUpOwogICAgIHJlbmRlclZpZXctPnNldFRydW5jYXRlZEF0KHN0YXRpY19jYXN0PGludD4o
Zmxvb3JmKG9sZEJvdHRvbSkpKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCgwLCBzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRUb3ApKSwgcmVuZGVyVmlldy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCku
bWF4WCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpKTsKICAg
ICByZW5kZXJWaWV3LT5zZXRQcmludFJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCmluZGV4IDllZDFjNzIzZTk5YzJhMmNhNjE5Y2M4ODVlZTJhY2E1NjY2ZjlhMGYuLjgwZDM2
ZjJjZjdjMTdhMTM0ZDljYTQ4NWUzNzM0NThlOWNiNDgyZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuaApAQCAtNjY2LDkgKzY2Niw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZy
YW1lRmxhdHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0Nv
bnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29u
dHJvbFRpbnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4
dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9
Ci0gICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VG
b3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVh
c29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0
TnVsbDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250
cm9sVGludHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0
TnVsbDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMp
OyB9CisgICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVy
c2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRh
dGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAg
ICB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1
NTQ2ZDNlYjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNh
ZDI2YjZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZy
YW1lLCBJbnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0Lmdl
dCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRl
eHQoaXIsIGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFr
ZQppbmRleCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZi
YjgwMzM4ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
YWlyby5jbWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3Rv
cmVCYWNrZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3Bl
cmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0
OTRmM2NhMWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBj
ODdkNTRkOWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0
ZDgxNTVkOWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4
ZjZlMDE0ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
RHJhZ0ltYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJh
Z0ltYWdlQ29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgi
CiAjaW1wb3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgot
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5o
IgogI2ltcG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFu
Y2UuaCIKICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtb
TlNJbWFnZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2Ug
X3dlYl9sb2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5m
aWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9h
dFJvdW5kZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlND
b2xvcihbTlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0
N2FiODZiYThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAw
YTAzZjNiMWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxE
aXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0
Rm9yVGV4CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5p
cXVlPERpc3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29u
dGV4dCByZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29u
dGV4dCkgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+
KGRpc3BsYXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0
UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwot
ICAgIH0pOworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNw
bGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCks
IG51bGxwdHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNv
bnN0cnVjdGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0
UG9pbnQgPSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2
YW5jZSgpKSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVm
ZmVyLCBzdGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXgg
OTkzNmI3NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uNmVlZDkzNzZkYzI0NTRl
NDVmMTg4ZWU5MTEyYjYxMWMwMGFhZmQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXIuaCIKQEAgLTgyLDExICs4MSw2IEBAIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZSgpCiAgICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQogICAg
ICwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCiAgICAgLCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyhmYWxzZSkKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ29yZSBHcmFwaGljcyBpbmNv
cnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxl
bS84MTAzNDQyPiksCi0gICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBi
ZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLCBzaGFkb3dz
VXNlTGVnYWN5UmFkaXVzKGZhbHNlKQotI2VuZGlmCiAgICAgLCBkcmF3THVtaW5hbmNlTWFzayhm
YWxzZSkKIHsKIH0KQEAgLTE2MCwxMCArMTU0LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3Rh
dGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggc3RhdGUuc2hhZG93
c1VzZUxlZ2FjeVJhZGl1cy4KICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5z
aGFkb3dPZmZzZXQ7CiAgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0Js
dXI7CiAgICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAg
ICAgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsK
ICAgICB9CiAKICAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC0yMjksMTQgKzIyMyw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QK
ICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwogCi0gICAg
aWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSkpIHsKLSNpZiBVU0UoQ0cpCi0gICAgICAgIGlmIChtX3N0YXRlLnNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMpCi0gICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX3N0YXRlLnNo
YWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAg
ICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRl
LnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsK
LSAgICB9CisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlNoYWRvd0NoYW5nZSkpCisgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hh
ZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3Rh
dGUuc2hhZG93UmFkaXVzTW9kZSk7CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKICAgICAgICAgY29u
dGV4dC5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwpAQCAtMzAy
LDkgKzI5MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zmc2V0KTsKLSNpZiBVU0UoQ0cpCi0g
ICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3Rh
dGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyk7Ci0jZW5kaWYKKyAgICAgICAgdHMuZHVtcFByb3Bl
cnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2Rl
ID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdl
RmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSkpCkBAIC0zNjEsNTUgKzM0NywxOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaAogICAgIHJl
dHVybiB0czsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKLSAgICA6IG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zKHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKLXsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KQotewotICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5JiBmYWN0b3J5RnVuY3Rpb24pCi0gICAgOiBtX2lt
cGwoZmFjdG9yeUZ1bmN0aW9uKCp0aGlzKSkKLXsKLX0KLQogR3JhcGhpY3NDb250ZXh0Ojp+R3Jh
cGhpY3NDb250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgIEFT
U0VSVCghbV90cmFuc3BhcmVuY3lDb3VudCk7Ci0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci19Ci0K
LWJvb2wgR3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmhhc1BsYXRmb3JtQ29udGV4dCgp
OwotICAgIHJldHVybiAhIW1fZGF0YTsKKyAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJD
b3VudCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3N0YWNrLmFwcGVuZCht
X3N0YXRlKTsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zYXZlKCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBz
dGFjayBpcyBlbXB0eSIpOwogICAgICAgICByZXR1cm47CkBAIC00MjIsMjAgKzM3MiwxMCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiAgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdp
bGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNh
cGFjaXR5LgogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgbV9zdGFjay5jbGVh
cigpOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJlc3RvcmUoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xv
cikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBzYXZlKCk7CiAKICAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7CkBAIC00NTEsNjcg
KzM5MSwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaQogICAgIHJlc3RvcmUoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3Mp
Ci17Ci0gICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7Ci0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewot
ICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZVN0eWxlKHN0eWxlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9r
ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0g
Y29sb3I7CiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0
ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNv
bG9yQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9r
ZUNvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25z
dCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1
ciA9IGJsdXI7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykK
LSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yKTsKKyAgICB1cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBj
b25zdCBDb2xvciYgY29sb3IsIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKIHsKICAgICBt
X3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBi
bHVyOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAg
bV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBz
ZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yKTsKKyAgICBtX3N0YXRlLnNoYWRv
d1JhZGl1c01vZGUgPSByYWRpdXNNb2RlOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJTaGFkb3coKQpAQCAtNTE5LDE1ICs0MTMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJTaGFkb3coKQogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7
CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKICAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0g
Q29sb3IoKTsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVz
ID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
bGVhclNoYWRvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFyUGxhdGZvcm1T
aGFkb3coKTsKKyAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0OworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dDaGFuZ2UpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZs
b2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yKSBjb25zdApAQCAtNTQ0
LDY2ICs0MzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUu
ZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0
cjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbG9yKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNo
b3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykKLXsKLSAgICBtX3N0YXRlLnNob3Vs
ZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkQW50aWFsaWFzQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBs
YXRmb3JtU2hvdWxkQW50aWFsaWFzKHNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKQot
ewotICAgIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsKLSAg
ICAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRz
KHNob3VsZFNtb290aEZvbnRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykK
LXsKLSAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHNDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25R
dWFsaXR5KQotewotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHlDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1J
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAg
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFu
Z2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjExLDggKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5z
dHJva2VDb2xvciA9IHsgfTsKICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsK
ICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBA
IC02MjAsOCArNDQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJl
ZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07CiAgICAg
bV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4g
PSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdl
KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBh
dHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9r
ZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCkBAIC02MzAsMTUgKzQ1Niw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNv
bnN0IEFmZmluZVRyCiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGll
bnQpOwogICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0
cjsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBt
X3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9p
bXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVD
aGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VHcmFkaWVudENoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxs
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpAQCAtNjQ3LDY0ICs0NjUsMzkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQs
IGNvbnN0IEFmZmluZVRyYW4KICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3Jh
ZGllbnQpOwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybTsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsK
LSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOyAvLyBGSVhNRTogYWxzbyBm
aWxsIHBhdHRlcm4/CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxHcmFkaWVudENoYW5nZSk7CisgICAgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJu
PwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQpCiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5iZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIGVsc2UKLSAgICAgICAgYmVnaW5QbGF0Zm9ybVRyYW5z
cGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgICsrbV90cmFuc3BhcmVuY3lDb3VudDsKKyAgICAr
K21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwt
PmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgZWxzZQotICAgICAgICBlbmRQbGF0Zm9ybVRy
YW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKTsK
LSAgICAtLW1fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5
ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OwogfQogCiBGbG9h
dFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJv
bSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQogICAgIC8vIERpc3BsYXkgbGlzdCByZWNv
cmRpbmcgZm9yIHRleHQgY29udGVudCBpcyBkb25lIGF0IGdseXBocyBsZXZlbC4gU2VlIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0dseXBocy4KICAgICByZXR1cm4gZm9udC5kcmF3VGV4dCgqdGhpcywg
cnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywg
YWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQogICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250
LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJr
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWdu
ZWQ+IHRvKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZy
b20sIHRvKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBG
b250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90
UmVhZHlBY3Rpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgQmlkaVJlc29sdmVyPFRleHRSdW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1
bj4gYmlkaVJlc29sdmVyOwogICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhy
dW4uZGlyZWN0aW9uKCksIHJ1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkpKTsKICAgICBiaWRpUmVz
b2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigm
cnVuLCAwKSk7CkBAIC03MzQsMTkgKzUyNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAg
ICBiaWRpUnVucy5jbGVhcigpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1JbWFn
ZShpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOwotfQotCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewogICAgIHJldHVybiBkcmF3
SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwpA
QCAtNzYwLDE4ICs1NDAsMTIgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW4KIAogSW1hZ2VEcmF3
UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2Nv
cGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGlt
YWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCiBJbWFn
ZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwg
Y29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCiAg
ICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9y
VGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIHJl
dHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXpl
LCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KQEAgLTc3OSw5ICs1NTMsNiBAQCBJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1h
Z2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCiAgICAgSW1h
Z2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBpZiAoaFJ1
bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkg
ewogICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCiAgICAgICAgIHJldHVybiBkcmF3SW1hZ2Uo
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwpAQCAtODAzLDE0ICs1NzQsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT5jYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2UpKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgc291
cmNlLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhp
cywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICBpbWFnZS5kcmF3KCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KQEAgLTgzMywzNiArNTk2LDE0IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAh
aW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3Bl
KCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIEltYWdlQnVmZmVy
OjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5kcmF3UGF0dGVybihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVBhdHRlcm4oaW1hZ2UucGxhdGZvcm1JbWFn
ZSgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRoOwogICAgIHBh
dGguYWRkUm91bmRlZFJlY3QocmVjdCk7CiAgICAgY2xpcFBhdGgocGF0aCk7CkBAIC04NzAsOSAr
NjExLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgp
KSB7CiAgICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwogICAgICAgICByZXR1cm47CkBAIC04
ODUsMTQgKzYyMyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9E
cmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWFu
ZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiBjb2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmIGRyYXdp
bmdGdW5jdGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmNsaXBUb0RyYXdpbmdDb21tYW5kcyhkZXN0aW5hdGlvbiwg
Y29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nRnVuY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIENs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKLSAgICB9Ci0KICAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoZGVzdGluYXRp
b24uc2l6ZSgpLCBjb2xvclNwYWNlLCAqdGhpcyk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6RmFpbGVkVG9DcmVhdGVJ
bWFnZUJ1ZmZlcjsKQEAgLTkwNCw2MSArNjM0LDIyIEBAIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1h
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb25SZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5jbGlwVG9JbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGlu
YXRpb25SZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGltYWdlQnVmZmVyLmNs
aXBUb01hc2soKnRoaXMsIGRlc3RpbmF0aW9uUmVjdCk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAh
VVNFKERJUkVDVDJEKSAmJiAhVVNFKENBSVJPKQogSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBCb3VuZHMoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVy
biBJbnRSZWN0KCk7CiB9Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFRleHRE
cmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQotewotICAgIG1fc3RhdGUudGV4
dERyYXdpbmdNb2RlID0gbW9kZTsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUo
bW9kZSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yLCBvcCwgYmxlbmRNb2RlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0
b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3As
IGJsZW5kTW9kZSk7CiAgICAgZmlsbFJlY3QocmVjdCwgY29sb3IpOwpAQCAtOTY3LDI4ICs2NTgs
MTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3MKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwgYmxlbmRNb2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKSB7CiAgICAgICAgIHNldENvbXBv
c2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKLSAgICAgICAg
cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IpOworICAgICAgICBmaWxsUm91bmRl
ZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNv
bXBvc2l0ZU9wZXJhdGlvbigpKTsKICAgICB9IGVsc2UKICAgICAgICAgZmlsbFJlY3QocmVjdC5y
ZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRpb24oKSwgYmxlbmRNb2RlKTsKIH0KIAotI2lm
ICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpICYmICFVU0UoQ0FJUk8pCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCkBA
IC0xMDA4LDcwICs2ODcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um8KICAgICBzZXRGaWxs
UnVsZShvbGRGaWxsUnVsZSk7CiAgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CiB9Ci0j
ZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQotewot
ICAgIG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hh
bmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybUFscGhhKGFscGhh
KTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7
CiAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbjsKICAg
ICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9kZTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNv
bXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0
UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBk
cmF3THVtaW5hbmNlTWFzaykKLXsKLSAgICBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJh
d0x1bWluYW5jZU1hc2s7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFu
Z2UpOwotfQotCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKQotewot
ICAgIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNoYW5nZSk7Ci19Ci0jZW5kaWYKLQotI2lm
ICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi0vLyBJbXBsZW1lbnQgdGhpcyBpZiB5b3Ugd2Fu
dCB0byBnbyBwdXNoIHRoZSBkcmF3aW5nIG1vZGUgaW50byB5b3VyIG5hdGl2ZSBjb250ZXh0IGlt
bWVkaWF0ZWx5Lgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdN
b2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKQotewotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENBSVJP
KSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ry
b2tlU3R5bGUoU3Ryb2tlU3R5bGUpCi17CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7CiB9Ci0jZW5kaWYKLQot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sKQotewotfQotI2VuZGlmCi0KLSNpZiAhVVNF
KENHKSAmJiAhVVNFKERJUkVDVDJEKSAmJiAhVVNFKENBSVJPKQotYm9vbCBHcmFwaGljc0NvbnRl
eHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0jZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRh
cmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBT
dHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTExMDIsMjQgKzcyNCw2IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZs
b2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgc2NhbGUoZGV2aWNlU2Nh
bGVGYWN0b3IpOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgcGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKLX0KLSAgICAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29u
c3QKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CkBAIC0xMTMzLDI0ICs3MzcsMTAg
QEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnMKICAgICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVj
dC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBwbGF0Zm9ybUZpbGxFbGxpcHNlKGVsbGlwc2UpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtU3Ryb2tlRWxsaXBzZShlbGxpcHNl
KTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKQpAQCAtMTE2NywyMyArNzU3LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VF
bGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBzdHJva2VQYXRoKHBh
dGgpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmaWxs
RWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHlsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdHJva2VFbGxp
cHNlQXNQYXRoKGVsbGlwc2UpOworICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigp
LCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcs
IGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKIH0KLSNlbmRpZgogCiBGbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGJvb2wgcHJpbnRpbmcpCiB7CkBAIC0xMjE4LDIwICs3OTUsNiBAQCBGbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JU
ZXh0KGNvbnN0IEZsbwogICAgIHJldHVybiBGbG9hdFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVj
dC53aWR0aCgpLCB0aGlja25lc3MpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJ1aWxk
ZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCi17Ci0gICAgc2V0UGxh
dGZvcm1TaGFkb3coc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5z
aGFkb3dDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Moc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKTsKLSAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShzdGF0ZS50ZXh0RHJh
d2luZ01vZGUpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3Ip
OwotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKHN0YXRlLmZpbGxDb2xvcik7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2VTdHlsZShzdGF0ZS5zdHJva2VTdHlsZSk7Ci0gICAgc2V0UGxhdGZvcm1BbHBo
YShzdGF0ZS5hbHBoYSk7Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0gICAgc2V0UGxhdGZvcm1TaG91
bGRBbnRpYWxpYXMoc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLSAgICBzZXRQbGF0Zm9ybVNob3Vs
ZFNtb290aEZvbnRzKHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKLX0KLQogZmxvYXQgR3JhcGhp
Y3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJv
a2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlja25lc3Mo
KTsKQEAgLTEyODMsMzYgKzg0NiwxNSBAQCBWZWN0b3I8RmxvYXRQb2ludD4gR3JhcGhpY3NDb250
ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaQogICAgIHJl
dHVybiB7IHBvaW50MSwgcG9pbnQyIH07CiB9CiAKLSNpZiAhVVNFKENHKQotCi1ib29sIEdyYXBo
aWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBv
aW50JikKLXsKLX0KLQotI2VuZGlmCi0KICNpZiBFTkFCTEUoVklERU8pCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCAmJiBtX2ltcGwtPmNhblBhaW50RnJhbWVG
b3JNZWRpYShwbGF5ZXIpKSB7Ci0gICAgICAgIG1faW1wbC0+cGFpbnRGcmFtZUZvck1lZGlhKHBs
YXllciwgZGVzdGluYXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgcGxheWVy
LnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoKnRoaXMsIGRlc3Rp
bmF0aW9uKTsKIH0KICNlbmRpZgogCit2b2lkIEdyYXBoaWNzQ29udGV4dE51bGw6OmRyYXdDb25z
dW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpCit7Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKaW5kZXggZjkxMGI4Njg2ZDE5Zjk3MDVjMDQzNzIxODUwNmZhZTk5NWUyNzM1MC4uOGUwNjZm
NjQ4NDk2Yjg2ZDAwOTMzODA3NzkxNjBiMTRjYmU1NTUxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNp
bmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbi5oPgpAQCAtODYsNyArODcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBGbG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3Jh
ZGllbnQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOwogY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0OwpAQCAt
MTEwLDYgKzExMCwxMyBAQCBlbnVtIGNsYXNzIFRleHREcmF3aW5nTW9kZSA6IHVpbnQ4X3Qgewog
fTsKIHVzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdzID0gT3B0aW9uU2V0PFRleHREcmF3aW5nTW9k
ZT47CiAKKy8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBh
bmQgLXdlYmtpdC1ib3gtc2hhZG93LgorLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2Yg
cmFkaWkgPiA4cHguCitlbnVtIGNsYXNzIFNoYWRvd1JhZGl1c01vZGUgOiBib29sIHsKKyAgICBE
ZWZhdWx0LAorICAgIExlZ2FjeQorfTsKKwogZW51bSBTdHJva2VTdHlsZSB7CiAgICAgTm9TdHJv
a2UsCiAgICAgU29saWRTdHJva2UsCkBAIC0yMTksMTQgKzIyNiwxMiBAQCBzdHJ1Y3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUgewogICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
IHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIgfTsKICAgICBCbGVuZE1vZGUgYmxlbmRN
b2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsK
KyAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1JhZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0IH07CiAKICAgICBib29sIHNob3VsZEFudGlhbGlhcyA6IDE7CiAgICAgYm9vbCBz
aG91bGRTbW9vdGhGb250cyA6IDE7CiAgICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHMgOiAxOwogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgOiAxOwotI2lmIFVTRShD
RykKLSAgICBib29sIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgOiAxOwotI2VuZGlmCiAgICAgYm9v
bCBkcmF3THVtaW5hbmNlTWFzayA6IDE7CiAjaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkK
ICAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlIDogMTsKQEAgLTI1NCwyNyArMjU5LDE1IEBAIHN0
cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSYpOwogCi0KIGNsYXNzIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
Kik7Ci0gICAgCi0gICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgPSBXVEY6OkZ1
bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRJbXBsPihHcmFwaGljc0NvbnRl
eHQmKT47Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KGNvbnN0IEdyYXBoaWNz
Q29udGV4dEltcGxGYWN0b3J5Jik7CitwdWJsaWM6ICAgCiAKLSAgICBHcmFwaGljc0NvbnRleHQo
KSA9IGRlZmF1bHQ7Ci0gICAgV0VCQ09SRV9FWFBPUlQgfkdyYXBoaWNzQ29udGV4dCgpOwotICAg
IAotICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDogdWludDhfdCB7Ci0g
ICAgICAgIE5vbmUsCi0gICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50cywKLSAgICAgICAg
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKLSAgICAgICAgRGV0ZWN0aW5nQ29u
dGVudGZ1bFBhaW50Ci0gICAgfTsKLSAgICBHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1
bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICNp
ZiBVU0UoRElSRUNUMkQpCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQKICAgICBlbnVtIGNsYXNzIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlIDogdWludDhfdCB7CiAgICAgICAgIENQVU1lbW9yeSwKICAgICAgICAgR1BVTWVtb3J5CkBA
IC0yODIsMjUwICsyNzUsMjcxIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGlj
c0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSk7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzUGxhdGZvcm1Db250
ZXh0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQq
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
IAotICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuICFtX2RhdGEgJiYg
IW1faW1wbDsgfQotICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lOyB9Ci0gICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25z
dCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQotICAgIGJvb2wgaW52YWxpZGF0
aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlczsgfQotICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGludmFsaWRhdGluZ0ltYWdlc1dp
dGhBc3luY0RlY29kZXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOworICAgIC8v
IENvbnRleHQgU3RhdGUKKworICAgIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNr
bmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsgdXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSk7IH0K
ICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzczsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Cisg
ICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkgeyBtX3N0YXRlLnN0cm9r
ZVN0eWxlID0gc3R5bGU7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KICAgICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5bGU7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgc3Ry
b2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUNvbG9yOyB9CiAKLSAgICB2
b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJik7CiAgICAgUGF0dGVybiogc3Ry
b2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsg
fQogCi0gICAgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tl
R3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsK
ICAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsK
KyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1
bGUgPSBmaWxsUnVsZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxSdWxlQ2hhbmdlKTsgfQogICAgIFdpbmRSdWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxs
Q29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBjb25zdCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0KIAotICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4o
UmVmPFBhdHRlcm4+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRlcm4o
UmVmPFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
ID0geyB9KTsKICAgICBHcmFkaWVudCogZmlsbEdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoYm9vbCk7CisgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29s
IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsgfQogICAgIGJv
b2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3Vs
ZEFudGlhbGlhcyhib29sKTsKKyAgICB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3Vs
ZEFudGlhbGlhcykgeyBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsg
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlh
c0NoYW5nZSk7IH0KICAgICBib29sIHNob3VsZEFudGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc2hvdWxkQW50aWFsaWFzOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNo
b3VsZFNtb290aEZvbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9v
bCBzaG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxk
U21vb3RoRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7IH0KICAgICBib29sIHNob3VsZFNtb290aEZvbnRzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250czsgfQogCiAgICAgLy8gTm9y
bWFsbHkgQ0cgZW5hYmxlcyBzdWJwaXhlbC1xdWFudGl6YXRpb24gYmVjYXVzZSBpdCBpbXByb3Zl
cyB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxpZ25pbmcgZ2x5cGhzLgogICAgIC8vIEluIHNvbWUgY2Fz
ZXMgd2UgaGF2ZSB0byBkaXNhYmxlIHRvIHRvIGVuc3VyZSBhIGhpZ2gtcXVhbGl0eSBvdXRwdXQg
b2YgdGhlIGdseXBocy4KLSAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhi
b29sKTsKKyAgICB2b2lkIHNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyA9IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsgdXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7
IH0KICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB9CiAKLSAgICBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAg
dm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1
YWxpdHkpIHsgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgdXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2UpOyB9CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eTsgfQogCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKTsKLSAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICB2b2lk
IGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7
IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsgfQorICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5hbHBoYTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAgQmxlbmRNb2RlIGJsZW5k
TW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2RlOyB9CisKKyAg
ICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spIHsgbV9z
dGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpOyB9
CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJh
d0x1bWluYW5jZU1hc2s7IH0KKworICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOyB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hh
bmdlKTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCk7Ci0gICAgYm9vbCBpc0NBTGF5ZXJDb250
ZXh0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRT
aXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKKyAgICBib29sIGhhc1Zpc2libGVTaGFkb3co
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAg
Ym9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1f
c3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsgfQorICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygp
IGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7
IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCisgICAgdm9pZCBzZXRVc2VEYXJr
QXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJhbmNlKSB7IG1fc3RhdGUudXNlRGFya0FwcGVh
cmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsgfQorICAgIGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9
CiAjZW5kaWYKLSAgICBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENv
bnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorCisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBzYXZlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHJlc3RvcmUo
KTsKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1NpemUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNr
LnNpemUoKTsgfQogCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgLy8gRklYTUU6
IFNob3VsZCB0aGVzZSByZWFsbHkgYmUgcHVibGljIEdyYXBoaWNzQ29udGV4dCBtZXRob2RzPwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisKKyAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2Ug
dGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwgYW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9z
cy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCA9IDA7CisKKyAg
ICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFwaGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBw
YXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYgdGhlIGNvbnRleHQ/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpID0gMDsKKyNlbmRpZgorCisgICAgdmly
dHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CisKKyAgICAvLyBQaXhlbCBTbmFwcGluZworCisgICAg
ZW51bSBSb3VuZGluZ01vZGUgeworICAgICAgICBSb3VuZEFsbFNpZGVzLAorICAgICAgICBSb3Vu
ZE9yaWdpbkFuZERpbWVuc2lvbnMKKyAgICB9OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxT
aWRlcykgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1Bp
eGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9r
ZVdpZHRoLCBTdHJva2VTdHlsZSk7CisKKyAgICAvLyBCYXNpYyBTaGFwZXMKKwogICAgIC8vIFRo
ZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5kIGZpbGxpbmcuCiAgICAg
Ly8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGljaCBmaWxscyBwcm9wZXJseSBidXQg
YWx3YXlzIHN0cm9rZXMKICAgICAvLyB1c2luZyBhIDEtcGl4ZWwgc3Ryb2tlIGluc2V0IGZyb20g
dGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKICAgICAvLyBzdHJva2UgY29sb3IpLgot
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNz
ID0gMSk7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKIAotICAgIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRo
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lk
IGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0
aChlbGxpcHNlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CiAKLSAgICB2
b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgR3JhZGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9y
bWFsKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2
b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxp
bmVXaWR0aCk7CisgICAgLy8gRklYTUU6IFdoeSBhcmVuJ3QgdGhlc2UgcGFydCBvZiB0aGUgc3Rh
dGU/CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxm
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIC8vIEltYWdlcywgUGF0
dGVybnMsIGFuZCBNZWRpYQogCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRy
YXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJ
bWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVj
dCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pID0gMDsKIAotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJj
ZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJh
d0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNl
LCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRy
PEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZl
cihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSk7Ci0gICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQorI2lmIEVOQUJMRShWSURFTykK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7CisjZW5kaWYKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAot
ICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBPdXRSb3Vu
ZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0g
ICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1
bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpOwog
CiAgICAgZW51bSBjbGFzcyBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgOiBib29sIHsgU3Vj
Y2VzcywgRmFpbGVkVG9DcmVhdGVJbWFnZUJ1ZmZlciB9OwotICAgIENsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGlj
c0NvbnRleHQmKT4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYpOwogICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwotCi0gICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwot
ICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCk7Ci0gICAgYm9vbCB1c2VE
YXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7
IH0KLSNlbmRpZgotCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0
aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGRyYXdHbHlwaHMo
Y29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFk
dmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3Ro
aW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9w
dCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKLQotICAgIHZv
aWQgYnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKIAotICAgIGVudW0g
Um91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmln
aW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKTsKKyAgICAv
LyBUZXh0CiAKLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxz
ZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9
IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1
bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6
Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnRO
b3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1
cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVy
cygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3Vu
ZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlk
U3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tl
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBj
YW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFzIGRpZmZlcmVudCB0
cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lTaGFkb3coY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAvLyBUcmFuc3BhcmVu
Y3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAg
Ym9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4g
KG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5
ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNv
bnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8
IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFz
VmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAgIC8vIEZvY3VzIFJp
bmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUg
dGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/CiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29s
JiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBj
b25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywg
Y29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2Fw
KTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAgICBmbG9hdCBhbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KKyAgICAvLyBUcmFuc2Zvcm1zCiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9z
aXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KLQotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5j
ZU1hc2soYm9vbCk7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KLQotICAgIC8vIFRoaXMgY2xpcCBmdW5jdGlv
biBpcyB1c2VkIG9ubHkgYnkgPGNhbnZhcz4gY29kZS4gSXQgYWxsb3dzCi0gICAgLy8gaW1wbGVt
ZW50YXRpb25zIHRvIGhhbmRsZSBjbGlwcGluZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNp
bmNlCi0gICAgLy8gdGhlIGRpc2NpcGxpbmUgaXMgZGlmZmVyZW50LgotICAgIHZvaWQgY2FudmFz
Q2xpcChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKLQotICAgIHZvaWQgc2NhbGUoZmxvYXQgcykKLSAgICB7
Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAgIHZvaWQgdHJhbnNs
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsg
dHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBj
b25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVm
aW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VT
Y2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Q7Cisg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBv
c3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2lu
ZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBj
b250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0
OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsg
fQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAotICAg
IHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBMaW5rcwogCi0jaWYg
RU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7Ci0jZW5kaWYKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3Qm
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3Ry
aW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lkIGFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgeyB9CiAKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAgICB2b2lkIHNldENv
bnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1
ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKworICAgIC8vIEZJWE1FOiBOb3RoaW5nIGluIHRo
aXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQgZWxzZXdoZXJlLgog
I2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3Qm
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiByZWN0IGlzIHVzZWQg
dG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJhbnNwYXJlbmN5IGxh
eWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNvbnN0IEludFJlY3Qm
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBIREMgc2hvdWxkIGJl
IHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAgICAgSERDIGhkYygp
IGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRleHQoSERDLCBib29s
IGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4KIAorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJlbnQgcGxhY2UgdG8K
KyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFuZCBXaW5kb3dzIENh
aXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCA9IDA7CisjaWYgUExBVEZPUk0oV0lO
KQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNoaWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRl
cmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8gcmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBq
dXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBEZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpA
QCAtNTY0LDEyICs1NzgsMTIgQEAgcHVibGljOgogI2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFw
aGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxw
aGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAg
IHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZhY3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFS
ZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBiZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9S
X0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZs
dXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01
ODUsNzcgKzU5OSwxNTUgQEAgcHVibGljOgogI2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKICNlbmRp
ZiAvLyBPUyhXSU5ET1dTKQogCi0gICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgs
IFN0cm9rZVN0eWxlKTsKK3ByaXZhdGU6CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNw
YXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHN0cm9r
ZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBib29sIHN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpIGNvbnN0OworICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFu
dGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENv
bG9yJik7CisKKyAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChm
bG9hdCkgY29uc3Q7CisgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdp
ZHRoKGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBh
dHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRo
KSBjb25zdDsKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5l
cnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9p
bnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRJbXBs
KiBpbXBsKCkgeyByZXR1cm4gbV9pbXBsLmdldCgpOyB9CisgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGUgbV9zdGF0ZTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CisgICAgVmVjdG9y
PEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCi0jaWYgUExBVEZPUk0oV0lOKQot
ICAgIHZvaWQgcGxhdGZvcm1Jbml0KEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsKLSNlbmRp
ZgorICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCB7IDAgfTsKKyAgICBib29s
IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9OworfTsKIAotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJF
Q1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYK
Ky8vIEZJWE1FOiBNb3ZlIHRvIGEgc2VwYXJhdGUgZmlsZS4KK2NsYXNzIEdyYXBoaWNzQ29udGV4
dE51bGwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNz
IFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgeworICAgICAgICBOb25lLAorICAg
ICAgICBJbnZhbGlkYXRpbmdDb250cm9sVGludHMsCisgICAgICAgIEludmFsaWRhdGluZ0ltYWdl
c1dpdGhBc3luY0RlY29kZXMsCisgICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAorICAg
IH07CiAKLSAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxh
dGZvcm1TdGF0ZSgpOworICAgIEdyYXBoaWNzQ29udGV4dE51bGwoUGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVh
c29ucykKKyAgICB7CisgICAgfQogCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Citwcml2YXRlOgorI2lmIFVTRShDRykgfHwgVVNFKERJ
UkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAg
ICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQor
I2VuZGlmCiAKLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsK
LSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQg
c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOworICAgIGJvb2wgcGFpbnRpbmdEaXNh
YmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIHBlcmZvcm1p
bmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQorICAgIGJv
b2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWlu
dEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlk
YXRpbmdDb250cm9sVGludHM7IH0KKyAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29u
cyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXM7IH0KKyAgICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50OyB9CiAKLSAgICB2b2lkIHNldFBs
YXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKSBmaW5hbCB7IH0KIAotICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wpOwotICAg
IHZvaWQgc2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25R
dWFsaXR5KTsKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHNldFBs
YXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1h
Z2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQogCi0g
ICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtQ29t
cG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBiZWdpblBsYXRmb3JtVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgdm9pZCBlbmRQbGF0Zm9ybVRyYW5z
cGFyZW5jeUxheWVyKCk7Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXll
cnMoKTsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07
IH0KIAotICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAg
dm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOworI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9
CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisjZW5kaWYKIAotICAgIHZvaWQgcGxhdGZvcm1GaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHBsYXRmb3JtU3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0ID0gMSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0KKyAgICAvLyBGSVhNRTogSXMgaXQgb2sgdGhhdCB0
aGlzIGRvZXNuJ3Qgd29yaz8/CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7
IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBj
b25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRT
dHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0K
KyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbCB7IH0K
KyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBm
aW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9
IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0K
KyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZv
aWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyAg
ICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwg
Y29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RG
OjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKworICAgIHZvaWQgZHJhd0dseXBocyhj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2
YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZp
bmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYs
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVu
c2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IH0K
KyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
biA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorCisg
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1h
Z2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFn
ZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJl
dHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90
aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpU
aWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorCisgICAg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0
LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0K
KyNlbmRpZgogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Q29uc3VtaW5n
SW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKIAot
ICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0gICAgdm9p
ZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBGbG9hdFJlY3QgY29tcHV0
ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBi
b29sIHByaW50aW5nLCBDb2xvciYpOworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBj
bGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgZmluYWwgeyBy
ZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOyB9CisgICAgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsg
fQogCi0gICAgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQp
IGNvbnN0OwotICAgIGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0aChm
bG9hdCkgY29uc3Q7Ci0gICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJu
QW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29u
c3Q7Ci0gICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJv
b2wgaXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwg
RmxvYXRQb2ludCBwb2ludDIpIGNvbnN0OworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5k
TW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogbV9kYXRhIHsgbnVsbHB0ciB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHRJbXBsPiBtX2ltcGw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwp
IGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CiAK
LSAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwotICAgIFZlY3RvcjxHcmFwaGljc0Nv
bnRleHRTdGF0ZSwgMT4gbV9zdGFjazsKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdm9pZCBwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
KyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyNlbmRpZiAvLyBPUyhXSU5ET1dTKQogCitwcml2YXRlOgogICAgIGNvbnN0IFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyB7IFBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6Tm9uZSB9OwotICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJlbmN5Q291bnQg
eyAwIH07Ci0gICAgYm9vbCBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgeyBmYWxzZSB9OwogfTsK
IAogY2xhc3MgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciB7CkBAIC03NDQsOCArODM2LDYgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3N0YWNrU2l6ZTsKIH07CiAKLQotCiBjbGFzcyBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHlUb1VzZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
SW1wbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMTRhMGE4OTJiNmU5OWY5
OWRiODIzY2VhMzUyMWI0YzVmZjU1YzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotR3JhcGhpY3NDb250ZXh0SW1wbDo6R3JhcGhpY3NDb250ZXh0SW1wbChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi0gICAgOiBtX2dyYXBoaWNzQ29udGV4dChjb250ZXh0KQotewotfQotCi1H
cmFwaGljc0NvbnRleHRJbXBsOjp+R3JhcGhpY3NDb250ZXh0SW1wbCgpCi17Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjYyZmZiNDU0NWFlMjM1NmY3YzFmYmY3OGMwNDk0YjNjYWNjZTNiMS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250
ZXh0SW1wbCk7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbChHcmFwaGljc0NvbnRl
eHQmKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsKCk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGhpY3NDb250
ZXh0OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBjYW5EcmF3SW1hZ2VCdWZmZXIoY29uc3QgSW1hZ2VCdWZmZXIm
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsgfQotCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSA9IDA7Ci0KLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
ID0gMDsKLSNlbmRpZgotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3Ro
aW5nTW9kZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291
cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2F2ZSgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVzdG9yZSgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXpl
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
PSAwOwotICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBlbmRUcmFu
c3BhcmVuY3lMYXllcigpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjbGlwKGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSA9IDA7Ci0gICAgdmlydHVh
bCBJbnRSZWN0IGNsaXBCb3VuZHMoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRl
eHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pID0gMDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmly
dHVhbCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1l
ZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3QgPSAwOwotI2VuZGlmCi0gICAgCi0gICAgdmly
dHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhp
Y3NDb250ZXh0OjpSb3VuZGluZ01vZGUpID0gMDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRl
eHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggNDQwZjcyNTM1ODJjYzY0OTMxNWYyNDczYjM5MDMy
MmIwYTY2MjA4NS4uMTM4MGU3ZWQ5ZmM4ZjM2NDhlZjA2NzE5MzQ4ZGJlNzcxY2Y5OTkzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcApAQCAtMTg4LDggKzE4
OCw5IEBAIEltYWdlRHJhd1Jlc3VsdCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYg
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjCiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IHdhbnQgdG8ga2VlcCB0aGlzIGJl
aGF2aW9yIGRpZmZlcmVuY2U/Pz8KICAgICAvLyBXaGVuIHVzaW5nIGFjY2VsZXJhdGVkIGRyYXdp
bmcgb24gaU9TLCBpdCdzIGZhc3RlciB0byBzdHJldGNoIGFuIGltYWdlIHRoYW4gdG8gdGlsZSBp
dC4KLSAgICBpZiAoY3R4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CisgICAgaWYgKGN0eHQu
cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CiAgICAgICAg
IGlmIChzaXplKCkud2lkdGgoKSA9PSAxICYmIGludGVyc2VjdGlvbihvbmVUaWxlUmVjdCwgZGVz
dFJlY3QpLmhlaWdodCgpID09IGRlc3RSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgICAgICBGbG9h
dFJlY3QgdmlzaWJsZVNyY1JlY3Q7CiAgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRYKDAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggNGQzZjQzMGM2
MTdkMTAwMTZlZjUzODBmZDg5YTk0Y2IwYmFlYTZjMy4uMTc2NDc0N2Q2MTQwY2YxMTZjOWM2NDI2
ZGRjOTcxYWMyYmViOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oCkBAIC03MSw3ICs3MSw2IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0
UG9pbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogc3RydWN0IExlbmd0aDsK
IApAQCAtODAsNyArNzksNiBAQCBjbGFzcyBJbWFnZU9ic2VydmVyOwogCiBjbGFzcyBJbWFnZSA6
IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlPiB7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbDsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JbWFnZSgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA3YTdmNjcwYTI4MTQyNDQzODUzNzcxOTcxZjM5
MTc2NGYyMTllMjYwLi5jYWFhODhjYjU4OTE4MWM0MDlhYzU0MjBjZDlmZmEzMmQzZTQ1ZGM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApA
QCAtMjAwLDcgKzIwMCw5IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlKQogICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhzdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCi0gICAgaWYgKHN0YXRl
LnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpIHsKKyAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVj
dGx5IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgx
MDM0NDI+KSwKKyAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2
aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKyAgICBpZiAoc3RhdGUuc2hh
ZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKICAgICAgICAgZmxv
YXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKHN0YXRlLnNoYWRvd0JsdXIpOwog
ICAgICAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1cik7
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
R3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNzhjNzljZDdlODllOTJjMjZjNGZlNmM0N2RlOTU3
ZmZkOGZmOTZjNC4uNDQzYTU2YTJiNzQ1YmViZWRkZDU4MTY3YWQ2YjFkMzMyMmZiMGI5ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCkBAIC0xNzQxLDkgKzE3NDEsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6
cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhDb21taXRTdGF0ZSYgY29tbWl0U3RhdGUsIGNvbnN0IFRy
YQogICAgICAgICAKICAgICAgICAgRmxvYXRSZWN0IGluaXRpYWxDbGlwKGJvdW5kc09yaWdpbigp
LCBzaXplKCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFsmXShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3Bs
YXlMaXN0OjpSZWNvcmRlcj4oY29udGV4dCwgKm1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4
dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIH0pOwor
ICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgY29udGV4dCgqbV9kaXNwbGF5TGlzdCwgR3Jh
cGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKICAg
ICAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcApp
bmRleCAzYjQ0OGFmMDRmYTI1NWU0Zjg0M2VmNDI5ZWJkNzdjOWExZDg2OGFiLi42ODgxMjIxYjA0
NThkY2M5NDg0ZjM0ZjQxNjYzZGRkNzRlMTI4NzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgog
I2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1D
QUxheWVyV2luSW50ZXJuYWwuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC04OTAsNyArODkw
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludChDR0NvbnRleHRS
ZWYgY29udGV4dCwgQ0dGbG9hdCB4LCBDR0Zsb2EKICAgICBGb250Q2FzY2FkZSBmb250ID0gRm9u
dENhc2NhZGUoV1RGTW92ZShkZXNjKSwgMCwgMCk7CiAgICAgZm9udC51cGRhdGUobnVsbHB0cik7
CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0
Q0cgY2coY29udGV4dCk7CiAgICAgY2cuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAgICAg
Y2cuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgSW50UG9pbnQoeCwgeSkpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKaW5kZXggZDNmNDQ4YWNhOTAz
MGY3N2Q3OGU1N2M0MmYzMDUyZDZhOTg5MzFjNC4uZGJkMzYzZTYxM2NlYjA3ZTAzNjY3MzM1NWQw
NDdlZGFhYTUyZTUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwu
Y3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaWYgVVNFKENBKQogCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlRpbGVD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCkBAIC05NCw3ICs5NCw3IEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayhDQUNGTGF5
ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0CiAKICAgICBQbGF0Zm9ybUNBTGF5ZXI6OmZsaXBDb250
ZXh0KGNvbnRleHQsIGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRo
ZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkK
ICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMp
CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZHJh
d1JlcGFpbnRDb3VudGVycyhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb24KICAgICBlbHNlCiAg
ICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNhY2hlZENHQ29sb3IoQ29sb3I6OnJlZCk7CiAKLSAg
ICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBoaWNz
Q29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBQbGF0Zm9ybUNBTGF5ZXI6
OmRyYXdSZXBhaW50SW5kaWNhdG9yKGdyYXBoaWNzQ29udGV4dCwgb3duZXIoKSwgZHJhd0NvdW50
LCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2lu
LmNwcAppbmRleCBjNWE3M2U4ZDNhZTliYjQ5YTk2YmUyN2Y1MzI3ZTA2YzA2MjE0ZmMzLi5iNTNh
MzM3YmE0Y2NkY2YyM2Y3ODU0OTA1YjI3NjA3ZWM5MGMwNjRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIFVTRShDQSkKIAot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBX
ZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbnRleHRSZWYKICAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCA9IG93
bmVyKCktPm93bmVyKCk7CiAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGluYXRl
c09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50
c09yaWVudGF0aW9uKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsK
IAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0
LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5CiAgICAgLy8gc21hbGxlciB0aGFuIHRo
ZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCmluZGV4IGNmNDgzNzYwM2UwYWIxOTA4ODk3NWYxMGU0MmRlNzVhMTI4YjA3NTcuLmJh
NTk0YWU4Y2MyYTgwMmI2NTYwNjBmYjBlM2JiYTIyMTg2OTg0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCIKIAogI2lmIFVTRShDQUlSTykKIApAQCAtMzksNyArMzksNiBAQAogI2luY2x1
ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUg
IkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTU3LDYzMyArNTYsMzU3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtSW5pdChQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KQorR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQpCisgICAgOiBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQp
CisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKIHsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgqcGxhdGZvcm1Db250ZXh0KTsKLSAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5z
ZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fZGF0YSk7Ci0gICAgbV9kYXRhLT5zeW5jQ29udGV4
dChwbGF0Zm9ybUNvbnRleHQtPmNyKCkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBo
aWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKKyAgICBtX3ByaXZhdGUtPnN5bmND
b250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRl
eHRDYWlybyhjYWlyb190KiBjYWlyb0NvbnRleHQpCisgICAgOiBtX293bmVkUGxhdGZvcm1Db250
ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCisgICAg
LCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJp
dmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9y
bUNvbnRleHQpKQogewotICAgIGlmIChtX2RhdGEpIHsKLSAgICAgICAgbV9kYXRhLT5wbGF0Zm9y
bUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKLSAgICAgICAgZGVs
ZXRlIG1fZGF0YTsKLSAgICB9CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQo
bV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86On5HcmFwaGljc0NvbnRleHRDYWlybygpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOworICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Cit9
CiAKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVk
ZVNjYWxlKTsKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q2Fpcm86Omhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOworQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRDVE0o
SW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK3sKICAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotUGxhdGZvcm1Db250
ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK1BsYXRm
b3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1Db250ZXh0OworICAgIHJl
dHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZl
UGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzYXZlKCkKIHsKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2
ZSgpOwogICAgIENhaXJvOjpzYXZlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogICAgIENhaXJvOjpyZXN0b3JlKCpwbGF0
Zm9ybUNvbnRleHQoKSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEg
c3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVy
VGhpY2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5p
c0VtcHR5KCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwot
ICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdl
dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAg
ICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFn
ZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRl
cnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0g
Tm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0xpbmUoKnBsYXRmb3JtQ29udGV4dCgpLCBw
b2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0
ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAKIC8vIFRoaXMg
bWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxp
c3RzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJh
d0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRl
LnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBDYWlybzo6ZmlsbFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBD
YWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIENhaXJvOjpzdHJva2VQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0
aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxsUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKK30KIAotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xvcik7Cit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVu
dCkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgYXV0byBwYXR0ZXJu
ID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJh
bnNmb3JtKTsKKyAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpmaWxsUmVjdCgqcGxh
dGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkp
OworICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKKyAgICBDYWlybzo6ZmlsbFJl
Y3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRlcm4uZ2V0KCkpOworICAgIENhaXJvOjpy
ZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRv
ciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQ2Fpcm86
OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0
ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91
c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCit7CiAgICAgQ2Fpcm86OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmNsaXBQ
YXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwogfQogCi1JbnRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChhdXRvIG5hdGl2ZUlt
YWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAg
ICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgbmF0aXZlSW1h
Z2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICNpZiBQTEFURk9STShXUEUp
IHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBh
dGgsIGNvbG9yKTsKICAgICBVTlVTRURfUEFSQU0od2lkdGgpOwogICAgIFVOVVNFRF9QQVJBTShv
ZmZzZXQpOwogICAgIHJldHVybjsKICNlbHNlCi0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgd2lkdGgs
IGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShH
VEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0cywgY29sb3IpOwog
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAg
cmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpk
cmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIHdpZHRoLCBjb2xvcik7CiAj
ZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ry
b2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxl
KQogewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgp
LCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGlu
ZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAo
d2lkdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3TGluZXNG
b3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmlu
dGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5bGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqcGxhdGZvcm1Db250ZXh0KCksIHJlY3Qs
IHN0eWxlKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitG
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0OwotCi0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3Vu
ZGluZ01vZGUpOwotCiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVs
cygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgeCwgeSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxD
b2xvcihjb25zdCBDb2xvciYpCi17Ci0gICAgLy8gQ2Fpcm8gY29udGV4dHMgY2FuJ3QgaG9sZCBz
ZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCi0gICAgLy8gc28gd2Ugc2V0IHRoZW0ganVz
dCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKLSAg
ICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBj
b2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxs
IG9yIHN0cm9rZQotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VUaGlja25lc3NDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tu
ZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhp
Y2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
CisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoKnBsYXRmb3JtQ29udGV4dCgp
LCBzdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAor
ICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52
YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9
IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
eyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAgICAg
ICB9CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWly
bzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlU3R5bGUp
OwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRN
b2RlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwg
Y29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fp
cm86OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldENUTSh0cmFuc2Zv
cm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBDYWlybzo6U3RhdGU6OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRy
YW5zZm9ybSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhj
b25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQsIGNvbnN0IENvbG9yJikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsK
LSAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAvLyBN
ZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNl
IENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQgPSB7IG9mZnNldC53aWR0aCgpLCAtb2Zmc2V0LmhlaWdodCgpIH07Ci0g
ICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKICAgICBDYWlybzo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7CiAgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRl
eHQoKSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xlYXJSZWN0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBs
aW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fp
cm86OnN0cm9rZVJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBsaW5lV2lkdGgsIENhaXJv
OjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAobGluZUNhcCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJv
OjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgbGluZUNhcCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWly
bzo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9p
bikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4obGluZUpvaW4pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDYWlybzo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBsaW5lSm9pbik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0
YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGltaXQobWl0ZXIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWly
bzo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIG1pdGVyKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQpCi17Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIHdpbmRSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGNsaXBQYXRoKHBhdGgsIHdpbmRSdWxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmNsaXBPdXQoKnBs
YXRmb3JtQ29udGV4dCgpLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0
ZShmbG9hdCByYWRpYW5zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKGZsb2F0
IHJhZGlhbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJvdGF0ZShyYWRpYW5zKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgQ2Fpcm86OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIHJhZGlhbnMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNj
YWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8ICFjb2xvci5pc1ZhbGlkKCkpCisgICAgaWYgKCFjb2xvci5pc1ZhbGlk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxh
dGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
IG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0
aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBVTlVT
RURfUEFSQU0oc3BhY2luZyk7Ci0gICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgaW1hZ2UuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CisgICAgQ2Fpcm86OmRyYXdQYXR0
ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCitSZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZW5hYmxlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29u
dGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5j
ZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci19CisgICAgaWYgKCFmb250LnBs
YXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIGlmICghaGFzUGxhdGZv
cm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHhPZmZzZXQgPSBw
b2ludC54KCk7CisgICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBo
cyk7CisgICAgeworICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgICAgIGNhaXJv
R2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKKyAgICAgICAgICAg
IHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKyAgICAgICAgICAgIHlPZmZzZXQgKz0g
YWR2YW5jZXNbaV0uaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpOworICAg
IGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgpLnNj
YWxlZEZvbnQoKTsKKyAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpOworCisgICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQor
ICAgICAgICBmb250U21vb3RoaW5nID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwor
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENhaXJvOjpkcmF3R2x5cGhz
KG1fcGxhdGZvcm1Db250ZXh0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJv
a2VTb3VyY2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2lu
dCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQs
CisgICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBz
dGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAorICAgICAgICBmb250U21vb3Ro
aW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTJjYzFlZWMwNmQzMzM4OTRlYWRiOGIxZGU0NjZkNjdiYjEwMmFiYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdodCAoQykgMjAx
NyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNhaXJvX3Q7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1Db250ZXh0Q2Fpcm87CisKK2NsYXNzIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dENhaXJvIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4
dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhjYWlyb190Kik7CisgICAgdmlydHVhbCB+
R3JhcGhpY3NDb250ZXh0Q2Fpcm8oKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QgZmluYWw7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKworICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVK
b2luKSBmaW5hbDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworCisgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAg
ICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmlu
YWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworICAg
IHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsK
KyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBm
bG9hdCkgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2Nh
bGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVs
ZSkgZmluYWw7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7CisgICAgdm9p
ZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOwor
CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
cGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAg
ICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtQ29udGV4dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OworICAgIFBsYXRm
b3JtQ29udGV4dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjJh
MDQ4MTdiZmQ0ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0MzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNp
bmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0Lmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
R3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWly
by5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1w
bEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3Jt
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250
ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxDYWlybz4oY29udGV4dCwgcGxhdGZv
cm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5
KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW2NhaXJvQ29udGV4dF0oR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIGNhaXJvQ29udGV4dCk7Ci0g
ICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4
dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0g
ICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUo
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250
ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRl
KG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3Jt
Q29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjYWlyb190KiBjYWlyb0Nv
bnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVk
UGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJvQ29u
dGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkK
LSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBo
aWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmND
b250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86On5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQotewotICAgIG1fcGxhdGZvcm1Db250
ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAmbV9wbGF0Zm9y
bUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp1cGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6
c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25l
c3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxl
Q2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1D
b250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhp
Y3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0g
ICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZh
cyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0g
Y29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0
OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0
LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25D
aGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsK
LQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZv
cm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xlYXJTaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNl
dExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250
ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgQ2Fpcm86OnNldExp
bmVKb2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAg
Q2Fpcm86OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRp
ZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7
Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYWlybzo6c2F2ZSht
X3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHBy
ZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIENhaXJvOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVP
cGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNP
cGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBw
cmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgQ2Fpcm86OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3Bl
cmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUo
c3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBDYWlybzo6ZmlsbFJv
dW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwot
ICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVu
ZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKQotewotICAgIENhaXJvOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhv
bGVSZWN0LCB7IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBDYWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBm
aWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9r
ZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBh
dGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsKLSAg
ICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNh
aXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2lu
dC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
LSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZz
ZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAg
ICAgICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURh
dGEoKS5zY2FsZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNp
bmcoKSkKLSAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290
aGluZzsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAg
ICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNh
aXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRl
LnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwK
LSAgICAgICAgZm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXcoZ3JhcGhpY3NDb250ZXh0KCksIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVO
VVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UobV9wbGF0Zm9ybUNvbnRl
eHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0
aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBD
YWlybzo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2Uo
KS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAg
ICBDYWlybzo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRoaWNrbmVz
cywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Ip
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZSht
X3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxp
YXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewot
ICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURf
UEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4
dCwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3RzLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c2F2ZSgpCi17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9yZSgpCi17Ci0gICAgQ2Fpcm86OnJl
c3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ2Fpcm86OnRyYW5zbGF0
ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0
ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENh
aXJvOjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3Jt
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX3Bs
YXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6
Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6
Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNs
aXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUp
Ci17Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVs
ZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkK
LXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250
ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0g
ICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZv
cm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjphcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0
OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0Rldmlj
ZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThkYmJiZWEyNjdhYjA1NGMwZGZmMTQy
NTZjZjJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRJbXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwotCi1jbGFzcyBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1w
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCopOwotCi0gICAgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4dENhaXJvJik7
Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIGNhaXJvX3Qq
KTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQotICAgIGJvb2wg
aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0
Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0
KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGll
bnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwg
QmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYs
IGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9h
dCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQs
IGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25D
b2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7
Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBj
YW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVy
cmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fp
cm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1f
cGxhdGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
CmluZGV4IGQzN2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYzMzQ5MTE4Njg1ZDQuLmE1OGRkYjk2
ODI3NTJlNzk1MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2lu
Y2x1ZGUgIkNvbG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQuY3BwCmluZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUwNzYyNzVmNTIzZmE4MDcxZWEuLjli
NWMwYWQwNzQ0NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2lu
Y2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxj
YWlyby5oPgpAQCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6
OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJgogCiAgICAg
UmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQo
KSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2NvbnRl
eHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBH
cmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXRoQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGF0aENhaXJvLmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJmMDNjN2I2NWQwMzZkZGE4OTlmMGY5
MDFmLi4yYTE5ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4NzQ1M2RhYWYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAK
QEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1VuaXF1ZVB0ci5oIgogI2luY2x1ZGUg
IkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3ICs0MjEsNyBAQCBGbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpZiAoc3Ry
b2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxl
QXBwbGllcihnYyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBQYXRoOjpzdHJv
a2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChH
cmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3Jh
cGhpY3NDb250ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihn
cmFwaGljc0NvbnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGVmM2FjMmUx
MzcxYjhlMWM5MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZkYjFhZTA2NTc0YmRmODE1YzYxNjcw
ZTA2Y2I2NzdhMDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTU1LDE3ICs1NSwxMiBA
QCBzdGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0
LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29s
b3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDR0Nv
bnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9y
KSk7Ci19Ci0KIGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29u
dGV4dFJlZiBjb250ZXh0KQogewogICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChD
R0NvbnRleHRHZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4
dEdldEJhc2VDVE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5
IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxp
dHkpCitzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29yZUludGVycG9sYXRpb25RdWFsaXR5
KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsKICAgICBzd2l0Y2ggKHF1YWxpdHkp
IHsKICAgICBjYXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OgpAQCAtODIsNiArNzcsMzQgQEAg
c3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShD
R0ludGVycG9sYXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkRlZmF1bHQ7CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRpb25RdWFsaXR5IGNnSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2gg
KHF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAg
ICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9s
YXRpb25Ob25lOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAg
cmV0dXJuIGtDR0ludGVycG9sYXRpb25Mb3c7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6TWVkaXVtOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJw
b2xhdGlvbkhpZ2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsK
K30KKworc3RhdGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxsID0gbW9kZS5jb250YWlucyhUZXh0
RHJhd2luZ01vZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tlID0gbW9kZS5jb250YWlucyhUZXh0
RHJhd2luZ01vZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQorICAgICAgICBy
ZXR1cm4ga0NHVGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZpbGwpCisgICAgICAgIHJldHVybiBr
Q0dUZXh0RmlsbDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9rZTsKK30KKwogc3RhdGljIENHQmxl
bmRNb2RlIHNlbGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CkBA
IC0xNTYsMzUgKzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUo
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTQogICAgIHJldHVybiBr
Q0dCbGVuZE1vZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUlu
aXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0Nv
bnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewogICAgIGlmICghY2dDb250ZXh0KQog
ICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0
cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxD
b2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAg
IHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgaXQgc2V0cyBpdCBiYWNr
IG9uIHRoZSBHcmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBpdCBkb2Vzbid0IG1hdHRlcj8KKyAg
ICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yKCkpOworICAgIHNldFN0cm9rZUNvbG9yKHN0cm9rZUNv
bG9yKCkpOworICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CisgICAg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFs
aXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3ND
b250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0K
IAotQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
K2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7
CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1f
Y2dDb250ZXh0LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3Jt
U3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKCFw
YWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRo
aXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdh
bnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRl
eHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMTkyLDEwICsy
MTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1f
ZGF0YS0+c2F2ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJU
KCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3Qg
dXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNl
IHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25k
YXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAt
MjA0LDEwICsyMzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3Rh
dGUoKQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2Uo
Y29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2Ug
PSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAg
TW9ub3RvbmljVGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTI5OCw3
ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3Qg
UGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogCiAgICAgYXV0byBvbGRDb21wb3Np
dGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGF1dG8gb2xkQmxlbmRNb2Rl
ID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRp
b24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAg
ICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUg
b3JpZ2luIHRvIGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwpAQCAtMzI1LDEw
ICszNTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2FzQW50
aWFsaWFzZWQpOwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOworICAgICAgICBzZXRDb21wb3Np
dGVPcGVyYXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CiAgICAgfQog
Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHQ6
OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6
ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6
bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOworICAgIExPR19XSVRI
X1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJ
bWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8g
IiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFy
dFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3UGF0
dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMzM5LDcg
KzM2NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dD
b250ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEp
OwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKICNlbmRp
ZgotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4
dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGlt
YWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwg
R3JhcGhpY3NDb250ZXh0Q0coY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3Qo
MCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKIH0KIAogc3Rh
dGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQpAQCAtMzQ3LDE2ICsz
NzIsMTggQEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQog
ICAgIGNhbGxPbk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDR0ltYWdl
UmVmPihpbmZvKSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZv
cm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFn
ZS5wbGF0Zm9ybUltYWdlKCk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsK
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVj
dC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAt
NDIzLDE2ICs0NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVy
bihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRgogfQogCiAvLyBEcmF3cyBh
IGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMg
YW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAg
ICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4LDE5ICs0NzcsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMu
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNr
bmVzcygpOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVz
cyA9PSBwb2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5l
ID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKQEAg
LTUyNiwzMSArNTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgICAgIENHQ29u
dGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAg
IGRyYXdQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQ
YXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJh
bnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTU2NSwxNiArNTYwLDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgQ0dDb250
ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBh
dHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJu
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0
VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2LDE1ICs2MDMsMTAgQEAgc3RhdGlj
IGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7
CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpAQCAtNjU0LDE2ICs2MzYsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgfQog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0
ZS5maWxsR3JhZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzk0LDE2ICs3NjYsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtODMzLDcgKzc5Nyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYm
IGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtczsg
Ly8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3du
U2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25T
aGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENH
IHNoYWRvd3MuCkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRl
eHQsIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlm
IChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQs
IGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4
dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBk
cmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRy
YXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4g
b2ZmIENHIHNoYWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmls
bENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQog
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBib29sIGRyYXdP
d25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkg
JiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFkb3dC
bHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdN
b2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRv
dygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0
YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJh
d093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtOTI0LDE2
ICs4NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwogICAgICAgICBzZXRDR0ZpbGxDb2xv
cihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAog
ICAgIFBhdGggcGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dAogICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAvLyBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZSgpIGFzc3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVjdCBhcmUgY2xpcHBlZCBvdXQsIHNv
IHdlIG9ubHkgY2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJvdW5kIGluc2lkZSB0aGUgaG9sZS4K
LSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNC
bHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAg
Ym9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8v
IFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkxMywyOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENH
Q29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+
Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogVXNpbmcgQ0dSZWN0SW5m
aW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBjbGlwIGJvdW5kaW5nIGJveC4g
SG93ZXZlciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0
SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAog
ICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0
aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAg
IC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29sIGNhblVz
ZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0g
a0NHQ29udGV4dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVkQ29udGV4dCgpIHx8ICghY3RtLmIo
KSAmJiAhY3RtLmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRl
eHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVu
ZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigp
ICYmICFjdG0uYygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZp
bml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRm
b3JtQ29udGV4dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3Rz
LCAyKTsKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRS
ZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZv
cm1Db250ZXh0KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQpAQCAtMTAyMywxNiArOTQy
LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwg
Y2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CkBAIC0xMDQ5LDIz
ICs5NjAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50
UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQogICAgIHJldHVybiBlbmNsb3NpbmdJ
bnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBH
cmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICBz
YXZlKCk7CiAKQEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigp
OwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBD
R0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTEwODgsMTEgKzk4Nyw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkK
ICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIGFw
cGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBAIC0xMTAwLDcgKzk5NCw3IEBAIHN0
YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5V
U0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQorICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKENHQ29udGV4dERy
YXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQpA
QCAtMTEyMSwyMSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmth
cm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBz
ZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3Jh
cGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKG9mZnNldC5pc1plcm8o
KSAmJiAhYmx1cikgeworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4
dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBh
dm9pZCB0aGUgc2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBrbm93IHdlJ2xsIHJlbmRlciB0aGUg
c2hhZG93IG91cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9mZnNldCA9IG9mZnNldC53aWR0aCgp
OwogICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJs
dXJSYWRpdXMgPSBibHVyOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAKLSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAg
ICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CiAgICAg
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNv
bnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jh
c2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTExNTYsNyAr
MTA1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIg
dmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGlt
ZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJv
d1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29y
a2Fyb3VuZElmTmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBhcHBseVNoYWRv
d09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZz
ZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMg
dGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ug
c2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0x
MTY2LDUwICsxMDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRv
dyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgICAgIENHQ29u
dGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZz
ZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhD
b2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7Ci19CisgICAgYXV0byBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0
aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOwogCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRo
ZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JX
aXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikpOwogCi0g
ICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOwotfQor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hh
bmdlKSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9yKTsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQorICAgICAg
ICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpD
b21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVD
aGFuZ2UgfSkpCisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LCBzZWxlY3RD
R0JsZW5kTW9kZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CiAK
LSAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdl
KSkKKyAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERy
YXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQorICAgICAg
ICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU21vb3RoRm9udHNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhG
b250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisKKyAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0
LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
KTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
Q2hhbmdlKSkKKyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNoYWRvd09mZnNldCwg
bV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBD
R0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lk
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBDR0NvbnRleHRDbGVhclJlY3QocGxh
dGZvcm1Db250ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5z
dHJva2VHcmFkaWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0
TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGlu
ZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChjYXApIHsK
ICAgICBjYXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1D
b250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIsMTYgKzExODIsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKICAgICB9CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxv
YXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxl
bmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsg
KytpKQpAQCAtMTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAgICBDR0Nv
bnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRh
dGEoKSwgZGFzaGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4o
TGluZUpvaW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4o
am9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGpvaW4pIHsKICAg
ICBjYXNlIE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1D
b250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMzNSw5NCArMTIwOSw0MyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGZpbGxSdWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogICAgIG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5y
b3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Um90
YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAgICAgbV9kYXRhLT5yb3RhdGUoYW5n
bGUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3Jt
Q29udGV4dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKICAgICBtX2Rh
dGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29u
Y2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRl
eHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5j
b25jYXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9y
bSk7CiAgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJh
bnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRl
U2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJ
bmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwot
CiAgICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBl
eGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3Np
dGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgogICAg
IC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBj
YW4gdXNlIHRoaXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1NSw4IEBAIEFmZmluZVRyYW5zZm9y
bSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxl
KSBjb25zdAogICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICBy
ZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0K
ICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmlj
ZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9y
bSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlm
IHdlIGhhdmUgYQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxpa2UgdGhlIGhhbmRzIG9mIHRoZSB3
b3JsZCBjbG9jayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUgc2NhbGUsIHNvCkBAIC0xNDgyLDI3
ICsxMjk5LDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZsb2F0UmVj
dChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tl
U3R5bGUpCi17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwot
ICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJl
Y3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGlu
ZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAg
ICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9k
ZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lkdGhzLmxhc3QoKSwgdGhpY2tu
ZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTE1NTYsMTYgKzEzNTcsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9y
bUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5
cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxl
IHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZv
ciBkaXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVm
ID0gbGluay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJsUmVmKQogICAgICAgICByZXR1cm47
CkBAIC0xNTc5LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogICAgIENHUERG
Q29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgpLCBDR1JlY3RBcHBseUFm
ZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxl
ZCgpKTsKLQotICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSA9IGtDR0ludGVycG9s
YXRpb25EZWZhdWx0OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVm
YXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9O
b3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Ob25lOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAg
ICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93OwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJ
bnRlcnBvbGF0aW9uTWVkaXVtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVh
bGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8g
U2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAgICBBU1NFUlQobV9kYXRhKTsKICAg
ICBpZiAoaXNMYXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSArMTM4MiwyOCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogICAg
ICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xheWVyQ0dDb250ZXh0OwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBo
aWNzQ29udGV4dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9k
YXRhICYmIChtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNMYXllckNHQ29udGV4dCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNj
ZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4K
LSAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2NlbGVyYXRlZCkKICAgICAgICAgbV9k
YXRhLT5tX2NvbnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogICAgIGVsc2UK
ICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNBY2NlbGVyYXRlZENHQ29udGV4
dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29u
c3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yZW5kZXJpbmdNb2Rl
KCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5t
X2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyBtb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAotICAgIGJvb2wgZmlsbCA9IG1vZGUu
Y29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAgICBib29sIHN0cm9rZSA9IG1vZGUu
Y29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwotICAgIGlmIChmaWxsICYmIHN0cm9r
ZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRG
aWxsU3Ryb2tlKTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0
RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwotICAgIGVsc2UgaWYgKHN0cm9rZSkK
LSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRTdHJv
a2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNl
dENHU3Ryb2tlQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25lc3MsIDAuZikpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQo
KSwgZW5hYmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxk
U21vb3RoRm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQot
ICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFi
bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBh
bHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxw
aGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0Nv
bnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZvcm1Db250ZXh0KCksIHNlbGVjdENH
QmxlbmRNb2RlKGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpKTsKKyAgICByZXR1cm4gbV9k
YXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQgPyBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmlj
ZVNjYWxlRmFjdG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENU
TSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8g
aXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1
c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKQEAgLTE3NDcsMTMg
KzE0MTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxl
RmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAgIENHQ29udGV4dFNldEJhc2VDVE0o
cGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFz
ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZh
Y3RvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLQogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29s
aWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc2NCwx
MyArMTQyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdChj
b250ZXh0LCBlbGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBv
bmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVu
dCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0
aChlbGxpcHNlKTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dD
b250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Citib29sIEdyYXBo
aWNzQ29udGV4dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBG
bG9hdFJlY3QgcmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwxNSArMTQ1MSw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0RGVzdGluYXRpb25Gb3JSZWN0KGNv
bnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRSZWN0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxv
YXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBDR1BvaW50IHRy
YW5zZm9ybWVkUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENH
Q29udGV4dEdldENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZDb250ZXh0QWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRQ
b2ludCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2ZTJmMzg2OWUxZTdlMWY5ZTY2MjZi
ZWMyMDViYjBkYzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5MzYyMmNmZDFjMmVjNGYyODllIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9z
YXZlQW5kUmVzdG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250
ZXh0Q0coQ0dDb250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1v
dmVkLgorI2VuZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0Q0coKTsKKworICAgIGJvb2wgaGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0
b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4o
KSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZv
aWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOworCisgICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworCisgICAgdm9pZCBzZXRJc0NBTGF5
ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0
IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsK
KyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFs
OworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6
RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOworICAgIHZvaWQg
c2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9h
dCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFs
OworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworCisgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworCisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBj
b25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNlbmRpZgorCisgICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
LCBTdHJva2VTdHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCisg
ICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKworICAgIGJvb2wg
c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZp
bmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Cit9OworCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcAppbmRleCA1ZmZjZTEyZmVhMjE5ZjMxMDBhOGJlYjk2MjMzMDgwODc4Y2E3
YmE2Li42ODY1ZjBiZDQxYmI0ODQ2MGRiYTFmNGY2YmE1ODA3ODRjY2FlZTYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29u
dGV4dC5nZXQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRDRz4oY2dDb250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRD
RihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIGRhdGEsIG51bUJ5dGVzLCBb
XSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewogICAgICAgICBmYXN0RnJlZShj
b25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJiNGMxMmYwZTgyM2EwODhkMjVmYzE1
YWE4ODlhNDI3Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTMx
LDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTI0
NCw3ICsyNDQsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIENHQ29udGV4dEJlZ2lu
UGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0
aCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9r
ZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgYm9vbCBoaXRTdWNjZXNzID0g
Q0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2Up
OwpAQCAtMzA1LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgQ0dDb250
ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5
bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJu
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNw
cAppbmRleCA3NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVkZmRhYjIzZGY4MTM0Li4wNWEzOTE2
NTQwYmI3NmRhM2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTMwLDcgKzMwLDcgQEAK
ICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00Myw3ICs0
Myw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRS
ZWYgY29udGV4dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQ
aXhlbHMoCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0KS5yb3Vu
ZFRvRGV2aWNlUGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRo
KHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2UpKSk7CiAgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2Nh
ZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAwNjdmY2JhMTkzOWZhZTUxZWRjODc5
MmQ0Yy4uZTFlNWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQyMmZiNTgxY2Y3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2Nv
YS5tbQppbmRleCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4OTY4ODEzYTMwNTQzZjdkLi4zODhh
ZmNkNmY0NmFmYzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRl
eHRDb2NvYS5tbQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3RhdGljIHZvaWQgZHJhd0ZvY3VzUmlu
Z1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgK
ICAgICBkcmF3Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNOdWxsKCkpCisg
ICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRl
eHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIGNvbG9yKTsKIH0KIAog
I2lmIFBMQVRGT1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0
VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgYm9vbCBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNS
aW5nUGF0aCwgZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KHRpbWVPZmZzZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgpOwogICAgIHJldHVybiBkcmF3Rm9j
dXNSaW5nQXRUaW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCks
IGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051
bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgLy8gRklYTUU6IGltcGxl
bWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisgICAgaWYgKHBhdGguaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3ID0gZHJhd0ZvY3VzUmluZ1RvQ29u
dGV4dEF0VGltZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgdGltZU9m
ZnNldCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IC8vIEZJWE1FOiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5nLgotICAgICAg
ICByZXR1cm47Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gZm9jdXNSaW5nUGF0
aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8m
IHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQYXRoLmdldCgp
LCAwLCBDR1JlY3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJs
ZSB0aW1lTwogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9h
dCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBm
b2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAo
YXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGgu
Z2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsKQEAgLTE5OSwx
MSArMTc2LDggQEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JGb3JNYXJrZXJMaW5lU3R5bGUoRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIKICAgICB9CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2FudCB0byBmaW5kIHRoZSBudW1iZXIg
b2YgZnVsbCBkb3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBlcXVhdGlvbnM6CiAgICAgLy8gZG90
RGlhbWV0ZXIgPSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRlciAvIGRvdEdhcCA9IDEzLjI0NyAv
IDkuNDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UubW0KaW5kZXggNThjNTEyNGQ0YjZjNjEzNjRlOGQzNjk2ZjM0OTVmZGIyNjQ1OTdh
MC4uZTEzOGMzMjAxZGRlNjQ1MDA1Yjg2ZDBhOWY2MWE4ZjQwZjc0Njg3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAt
MzcxLDcgKzM3MSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9TdXJmYWNlOjplbnN1cmVHcmFwaGlj
c0NvbnRleHQoKQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJuICpt
X2dyYXBoaWNzQ29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBtX2dyYXBoaWNz
Q29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q0c+KGVuc3VyZVBsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
dHJ1ZSk7CiAKICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyMGRhZWY0YmI0
MWY1MDY0ZjNjMWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li4zZTU1MWI4NTc2NjY3NDQ4NTU4NTllYzk4
YjFlY2EwNjM1OWMyOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIK
KyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBVU0UoQ09SRV9URVhUKQogI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAgLTY4LDcgKzY5LDkgQEAgcHVibGlj
OgogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24o
KSBjb25zdCB7IHJldHVybiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsgfQogCiBwcml2YXRl
OgotICAgIEdyYXBoaWNzQ29udGV4dCBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNpZiBVU0Uo
Q09SRV9URVhUKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFs
Q29udGV4dCgpOworI2VuZGlmCiAKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKQEAgLTkxLDcgKzk0LDExIEBAIHByaXZh
dGU6CiAKICAgICBSZWNvcmRlciYgbV9vd25lcjsKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b24gbV9kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb247Ci0gICAgR3JhcGhpY3NDb250ZXh0IG1faW50
ZXJuYWxDb250ZXh0OworCisjaWYgVVNFKENPUkVfVEVYVCkKKyAgICBVbmlxdWVSZWY8R3JhcGhp
Y3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNlbmRpZgorCiAgICAgY29uc3QgRm9udCog
bV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9v
dGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5k
ZXggYzA0ODY1MmY5YjBlNjVhYjVjMmM5Y2U1OThiNTI3NzAyYzhhYTMzZC4uY2FjZjc2NGY1ZGUy
YzhjZjZkM2Y0MDAwMmZlYWY1ZTEyMTY5MWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5o
IgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKIAogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0
RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YQogICAgIHJldHVy
biBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCitVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBE
cmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiB7CiAgICAgYXV0byBj
b250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKHRoaXMpKTsK
ICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwg
ZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+
KCZiZWdpbkxheWVyKSk7CkBAIC04NCw3ICs4NSw3IEBAIEdyYXBoaWNzQ29udGV4dCBEcmF3R2x5
cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiAgICAgQ0dDb250ZXh0RGVsZWdh
dGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBocywgcmVpbnRl
cnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OmRyYXdHbHlwaHMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRl
eHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3SW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0
RGVsZWdhdGVDYWxsYmFjaz4oJmRyYXdJbWFnZSkpOwogICAgIGF1dG8gY29udGV4dCA9IGFkb3B0
Q0YoQ0dDb250ZXh0Q3JlYXRlV2l0aERlbGVnYXRlKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwga0NH
Q29udGV4dFR5cGVVbmtub3duLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIEdyYXBo
aWNzQ29udGV4dChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAKIERyYXdHbHlwaHNSZWNvcmRlcjo6
RHJhd0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lciwgRHJhd0dseXBoc0RlY29uc3RydWN0
aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTExOSwzNCArMTIwLDMxIEBAIHZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIGNvbnRlCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRl
cm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKIHsK
ICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlmIChtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxs
R3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3Jh
ZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBh
dHRlcm4pOwogICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKQot
ICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAg
fQogCiAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0
ZS5zdHJva2VTdHlsZS5jb2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJv
a2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOwogICAgIGVsc2UgaWYg
KG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5h
bENvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQo
bV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAobV9vcmln
aW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVy
bik7CisgICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgIH0KIAotICAgIG1faW50ZXJu
YWxDb250ZXh0LnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKKyAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwogCi0gICAgbV9pbnRlcm5hbENvbnRl
eHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25v
cmVUcmFuc2Zvcm1zKTsKLSAgICBpZiAoY29udGV4dFN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRp
dXMpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX29yaWdpbmFs
U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdp
bmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0
YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKKyAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hh
ZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93
LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dS
YWRpdXNNb2RlKTsKIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShj
b250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwogfQogCiB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBm
b250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtMzAyLDcgKzMwMCw3IEBA
IHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3Rh
dGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIHJldHVybjsKIAogI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24o
bV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIGF1dG8gdGV4dFBvc2l0
aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7CiAgICAgQVNTRVJUKCF0
ZXh0UG9zaXRpb24ueSk7CiAjZW5kaWYKQEAgLTMyMSw3ICszMTksNyBAQCB2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0
ZVJlZiBnc3RhdAogICAgIC8vIElmIHlvdSBzZXQgdGhlc2UgdHdvIGVxdWFsIHRvIGVhY2ggb3Ro
ZXIsIGFuZCBzb2x2ZSBmb3IgWCwgeW91IGdldAogICAgIC8vIENUTSAqIGN1cnJlbnRUZXh0TWF0
cml4ID0gQ1RNICogWCAqIG1fb3JpZ2luYWxUZXh0TWF0cml4CiAgICAgLy8gY3VycmVudFRleHRN
YXRyaXggKiBpbnZlcnNlKG1fb3JpZ2luYWxUZXh0TWF0cml4KSA9IFgKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gY3VycmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJu
YWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVu
dFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJuYWxDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bUZpeHVwOwogICAgIGlm
IChhdXRvIGludmVydGVkT3JpZ2luYWxUZXh0TWF0cml4ID0gbV9vcmlnaW5hbFRleHRNYXRyaXgu
aW52ZXJzZSgpKQogICAgICAgICBjdG1GaXh1cCA9IGN1cnJlbnRUZXh0TWF0cml4ICogaW52ZXJ0
ZWRPcmlnaW5hbFRleHRNYXRyaXgudmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCA1NGQ4NTQ3MTIzZjg5NDdkNmYyZmFjZDdm
Y2E2Zjk5NTE4MWEyNjcxLi4zOTU3YzQ1NzZmZTkxMmQ2ODEwMjA3NjEwMDFjYzI0ZjY4Njg4NjJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
CkBAIC0zNCw5ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5
TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIFJlY29yZGVy
OjpEZWxlZ2F0ZSogZGVsZWdhdGUpCi0gICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4
dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29y
ZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0
YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVsZWdhdGUp
OwotICAgIH0pCisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0
ZSkKIHsKIH0KIApAQCAtNDYsMTMgKzQ0LDYgQEAgdm9pZCBEcmF3aW5nQ29udGV4dDo6c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKICAgICBt
X3JlcGxheWVkRGlzcGxheUxpc3QucmVzZXQoKTsKIH0KIAotUmVjb3JkZXImIERyYXdpbmdDb250
ZXh0OjpyZWNvcmRlcigpCi17Ci0gICAgYXV0byogZ3JhcGhpY3NDb250ZXh0SW1wbCA9IGNvbnRl
eHQoKS5pbXBsKCk7Ci0gICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dEltcGwpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxSZWNvcmRlciY+KCpncmFwaGljc0NvbnRleHRJbXBsKTsKLX0KLQogdm9p
ZCBEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCkKIHsKICAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAppbmRleCBkMzdjMDczNWJlYjU1
NDkyZDkwZmY5ZWNlNGNhNGRiNzk5NWQ1ZjU4Li5kOTVkZGRlZjg1NzUyOGM4Mjc5ZTRmMWVmYmYy
ZDI1ODhmNmNhNGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKQEAgLTM5LDggKzM5LDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQgewogcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgUmVjb3Jk
ZXI6OkRlbGVnYXRlKiA9IG51bGxwdHIpOwogCisgICAgLy8gRklYTUU6IERlZHVwbGljYXRlIHRo
ZXNlLgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgUmVjb3JkZXImIHJlY29yZGVyKCk7CisgICAgUmVjb3JkZXImIHJlY29yZGVyKCkgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9OwogICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsg
cmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBE
aXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9
CkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxh
eURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR3JhcGhp
Y3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBSZWNvcmRlciBtX2NvbnRleHQ7CiAgICAgRGlzcGxh
eUxpc3QgbV9kaXNwbGF5TGlzdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1vcnlEaXNwbGF5
TGlzdD4gbV9yZXBsYXllZERpc3BsYXlMaXN0OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5k
ZXggMWE0ZWE2ZGUzYjVhOGNlMzVkOGU3NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIyMmUyMTgzYTM5
MTAzYmQ2OTg1MzQ0NjRkZjNjYjBhOGZmOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmNwcApAQCAtNjA1LDExICs2MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAKIHZvaWQgRHJh
d1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSNpZiBVU0Uo
Q0cpCiAgICAgY29udGV4dC5kcmF3UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJ
dGVtcy5oCmluZGV4IDA3NDA0MWYyNmExZTk2NGRjNGM3NmY0ODJiYzRjOTkzZTg3ZWUzMTUuLmYx
MTdjZmE4MzkzNjA4OWU3MWZkMDVhYjc4NjQ4YmQyNDhkNWU3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaApAQCAtMjc5LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3N0cm9rZVBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogICAgIFJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fZmlsbFBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogCi0gICAg
c3RhdGljIHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwot
Ci0gICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29k
ZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8
U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTMzNSw5ICszMzEsNyBAQCB2b2lkIFNl
dFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1
cjsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBVU0UoQ0cpCi0g
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAv
LyBVU0UoQ0cpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAg
ICB9CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC00NjMsMTQgKzQ1NywxMiBAQCBPcHRpb25hbDxT
ZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiAgICAgICAgIHN0
YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAKLSNpZiBVU0Uo
Q0cpCi0gICAgICAgIE9wdGlvbmFsPGJvb2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0gICAg
ICAgIGRlY29kZXIgPj4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgaWYgKCFzaGFk
b3dzVXNlTGVnYWN5UmFkaXVzKQorICAgICAgICBPcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBz
aGFkb3dSYWRpdXNNb2RlOworICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7Cisg
ICAgICAgIGlmICghc2hhZG93UmFkaXVzTW9kZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFk
aXVzID0gKnNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENHKQorICAgICAg
ICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dS
YWRpdXNNb2RlKTsKICAgICB9CiAKICAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDY5NDQ4MjhkZmM2
NGI4NzRiOTM3Y2VlYWRmMmFlZGMyYTY3MzgxMTUuLjMxMTFiOTE3MTMwMjAwZjkxZjFkODFiZGFm
ZjBiNGMwNmFmNGU5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAKQEAgLTMzLDE1ICszMywxNSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0gICAgOiBHcmFw
aGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0
KQorUmVjb3JkZXI6OlJlY29yZGVyKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwgRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29u
c3RydWN0aW9uKQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKICAgICAsIG1fZGVs
ZWdhdGUoZGVsZWdhdGUpCiAgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQogICAgICwgbV9kcmF3R2x5
cGhzUmVjb3JkZXIoKnRoaXMsIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTUwLDkgKzUw
LDggQEAgUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmEKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsg
c3RhdGUsIGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOwogfQogCi1SZWNvcmRlcjo6UmVjb3Jk
ZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IEdyYXBoaWNzQ29udGV4dElt
cGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCitS
ZWNvcmRlcjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rpc3Bs
YXlMaXN0KQogICAgICwgbV9kZWxlZ2F0ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAgICAsIG1faXNO
ZXN0ZWQodHJ1ZSkKICAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBwYXJlbnQubV9k
cmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKCkpCkBAIC0xNjYsMTEg
KzE2NSw2IEBAIFJlbmRlcmluZ01vZGUgUmVjb3JkZXI6OnJlbmRlcmluZ01vZGUoKSBjb25zdAog
ICAgIHJldHVybiBtX2RlbGVnYXRlID8gbV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9kZSgpIDogUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFk
b3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQogdm9pZCBSZWNvcmRlcjo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgYXBwZW5kPFNldExpbmVDYXA+KGxp
bmVDYXApOwpAQCAtMjA2LDYgKzIwMCwxMSBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmREcmF3R2x5
cGhzSXRlbVdpdGhDYWNoZWRGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQgogCiB2
b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdl
QnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAgIC8vIEZJWE1F
OiBUaGlzIGZlZWxzIG9kZCwgYnV0IGlzIHdoYXQgdXNlZCB0byBoYXBwZW4uCisgICAgaWYgKCFj
YW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9kaXNwbGF5TGlzdC5jYWNoZUltYWdl
QnVmZmVyKGltYWdlQnVmZmVyKTsKICAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1
ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOwogfQpAQCAtMjcwLDcgKzI2OSw3IEBAIHZvaWQgUmVjb3JkZXI6OnNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zv
cm0pOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAogewogICAgIC8vIEZJ
WE1FOiBSZXNwZWN0IHRoZSBnaXZlbiB2YWx1ZSBvZiBJbmNsdWRlRGV2aWNlU2NhbGUuCiAgICAg
cmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKQEAgLTI5OCw4ICsyOTcsOSBAQCB2b2lkIFJlY29y
ZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKICAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotdm9p
ZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogeworICAgIC8v
IEZJWE1FOiBXaHkgaXMgc3Ryb2tlU3R5bGUgbm90IHVzZWQ/CiAgICAgYXBwZW5kPERyYXdMaW5l
c0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIApAQCAtMzI4LDYgKzMyOCwxOCBAQCB2
b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVj
dHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQg
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0
IENvbG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFJlY29yZGVyOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29u
c3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBS
ZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGFwcGVuZDxG
aWxsUmVjdD4ocmVjdCk7CkBAIC00NDAsMTAgKzQ1Miw5IEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZDxDbGlw
UGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRz
KCkKK0ludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIFdURkxvZ0Fs
d2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBEaXNw
bGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0
MDk2LCA0MDk2KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5j
bGlwQm91bmRzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtNDUyLDM1
ICs0NjMsMzQgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QKICAgICBhcHBlbmQ8Q2xpcFRvSW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9y
U3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9u
KQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVjb3JkZXI6
OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4dCBu
ZXN0ZWRDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgYXV0
byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUo
KSk7CisgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3Rp
bmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1h
Z2VCdWZmZXIncyBpbml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9y
bSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUp
OwotICAgICAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFu
c2Zvcm0ueVNjYWxlKCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZEludFNp
emUoZGVzdGluYXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gaW5pdGlhbENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0gICAg
ICAgIGluaXRpYWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAg
ICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgor
ICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpE
ZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3Io
dHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVk
U2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7
CisgICAgQWZmaW5lVHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgx
LCAtMSk7CisgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkp
OworICAgIGluaXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7
CiAKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29yZGVy
KCp0aGlzLCBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgaW5p
dGlhbENUTSkpOwotICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMsIEdy
YXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBhcHBl
bmQ8QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlKTsK
ICAgICBkcmF3aW5nRnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENsaXBU
b0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVPKQot
Ym9vbCBSZWNvcmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJiBw
bGF5ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAgICBy
ZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYgRU5B
QkxFKFZJREVPKQogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFwbGF5
ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZv
ck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAg
IEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1l
ZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjcsNyBAQCBGbG9hdFJl
Y3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
IGNvbnN0CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dSYWRp
dXM7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAg
aWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7
CiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRv
d0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRl
KHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTUsNiBA
QCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJldHVy
biBjdXJyZW50U3RhdGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNs
aXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRz
OwotfQotCiB2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQogewogICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuaAppbmRleCBiODc2ZDZhZGI1MTQ3M2YxZjMwYWFiZGMyYmEyNWFhM2I2
MDI0MTliLi4wZDg2NjFjMTc5YzdjYTljN2M5ZDIxZjE5NDM0MGM5N2JiOTk0NWQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNs
dWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgog
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBJ
bWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3Mg
UmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRlciA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFzcyBE
ZWxlZ2F0ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBE
aXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0
ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5
cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOworICAg
IFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3Jk
ZXIoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4
ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7
CkBAIC03NywxNSArNzcsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBEcmF3R2x5cGhzUmVjb3JkZXI7Ci0gICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOworICAg
IFJlY29yZGVyKFJlY29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
Y29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0
aWFsQ1RNKTsKIAogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFn
ZUJ1ZmZlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhp
cz8KKyAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0
OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAg
ICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBp
c0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZvaWQg
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxl
KSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRlOwpA
QCAtMTA1LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwogCi0jaWYgVVNFKENHKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyMCwxNCArMTI5LDIwIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBT
dHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCiAgICAgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3Vi
bGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7
CisjZW5kaWYKKwogICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgp
IG92ZXJyaWRlOwogCkBAIC0xMzYsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIG92
ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTE0
NSwxMiArMTYwLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIElu
dFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlk
ZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRl
eHQmKT4mJikgb3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBv
dmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXll
ciYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpAQCAtMTczLDcgKzE4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5s
b2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBpZiAoYXV0byByZWN0
ID0gaXRlbS5sb2NhbEJvdW5kcygqdGhpcykpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlz
dC5hZGREcmF3aW5nSXRlbUV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMoKnJlY3QpKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCiAgICAg
ICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CkBA
IC0xOTUsNyArMjEwLDYgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2Fs
Qm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkg
Y29uc3Q7CiAKICAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKICAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIGN0bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Db2xvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xv
ck1hYy5tbQppbmRleCA2NWJjYTY3MGY5Mjg2ZDI1YTE5NTE5MjFiODVmMGEwNWEwMTUyZDUxLi44
OWQ4ODJjNTdmNDc2MWU1NDZkZDQyNDcwMWYzM2QyZmIyMDMxZjM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBVU0UoQVBQS0lUKQogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0IDx3dGYvQmxv
Y2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0xvY2suaD4KQEAgLTg1LDcgKzg2LDcg
QEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tTlND
b2xvcihOU0NvbG9yICpjb2xvcikKICAgICAgICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VSZXA+
IG9mZnNjcmVlblJlcCA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0
aEJpdG1hcERhdGFQbGFuZXM6bmlsIHBpeGVsc1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAgICAg
ICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQbGFu
YXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93OjQg
Yml0c1BlclBpeGVsOjMyXSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGJpdG1hcENvbnRl
eHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpv
ZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENH
IGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRt
YXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CiAgICAgICAgIExvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoYml0bWFwQ29udGV4dCk7CiAKICAg
ICAgICAgW2NvbG9yIGRyYXdTd2F0Y2hJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5k
ZXggY2U3YWJkN2I0ZTk1ZWViMzg5NmFlNWQ5YjNjYTRkMWNlMGZlYjllZi4uNTU0ODBiNTJiOTFl
MDI4NjJmZjBiZmMxMzA2ZGE4MGQ2MDNjNTQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9y
dCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGlj
c0xheWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6
Q29yZS9RdWFydHpDb3JlLmg+CkBAIC01MSw3ICs1MSw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4
dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCopc2Vs
Zik7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyOjpSZXBhaW50UmVjdExpc3QgcmVjdHNUb1BhaW50ID0gV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyOjpjb2xsZWN0UmVjdHNUb1BhaW50KGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCkp
OwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRzKGdy
YXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCksIHJlY3RzVG9QYWludCwgc2VsZi5pc1JlbmRlcmlu
Z0luQ29udGV4dCA/IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludFNuYXBzaG90dGluZyA6IFdl
YkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludE5vcm1hbCk7CiAgICAgfQpAQCAtMTI4LDcgKzEyOCw3
IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAg
ICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93bmVyKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBncmFwaGlj
c0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5jcHAKaW5kZXggZjMyNzY0MzY4NTFjYzdlMDFkNDcwYzU3MGQ5ZDlmMDZjMjNkNWZjNS4u
ZTgwNzY4NTk4MjljNDJmZTE4MWMxZWMwNzNjYzdjZjc2NjFkZjk1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTcy
LDkgKzcyLDggQEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6
OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxUPigpOwogfQogCi1DYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5k
TGlzdCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fY29tbWFu
ZExpc3QoY29tbWFuZExpc3QpCitDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCisgICAgOiBtX2NvbW1h
bmRMaXN0KGNvbW1hbmRMaXN0KQogewogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsg
fSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0KQEAgLTE1NCwxMCArMTUzLDYgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXAKICAgICB9CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewogICAgIHN0cnVjdCBTZXRMaW5lQ2Fw
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNhcD4gewpAQCAt
MjUwLDcgKzI0NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC0y
NzAsNyArMjY1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJv
OjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCkBAIC0yOTIsNyArMjg3LDcg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBn
cmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pKSk7CiB9CiAKQEAgLTMxNiw3ICszMTEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLAog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxl
bmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
cikpOwogfQogCkBAIC0zNDYsNyArMzQxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9yLCBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9
CiAKQEAgLTM2Nyw3ICszNjIsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogICAgIH07CiAK
ICAgICBVTlVTRURfUEFSQU0oY29sb3IpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dT
dGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zODYsNyArMzgxLDcgQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RmlsbFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00MDgsNyArNDAzLDcgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQyOCw3ICs0MjMsNyBAQCB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgs
IENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
CiB9CiAKQEAgLTQ0OCw3ICs0NDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgs
IENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
CiB9CiAKQEAgLTQ3MCw3ICs0NjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxs
aXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTIzLDcgKzUxOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckds
eXBoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSksIHBvaW50LAogICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0
Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLApAQCAtNTUzLDcgKzU0OCw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFn
ZSwgY29uc3QgRmxvCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUlt
YWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTkz
LDcgKzU4OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVj
dD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02MTMsMTEgKzYwOCwxMSBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQy
LCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNr
bmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0
cm9rZVN0eWxlKQogewogICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRp
bmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwg
Ym9vbCwgYm9vbCwgQ29sb3I+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgp
ID0gZGVmYXVsdDsKQEAgLTYzMyw3ICs2MjgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIH0KIApAQCAt
NjcyLDE0ICs2NjcsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5nIGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENvbG9y
PiB7CkBAIC05MDMsNyArODk0LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgc3RhdGUuY3RtSW52ZXJz
ZSA9IGludmVyc2UudmFsdWUoKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0Fm
ZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGVTdGFj
ay5sYXN0KCkuY3RtOwogfQpAQCAtMTAzMiw3ICsxMDIzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkK
ICAgICB9CiB9CiAKLUludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygp
CitJbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewog
ICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKICAgICByZXR1cm4gZW5jbG9z
aW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJvdW5kcykpOwpA
QCAtMTA3NiwxNSArMTA2NywxNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGVu
ZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1fY29t
bWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYp
PiYmKQorV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1
bHQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAg
ICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCiAjaWYg
RU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVk
LgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGlu
YXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCAzMDhmMWZmNjM2NTZhZGE0MDlmMGQ1ZjUwMzZi
YzkxZTI1ZDdiNmQyLi43N2FlNTBkZjA0OTJkM2FiZjg4ZmRmN2M1YzMzOTk3Mjc3YmJjNWJhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJv
L05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5oCkBAIC0yOCwyMSArMjgsMjAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIAot
Y2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIgZmluYWwgOiBw
dWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKLSAgICBDYWlyb09wZXJh
dGlvblJlY29yZGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFBhaW50aW5nT3BlcmF0aW9u
cyYpOworICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJik7CiAK
IHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB2b2lkIHVw
ZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3Jl
OjpMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6
OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKQEAgLTUzLDYgKzUyLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJD
b3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgfQogICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6
Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgm
KSBvdmVycmlkZTsKQEAgLTcwLDEwICs3MCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdS
ZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJh
eSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpE
YXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpD
b2xvciYpIG92ZXJyaWRlOwpAQCAtODYsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2Nh
bGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25jYXRD
VE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBz
ZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
IGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92
ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTk1
LDEyICs5NCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0
aCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdl
YkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3Vu
ZHMoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVy
JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRz
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkRl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Jik+JiYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlh
KGNvbnN0IFdlYkNvcmU6Ok1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KICNlbmRpZgogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4
dENhaXJvLmNwcAppbmRleCAwMDExMDBmNzc3ODFlNGNmNWI4YzFkODdhMmM2YzM3Y2NlOGFhZjU0
Li40OWFiY2FhNDUyNTMxNDUzODRiMzU1ODg0Njg2N2UwY2ZiZDA2YWQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWlu
dGluZ0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMiw3
ICszMiw3IEBACiAjaWYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCiAjaW5jbHVkZSAi
Tmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRp
bmdPcGVyYXRpb25SZXBsYXlDYWlyby5oIgpAQCAtNzEsNyArNzEsNyBAQCBQYWludGluZ0NvbnRl
eHRDYWlybzo6Rm9yUGFpbnRpbmc6OkZvclBhaW50aW5nKEJ1ZmZlciYgYnVmZmVyKQogCiAgICAg
bV9jYWlyby5jb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY2Fpcm8uc3VyZmFjZS5n
ZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRDYWlybz4obV9jYWlyby5jb250ZXh0LmdldCgpKTsKLSAgICBtX2dyYXBoaWNz
Q29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PihXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoKm1fcGxhdGZvcm1Db250ZXh0
KSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvPigqbV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBQYWludGluZ0NvbnRleHRD
YWlybzo6Rm9yUGFpbnRpbmc6On5Gb3JQYWludGluZygpCkBAIC0xMDQsMTEgKzEwNCw3IEBAIHZv
aWQgUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpyZXBsYXkoY29uc3QgUGFpbnRp
bmdPcGVyYXRpb25zJiBwYWludGluCiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRp
bmc6OkZvclJlY29yZGluZyhQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW5nT3BlcmF0aW9ucykK
IHsKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PigKLSAgICAgICAgWyZwYWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4oY29udGV4dCwgcGFpbnRpbmdPcGVyYXRpb25zKTsK
LSAgICAgICAgfSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI+KHBhaW50aW5nT3BlcmF0aW9ucyk7CiB9CiAKIFBhaW50aW5nQ29udGV4
dENhaXJvOjpGb3JSZWNvcmRpbmc6On5Gb3JSZWNvcmRpbmcoKSA9IGRlZmF1bHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dENHV2luLmNwcAppbmRleCA4MzBhZWQwODIyZjU3NWQ1MmM4YmRiZDFjZTI4MmI4ZWJh
N2Q1MGJiLi4wZjlkODcyOWU3MWRkNDJlODBlNTllZWIzOGJhODFjMDRiZWNmM2ZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRDR1dpbi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKQEAgLTY3LDMyICs2
NywxOSBAQCBzdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gQ0dDb250ZXh0V2l0aEhEQyhI
REMgaGRjLCBib29sIGhhc0FscGhhKQogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhp
Y3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCisg
ICAgOiBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEpKQog
ewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQotewotICAgIGlmICgh
aGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpOwogICAgIG1f
ZGF0YS0+bV9oZGMgPSBoZGM7Ci0gICAgaWYgKG1fZGF0YS0+bV9jZ0NvbnRleHQpIHsKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRl
LgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAgIHNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQogfQogCiAvLyBGSVhN
RTogSXMgaXQgcG9zc2libGUgdG8gbWVyZ2UgZ2V0V2luZG93c0NvbnRleHQgYW5kIGNyZWF0ZVdp
bmRvd3NCaXRtYXAgaW50byBhIHNpbmdsZSBBUEkKIC8vIHN1aXRhYmxlIGZvciBhbGwgY2xpZW50
cz8KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywg
Y29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBi
b29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAo
IWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAgICAgIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTExMCw3ICs5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2lu
ZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRB
bHBoYUJsZW5kID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxw
aGFOb25lU2tpcEZpcnN0KSkpOwogCiAgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSkpOwotICAgIENHQ29udGV4dERy
YXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7
CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2Nn
Q29udGV4dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2UuZ2V0KCkpOwogICAgIAogICAgIC8vIERlbGV0
ZSBhbGwgb3VyIGp1bmsuCiAgICAgOjpEZWxldGVEQyhoZGMpOwpAQCAtMTI0LDIxICsxMTEsMTgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAq
IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG8KICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRh
KGltYWdlRGF0YS5nZXQoKSkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUo
KS5oZWlnaHQoKSwgOCwgMzIsIGltYWdlLT5ieXRlc1BlclJvdygpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRh
dGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwot
ICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5z
aXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKKyAgICBDR0NvbnRleHREcmF3SW1h
Z2UoZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5z
aXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBG
SVhNRTogVGhpcyBpcyBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcgZnVuY3Rpb24gaW4gR3JhcGhpY3NDb250ZXh0TWFjLm1tLgogLy8gVGhlIGNv
ZGUgY291bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHRDRy5jcHAgYW5kIGJlIHNoYXJlZC4KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBmbG9hdCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDIuMGY7CiAgICAgb2Zmc2V0ICs9IHJhZGl1
czsKICAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8gY2FjaGVkQ0dD
b2xvcihjb2xvcikgOiBudWxscHRyOwpAQCAtMTY0LDExICsxNDgsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHdpZHRoLAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0eWxlLm1vZGUgIT0gRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nICYmIHN0eWxlLm1vZGUgIT0gRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjQ0LDUgKzIyNSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1
c2goKQogICAgIENHQ29udGV4dEZsdXNoKG1fY2dDb250ZXh0LmdldCgpKTsKIH0KIAorR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDRzo6ZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQorCiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCmluZGV4IGYxNDQyNTcyY2M2ZDFkNTRi
YmVlNThiZGJjMzZlZGY3NzRhYWJiNjQuLmY4MjRmMzFmYzI4ZjJiZjFjNjU0MzFiOWZjOTlkYTY3
OTVhMDliYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRElCUGl4ZWxE
YXRhLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8t
d2luMzIuaD4KQEAgLTEyNyw5ICsxMjcsOSBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9Db250
ZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERJQgogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0
IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9vbCBj
cmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVu
Y3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhZGVwcmVjYXRl
ZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAg
IGlmICghaGRjIHx8ICFjcmVhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fZGF0YS0+cmVzdG9yZSgp
OworICAgICAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xNzgsNCArMTc4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OmZsdXNoKCkKIH0KICNlbmRpZgogCitHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDI5YTgyYTg5NzgyMjliMGY1ODczYWJk
ZjgyYmZhZjgwNmNmMTY1OTguLmUzYzZmN2M2MjRhZTZmOTk1ODI3MzRiMGY4ODljOGZmMDZhMTg2
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcApAQCAtNDcsMTcgKzQ3LDE3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFw
aGljc0NvbnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQo
aGRjLCBoYXNBbHBoYSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhE
QyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9v
bCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHQoSERD
IGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29s
IGhhc0FscGhhKQogewogICAgIC8vIENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQuCiAgICAgYXV0
byB0YXJnZXRQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsK
IAotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CisgICAg
SFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwogICAg
IFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgKCpyZW5kZXJUYXJnZXQpLT5C
aW5kREMoaGRjLCAmcmVjdCk7CkBAIC02NywxMiArNjcsMTIgQEAgR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdl
dCwgUkUKICAgICBtX2RhdGEtPm1faGRjID0gaGRjOwogfQogCi1HcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKK0dyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5k
ZXJlclR5cGUpCiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBy
ZW5kZXJlclR5cGUpOwogfQogCi1JRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVt
RmFjdG9yeSgpCitJRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1G
YWN0b3J5KCkKIHsKICAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBu
dWxscHRyOwogICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7CkBAIC04OSw3ICs4OSw3IEBAIElE
MkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKICAgICByZXR1cm4g
ZGlyZWN0MkRGYWN0b3J5OwogfQogCi1JRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0
OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKK0lEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiB7CiAgICAgc3RhdGljIElEMkQxUmVu
ZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKICAgICBpZiAoIWRlZmF1
bHRSZW5kZXJUYXJnZXQpIHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBJRDJEMVJlbmRlclRhcmdldCog
R3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gZGVmYXVs
dFJlbmRlclRhcmdldDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChI
REMgaGRjLCBib29sIGhhc0FscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxh
dGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgaWYgKCFoZGMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEzNiwxMiArMTM2LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICAvLyBGSVhNRTogbV9zdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5
KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBs
YXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQogewog
ICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlOjpHUFVNZW1vcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwg
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIXBs
YXRmb3JtQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDE2ICsxNTUsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCog
cGxhdGZvcm1Db250ZXh0LCBCaXQKICAgICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldElu
dGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5H
cmFwaGljc0NvbnRleHREaXJlY3QyRCgpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKK1BsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJs
ZWQoKSk7CiAgICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgpOwogfQogCkBAIC0x
OTUsMzMgKzE5MiwyOCBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmN1
cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWxwaGE7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogICAgIERpcmVjdDJEOjpzYXZlKCpwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKIHsKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZSgpOwogICAgIERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBDT01QdHI8SUQyRDFC
aXRtYXA+JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3Qy
RDo6ZHJhd05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBpbWFnZVNp
emUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2lu
ZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0
QWxwaGFCbGVuZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VXaW5kb3dz
Q29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBo
YUJsZW5kKQogewogICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5t
X2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNyZWF0ZWRCaXRtYXAp
IHsKLSAgICAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgRGlyZWN0
MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTI2MiwzNCArMjU0LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgOjpEZWxl
dGVEQyhoZGMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAo
V2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdl
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CisgICAgRGlyZWN0MkQ6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKIH0KIAot
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiAgICAg
OiBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlw
ZShyZW5kZXJpbmdUeXBlKQogewogICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAg
aWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIAot
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxh
dGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
IHJlbmRlcmluZ1R5cGUpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogICAgIDogbV9vd25lZFBs
YXRmb3JtQ29udGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkKICAgICAsIG1fcGxh
dGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJlclR5
cGUocmVuZGVyaW5nVHlwZSkKQEAgLTI5Nyw3ICsyOTAsNyBAQCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9w
dHI8UAogICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAgaWYgKG1fcmVuZGVyZXJU
eXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIApAQCAtMzEwLDkgKzMwMyw4
IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSgpCiAgICAgICAgIGVuZERyYXcoKTsKIH0KIAotSUQyRDFTb2xpZENvbG9yQnJ1
c2gqIEdyYXBoaWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQor
SUQyRDFTb2xpZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhD
b2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmJydXNoV2l0aENvbG9yKGNvbG9y
V2l0aEdsb2JhbEFscGhhKGNvbG9yKSkuZ2V0KCk7CiB9CiAKQEAgLTM3Miw3MyArMzY0LDYwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGUp
CiB7CiB9CiAKLUQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFs
cGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK0QyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25z
dAogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0Pigp
OwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEds
b2JhbEFscGhhKCkpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNv
bGlkU3Ryb2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZFN0cm9rZUJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29u
dGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGlj
c0NvbnRleHQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1
cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoLmdldCgpOwogfQogCi1J
RDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdAorSUQy
RDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25z
dAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdl
dCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5EcmF3KCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5EcmF3KCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmREcmF3KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmVuZERyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmVuZERyYXcoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKIHsKICAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0
dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0
dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0
dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKICAgICBEaXJlY3QyRDo6
ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIEludFNp
emUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsK
IH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvcik7CiB9CkBAIC00OTAsNTIgKzQ2OSwyOSBAQCBEMkQxX1NUUk9LRV9T
VFlMRV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3Ryb2tlU3R5
bGVQcm9wZXJ0aQogICAgIHJldHVybiBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9wbGF0
Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxh
dGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lSm9pbiwgbV9w
bGF0Zm9ybUNvbnRleHQubV9taXRlckxpbWl0LCBEMkQxX0RBU0hfU1RZTEVfU09MSUQsIDAuMGYp
OwogfQogCi1JRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tl
U3R5bGUoKSBjb25zdAorSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnN0cm9rZVN0eWxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5bGUoKTsKIH0KIAogLy8g
VGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQyKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
PT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd0xpbmUoKnBsYXRmb3JtQ29udGV4
dCgpLCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdFbGxpcHNlKHJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6Zmls
bEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRl
LnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAv
LyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIApAQCAtNTQzLDEx
ICs0OTksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0
YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0dGVybkFs
cGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZp
bGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRl
cm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9y
bSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdp
bmRvd3MKIApAQCAtNTU1LDE3OSArNTA4LDEwNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlGaWxsUGF0dGVybigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVz
aCA9IGFkb3B0Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigq
dGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0
byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZHJhd1BhdGgo
Y29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkg
fHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0
ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUGF0aChjb250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGgu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBs
YXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnRleHQsIHBhdGgs
IERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxS
ZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0
byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3Qo
Y29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChy
ZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
dXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVj
dChjb250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50
JiBncmFkaWVudCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGF1dG8gYnJ1
c2ggPSBncmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KSk7CisgICAgaWYgKCFicnVzaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2lt
cGwpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNP
cGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOworCisgICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJh
dG9yLCBibGVuZE1vZGUpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2
aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29s
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpj
bGlwKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxh
dGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0
KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBh
dGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUlu
dFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBs
KQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENsaXBC
b3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIApAQCAtNzM1LDE4ICs2MTMsMTMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZv
cm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9p
bXBsKTsKLQorICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFj
aXR5KTsKICAgICBzYXZlKCk7CiAKICAgICBtX3N0YXRlLmFscGhhID0gb3BhY2l0eTsKIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKIH0KIApAQCAtNzU0LDEx
OSArNjI3LDExMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZv
cm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmRU
cmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgRGlyZWN0MkQ6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAKLSAgICBBU1NFUlQoIW1faW1w
bCk7Ci0KICAgICBtX3N0YXRlLmFscGhhID0gbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKTsK
IAogICAgIHJlc3RvcmUoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBvcnRz
VHJhbnNwYXJlbmN5TGF5ZXJzKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwg
ZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKLSAgICAodm9pZClv
ZmZzZXQ7Ci0gICAgKHZvaWQpYmx1cjsKLSAgICAodm9pZCljb2xvcjsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VU
aGlja25lc3NDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tu
ZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Cisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQor
ICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zdHJva2VTdHlsZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykgeworICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29u
dGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAg
ICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZl
IG9wcG9zaXRlIFkgYXhpcworICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3Rf
Y2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwor
ICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAg
ICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRo
KCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJv
a2VTdHlsZSgqcGxhdGZvcm1Db250ZXh0KCksIHN0eWxlKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwg
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91
bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChs
aW1pdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0
ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3Nv
bGlkU3Ryb2tlQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsgICAgCisgICAg
fQorICAgIAorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29s
b3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNo
V2l0aENvbG9yKGZpbGxDb2xvcigpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQo
KSwgbGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKKyAgICAgICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9
IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRf
QU5USUFMSUFTX01PREVfQUxJQVNFRDsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlbmRl
clRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5nTW9kZSk7CisgICAg
fQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyZWN0KTsK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6QWxwaGFDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFs
cGhhKTsKKyAgICAgICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7CiAgICAgfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgeworICAgICAgICBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVf
TkVBUkVTVF9ORUlHSEJPUjsKKworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6
CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9O
RUlHSEJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpMb3c6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTElORUFSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlv
blF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJ
T05fTU9ERV9DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xB
VElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNv
bnRleHQoKSwgcXVhbGl0eSk7CisgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIERpcmVjdDJEOjpz
ZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBEaXJlY3Qy
RDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2FwKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBjYXApOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQogICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9h
dCBsZW5ndGggPSAwOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXpl
KCk7ICsraSkKQEAgLTg3NSwzNDEgKzc0MiwxNzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAg
ICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsK
ICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJE
OjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERp
cmVjdDJEOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4pOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBm
aWxsUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKIHsKLSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2NhbGUo
KnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnJvdGF0ZShhbmdsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4
dCgpLCBhbmdsZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9y
bUNvbnRleHQoKSwgeCwgeSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VU
cmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNm
b3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRy
YW5zZm9ybSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1L
bm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAg
IC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0g
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3Jt
Q29udGV4dCgpKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUp
CitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0OwotCi0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRUb0RldmljZVBpeGVscyhyZWN0
LCByb3VuZGluZ01vZGUpOwotCiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0Rl
dmljZVBpeGVscygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAg
RGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBl
bmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwg
cmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tl
U3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERp
cmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHRoaWNr
bmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VD
b2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0Nv
bnRleHQ6OnNldFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRp
bmcgY29udGV4dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUgZm9yIGRpc3BsYXkgbGlz
dHMuCi0gICAgfQotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9u
UXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAg
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9E
RV9ORUFSRVNUX05FSUdIQk9SOwotCi0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0gICAgICAgIHF1YWxpdHkg
PSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkg
PSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFf
SU5URVJQT0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Ly8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFs
aXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9v
bCBpc0xheWVyQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQ0FM
YXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm47Ci0KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXllckNv
bnRleHQoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRl
ZC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRl
ZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGJvb2wgaXNBY2NlbGVyYXRlZCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNQbGF0Zm9y
bUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIERpcmVjdDJE
OjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgICh2b2lkKW1v
ZGU7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIEFTU0VSVCht
X3N0YXRlLnN0cm9rZUNvbG9yID09IGNvbG9yKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2ggPSBicnVz
aFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsKKyAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIERp
cmVjdDJELgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlj
a25lc3MoZmxvYXQgdGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIEFTU0VSVChtX3N0YXRl
LnN0cm9rZVRoaWNrbmVzcyA9PSB0aGlja25lc3MpOwotICAgIG1fZGF0YS0+c2V0U3Ryb2tlVGhp
Y2tuZXNzKHRoaWNrbmVzcyk7Ci19CisgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1f
c3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgor
ICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3IpOwot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCkt
Pm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CisgICAgRGly
ZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5m
aWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBE
MkQuCisgICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcygqcGxh
dGZvcm1Db250ZXh0KCksIGVuYWJsZSk7CisgICAgRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJv
a2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3Ro
aW5nKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgVU5VU0VEX1BBUkFNKGZv
bnRTbW9vdGhpbmcpOworICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBhdXRvIHhPZmZzZXQgPSBw
b2ludC54KCk7CisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsK
KyAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZl
Y3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsKIAotICAg
IGF1dG8gZm9udFNtb290aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01P
REVfQ0xFQVJUWVBFIDogRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7Ci0gICAgcGxh
dGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250
U21vb3RoaW5nTW9kZSk7Ci19CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBo
czsgKytpKSB7CisgICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0Nv
dW50KCkpCisgICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtQWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhpICsgZnJvbSk7CisgICAgICAgIGlmICghYWR2YW5jZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOwotICAgIG1fZGF0YS0+
c2V0QWxwaGEoYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1D
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBm
cm9tKTsKKyAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsK
KyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgp
OworICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWln
aHQoKTsKKyAgICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgZG91YmxlIHN5bnRoZXRp
Y0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgRGly
ZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNl
KHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUs
IGdyYXBoaWNzQ29udGV4dCgpKSwKKyAgICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFk
dmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5n
TW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNo
YWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK0dyYXBoaWNzQ29udGV4dDo6
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKLSAgICAvLyBU
aGlzIGlzIGEgbm8tb3AgZm9yIERpcmVjdDJELgorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50
ZWQuCisgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoIW1faW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5m
aWxsUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmls
bCBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAg
IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBi
dWZmZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBpZiAoIWltYWdlKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNl
LCBtX3N0YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VD
b2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIGF1dG8qIGNvbnRleHQgPSAmZ3Jh
cGhpY3NDb250ZXh0KCk7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoIW1faW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBE
MkQuCi0gICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVj
dDJEOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ry
b2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
KyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgogfQorI2VuZGlmCisKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmI3MGMzYzE3M2M5MWE3NmJlYmQyZThlNmRmMjE1NWYxYTE1NGFjMS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRp
cmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJl
Y3QyRC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3JlYXRl
RmFjdG9yeShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAg
ICAgICBbJnBsYXRmb3JtQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ+KGNvbnRleHQsIHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0
b3J5KAotICAgICAgICBbcmVuZGVyVGFyZ2V0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRD4oY29udGV4dCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fcGxh
dGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkpCi17Ci0g
ICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUu
Z2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQpOwot
fQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVk
UGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KHJlbmRl
clRhcmdldCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4
dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3lu
Y0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6On5HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKQotewotICAgIG1fcGxhdGZvcm1D
b250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewot
ICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVh
bmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAg
YXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0
ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09m
ZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxp
YXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xlYXJTaGFkb3co
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVDYXAobV9wbGF0Zm9ybUNv
bnRleHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17
Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRh
c2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVKb2luKG1f
cGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgRGlyZWN0
MkQ6OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIERpcmVjdDJE
OjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
RGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVudC5jcmVh
dGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFicnVz
aCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0
ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
KTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9y
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91
c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUo
c3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBEaXJlY3QyRDo6Zmls
bFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUp
OwotICAgIGVsc2UKLSAgICAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJh
dG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAg
IERpcmVjdDJEOjpGaWxsU291cmNlIGZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgp
KTsKLSAgICBmaWxsU291cmNlLmJydXNoID0gbV9wbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29s
b3IoY29sb3IpOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIGZpbGxTb3VyY2UsIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3Qy
RDo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNl
KHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlw
c2UocmVjdCk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdp
ZHRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0
aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwg
Z3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVj
dCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0
MkQ6OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7Ci0gICAgaWYgKCFmb250
LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB4T2Zm
c2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUds
eXBocyk7Ci0gICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsK
LSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAg
ICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2Vz
KGkgKyBmcm9tKTsKLSAgICAgICAgaWYgKCFhZHZhbmNlKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChpICsgZnJvbSk7Ci0g
ICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAg
IGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAg
ICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Ci0g
ICAgfQotCi0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0Jv
bGRPZmZzZXQoKTsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6
OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAotICAgICAgICBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpLCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBo
b3Jpem9udGFsQWR2YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUu
dGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNl
dCwgc3RhdGUuc2hhZG93Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3
TmF0aXZlSW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS5wbGF0
Zm9ybUltYWdlKCkpCi0gICAgICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybihtX3BsYXRmb3JtQ29u
dGV4dCwgV1RGTW92ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9y
KCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpkcmF3UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYm9yZGVyVGhp
Y2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6
OmRyYXdMaW5lKG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tl
U3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNo
b3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwg
dGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJv
a2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0
MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9y
LCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UGF0aChj
b25zdCBQYXRoJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShv
ZmZzZXQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpzYXZlKCkKLXsKLSAgICBEaXJlY3QyRDo6c2F2ZShtX3BsYXRmb3JtQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyZXN0b3JlKCkK
LXsKLSAgICBEaXJlY3QyRDo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
LXsKLSAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKG1fcGxhdGZvcm1Db250ZXh0LCB4LCB5KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykKLXsKLSAgICBEaXJlY3QyRDo6cm90YXRlKG1fcGxhdGZvcm1Db250ZXh0LCBhbmds
ZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzY2Fs
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgRGlyZWN0MkQ6OnNjYWxlKG1fcGxhdGZv
cm1Db250ZXh0LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJl
Y3QyRDo6Y29uY2F0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQotewotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKG1fcGxhdGZvcm1D
b250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUp
Ci17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgRGlyZWN0
MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIERpcmVjdDJEOjpjbGlwKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcGF0
aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcFBh
dGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBCb3VuZHMoKQotewotICAgIHJldHVybiBEaXJl
Y3QyRDo6U3RhdGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAg
aWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY29udGV4dCA9ICZncmFw
aGljc0NvbnRleHQoKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKGNvbnRleHQpKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4
dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVj
dCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5v
dCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjA0NTA1MzE3MDNmYjkwZWVhN2I0MmYy
NDc0ZjU5MzZiZDNiYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLWNs
YXNzIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHRJbXBsIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShJRDJEMVJlbmRl
clRhcmdldCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29u
dGV4dCYsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYsIElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0gICAgdmly
dHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCk7Ci0KLSAgICBib29sIGhhc1BsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9h
dCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5k
TW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQYXRo
KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290
aGluZ01vZGUpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICBib29sIGRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybigoTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9h
dFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBv
dmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5j
bHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYs
IFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBN
ZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSAg
ICAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwotCi0g
ICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhp
Y3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9vd25lZFBsYXRmb3JtQ29udGV4
dDsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZh
dGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNU
MkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCmluZGV4IDFkODA0MjBjZjdlYzZjZDc3NWE2MmJhZWEy
MmY5OTA2MDdlYjRjYmQuLjZkYmJlOTY2ZDM5Njk5MjU5ZTY1YzZmODUwZWU2ZTdjMzVjZGQ5MWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01NiwxMiArNTYsMTIgQEAgc3RhdGljIHZvaWQg
ZmlsbFdpdGhDbGVhckNvbG9yKEhCSVRNQVAgYml0bWFwKQogI2lmIFBMQVRGT1JNKFdJTikKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKGJvb2wgaW5j
bHVkZSkKIHsKLSAgICBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyA9IGluY2x1
ZGU7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fc2hvdWxkSW5jbHVkZUNoaWxk
V2luZG93cyA9IGluY2x1ZGU7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRJbmNs
dWRlQ2hpbGRXaW5kb3dzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3Nob3VsZElu
Y2x1ZGVDaGlsZFdpbmRvd3M7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
LT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3M7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6V2lu
ZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRjLCBjb25zdCBJbnRTaXplJiBzaXplKQpA
QCAtOTUsNyArOTUsNyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5XaW5kb3dz
Qml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1h
cD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0IEludFNpemUmIHNp
emUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4obV9kYXRhLT5tX2hk
Yywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4oZGVwcmVjYXRl
ZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgogCkBAIC0xMDMsNyAr
MTAzLDcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50
UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEKIHsKICAgICBIREMgaGRjID0gbnVsbHB0
cjsKICAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgaGRjID0gbV9kYXRhLT5tX2hkYzsKKyAgICAg
ICAgaGRjID0gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwogICAgIC8vIEZJWE1F
OiBTaG91bGQgYSBiaXRtYXAgYmUgY3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFkb3cgaXMgc2V0Pwog
ICAgIGlmICghaGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CiAgICAgICAgIGlmIChk
c3RSZWN0LmlzRW1wdHkoKSkKQEAgLTEzNSwxNyArMTM1LDE3IEBAIEhEQyBHcmFwaGljc0NvbnRl
eHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9y
dEFscGhhCiAgICAgICAgIHJldHVybiBiaXRtYXBEQy5sZWFrKCk7CiAgICAgfQogCi0gICAgbV9k
YXRhLT5mbHVzaCgpOwotICAgIG1fZGF0YS0+c2F2ZSgpOwotICAgIHJldHVybiBtX2RhdGEtPm1f
aGRjOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5mbHVzaCgpOworICAgIGRlcHJl
Y2F0ZWRQcml2YXRlQ29udGV4dCgpLT5zYXZlKCk7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogSERDIEdyYXBoaWNzQ29udGV4dDo6aGRjKCkgY29u
c3QKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBtX2RhdGEtPm1faGRj
OworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiB9CiAKICNp
ZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmNwcAppbmRleCBhOGVlMzVjNTI3NzgxMjczZjQ3ZmI1ZDJmNGJjZGY4OGM0NGUw
OGM0Li5hZDk1NTRjMDUwYWVlMmUxMGVjMTUzNTllYjhiNDg1ZDM1MGNkYTRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBpZiAo
IWNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKaW5kZXggZjhhMTBkNWM0
MzZlNzA2MDg5ODcwN2JhOGI2NTQ2NDFjZTJiZGY1NC4uNTMzOGZmY2M3YjU2NWY0ODdkOWU3Y2Zi
OGYyNjRmN2VhMTI5NjllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcApAQCAtNzMsNyArNzMsNyBAQCBib29sIEJpdG1hcElt
YWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRTaXplKiBzaXplKQog
ICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoYm1wSW5m
by5ibUJpdHMsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCwKICAgICAgICAgOCwg
Ym1wSW5mby5ibVdpZHRoQnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVP
cmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkpOwogICAKLSAg
ICBHcmFwaGljc0NvbnRleHQgZ2MoY2dDb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRDRyBnYyhjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IEJp
dG1hcEltYWdlOjpzaXplKCk7CiAgICAgaWYgKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKaW5kZXggMmNlYzk5
ZGM3MjlmZTY1ZTA4NTRlZWU3MmRmYzRlZDdhZjA5NTIzYy4uYzllYjAwYzQ4MjQxZjViY2JmNWM1
ZTJkODNiOTQ3Y2I3Yzk0OTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVk
ZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNzUsNyArNzUsNyBAQCBi
b29sIEJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRT
aXplKiBzaXplKQogICAgIGNhaXJvX3QqIHRhcmdldFJlZiA9IGNhaXJvX2NyZWF0ZShpbWFnZSk7
CiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCBnYyhHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkodGFyZ2V0UmVmKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ2ModGFyZ2V0UmVmKTsKIAogICAgIEZsb2F0U2l6
ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNw
cAppbmRleCBkOTYyMDMwMGFiY2ViYTQ5NGNhNjYxNTFkMDAxZTUyZjFjNzg5NDRiLi45MTI5YTE3
Yjc3OGEyNDgwY2RmM2MwZWJmYTJkNmU3MjcxYTYwNzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcApAQCAtMjMyLDcg
KzIzMiw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hS
ZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3Jh
dGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4
dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250
ZXh0KTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0zNDIsNyArMzQyLDcgQEAgRmxvYXRSZWN0
IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgp
KTsKLSAgICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJE
LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkp
OworICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29u
dGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKIAogICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpCiAgICAgICAgIHN0cm9rZVN0
eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0RyYWdJbWFnZUlPUy5tbQppbmRleCA3MzU5MzNmMTcyMDg1YjllNjY5M2FkNDRiMmFmMTYwYjM0
MGM0Zjk5Li4zNjE2MDJlNTdiMjRmYjE2Y2JlMmE3YTk5ZjZlNWM4MGEzMzlmYWI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KQEAgLTk0LDcgKzk0LDcg
QEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24KIAogICAgIFJldGFpblB0cjxVSUdyYXBoaWNzSW1h
Z2VSZW5kZXJlcj4gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJl
bmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VTaXplXSk7CiAgICAgVUlJbWFnZSAq
aW1hZ2VDb3B5ID0gW3JlbmRlci5nZXQoKSBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0lt
YWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlU2l6ZS5oZWlnaHQpOwogICAgICAgICBjb250ZXh0
LnNjYWxlKHsgYWRqdXN0ZWRJbWFnZVNjYWxlLCAtYWRqdXN0ZWRJbWFnZVNjYWxlIH0pOwogICAg
ICAgICBjb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSwgeyBvcmllbnRhdGlv
biB9KTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9y
TGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZwogCiAgICAg
YXV0byByZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJl
ckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplXSk7CiAgICAgYXV0byBpbWFn
ZSA9IFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJD
b250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENH
IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJh
bnNsYXRlKDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4dC5z
Y2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJv
dW5kZWRSZWN0KGltYWdlUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoNCkpLCBDb2xvcjo6
d2hpdGUpOwpAQCAtMjA0LDcgKzIwNCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9yRGF0YSYgaW5kaWNhCiAKICAg
ICBhdXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRl
cmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemUoKV0pOwogICAgIHJldHVy
biBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29u
dGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0
KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBj
b250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICAvLyBGSVhNRTogVGhl
IGNvbnRleHQgZmxpcCBoZXJlIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBhbmQgc3VnZ2VzdHMg
dGhhdCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgcmVndWxhcgogICAgICAgICAvLyBkcmFnIGluaXRp
YXRpb24gZmxvdywgd2UgdW5uZWNlc3NhcmlseSBmbGlwIHRoZSBncmFwaGljcyBjb250ZXh0Lgog
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwpAQCAtMjM4
LDcgKzIzOCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYg
ZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vCiAgICAgYXV0byYgaW1hZ2UgPSAq
dGV4dEluZGljYXRvci0+Y29udGVudEltYWdlKCk7CiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5T
KFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6
ZTppbWFnZS5zaXplKCldKTsKICAgICBVSUltYWdlICpmaW5hbEltYWdlID0gW3JlbmRlci5nZXQo
KSBpbWFnZVdpdGhBY3Rpb25zOlsmaW1hZ2VdKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4
dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJl
bmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250
ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LmRyYXdJbWFn
ZShpbWFnZSwgRmxvYXRQb2ludCgpKTsKICAgICB9XTsKIApAQCAtMjUyLDcgKzI1Miw3IEBAIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNv
bnN0IEZsb2F0UmVjdCYgZWxlbWVuCiAKICAgICBhdXRvIHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6
YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdl
UmVjdC5zaXplKCldKTsKICAgICBVSUltYWdlICppbWFnZSA9IFtyZW5kZXIgaW1hZ2VXaXRoQWN0
aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgcmVuZGVyZXJDb250ZXh0LkNHQ29u
dGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgcmVuZGVyZXJDb250
ZXh0LkNHQ29udGV4dCB9OwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRI
ZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAg
ICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3Qoc3dhdGNoLCBjb2xvcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCmluZGV4
IDA5ZmFlZWVlOWVhY2I1MDMyZjFhNzlkNzNiYTAxOGE5YjY1NWJkMmIuLjVlYzM4ZTY0MWJkNmVk
MDNhZDA1MjU2MWQwNGM5Y2RhZmRmYjQxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVh
bURlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIKKyNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCmluZGV4IGQwMjJl
N2UxOTFkYWM4MTYzNmQ1Mjk1MWQ0MGQ1M2I4ODczZjU1MDkuLjQ0NTAxYWIxMzliOGVlZWU5MTRj
ZTZkODY3NDE3YjJlOWVjOTI0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VXaW4uY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURy
YWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGluTGFiZWws
IFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0T2JqZWN0KHdvcmtp
bmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNv
bnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoY29udGV4dFJlZik7CiAg
ICAgLy8gT24gTWFjIGFscGhhIGlzIHswLjcsIDAuNywgMC43LCAwLjh9LCBob3dldmVyIHdlIGNh
bid0IGNvbnRyb2wgYWxwaGEKICAgICAvLyBmb3IgZHJhZyBpbWFnZXMgb24gd2luLCBzbyB3ZSB1
c2UgMQogICAgIGNvbnN0ZXhwciBhdXRvIGJhY2tncm91bmRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+
IHsgMTQwLCAxNDAsIDE0MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nv
bnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2YzA5YWYwZDJk
NjlmNDYzZDc2YWVjMjYuLjRjMGY5Yzk0ZDYzY2ZmMmRkZjE5ZTRhN2FhY2I0YWU1MWJjODY0ZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hl
Y2tlci5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpx
dWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJh
bWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5n
TGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0TnVsbCBjaGVja2VyQ29udGV4dChHcmFwaGljc0NvbnRleHROdWxsOjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJh
bWVWaWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1
bWVudFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xk
RW50aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZm
YjBiN2MwYi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBA
IC02OTAsMTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNo
YWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChi
b3hTaGFkb3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dl
YmtpdEJveFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJv
eFNoYWRvdy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lT
aGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBw
bHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJ
bWFnZSYgaW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpA
QCAtMjQzOSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94
U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAg
ICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZp
Y2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRv
RGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAg
ICAgICAgICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dP
cmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAg
ICAgICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9y
KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAg
ICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dl
dmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0
KTsKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAg
ICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29s
b3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
ciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9s
ZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYy
MWU3NmQ2N2NjNjZlZTVhMjVjNzRkZmUuLjM2ODJmYTNhZGNkN2E4ZWM4MzdlNjY2ZGJmMjQxZjNh
YmQ2NjZlMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCkBAIC0xNzg5LDcgKzE3ODksNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9u
Rm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBH
cmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dE51bGwgbnVsbENvbnRleHQoR3JhcGhpY3NDb250ZXh0TnVsbDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYg
RU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNo
b3VsZEJ1aWxkRWRpdGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2Zk
ZTI4YzI1MmEzMWYxNTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhj
ODUwZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVC
aXRtYXBDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxl
Qml0bWFwQ2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRt
YXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWly
by5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQoKQogewogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fp
cm9TdXJmYWNlKCk7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJl
ZihjYWlyb19jcmVhdGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRt
YXBDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
Q2Fpcm8+KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFy
ZWFibGVCaXRtYXBDRy5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFk
NzY2MmRhNy4uMWQwNmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcg
KzEwNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0
bWFwQ29udGV4dC5nZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2Fs
ZUNUTShiaXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9p
ZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0
MkQuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcAppbmRleCAwOGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1
OGYwY2I2NDc2YmQyNDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGlyZWN0MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0
aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVh
dGVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQu
Z2V0KCkpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4o
c3VyZmFjZUNvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9j
YWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWly
by9CYWNraW5nU3RvcmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0
ZDliNTE5NDI5MjRmNi4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNh
aXJvLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3
IEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAq
IGJpdG1hcCwgY29uc3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3Rz
LgogICAgIEludFBvaW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVj
dEJvdW5kcy5sb2NhdGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBh
ZG9wdFJlZihjYWlyb19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShjYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBn
cmFwaGljc0NvbnRleHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQ
YWdlUHJveHkuZHJhd3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFu
c3BhcmVudCBwYXJ0cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9y
IHN1Y2ggY2FzZSwgYml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6
OkNvcHkgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2Zk
M2NkZmIwMjgxMjg1Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1
NjU5MmJhYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50
aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1Zp
ZXcubW0KQEAgLTMwLDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0
ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJ
bmZvLmgiCiAjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94
eS5oIgogI2ltcG9ydCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3Rm
L1J1bkxvb3AuaD4KIAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBj
b25zdCBXZWJLaXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5h
bFRvcE1hcmdpbiI7CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRp
bmdNYXJnaW5LZXkgPSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcg
KzU1Niw3IEBAIC0gKHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQ
dHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3It
PnZhbHVlOwogCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBDR0NvbnRleHRdKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoY29udGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFt
ZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qu
b3JpZ2luKSwgYml0bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNl
ZTY2YzJjM2ZmMTY0YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1
ZjdlMWUyZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2lu
Z1N0b3JlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNr
aW5nU3RvcmVEaXJlY3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NP
TVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2lu
Lm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1Yjk4Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0N2E0
NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNkZjZmMGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBA
QAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXRE
ZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29m
dExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERG
UGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9ydCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpA
QCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1l
bnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29h
Lmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNv
ZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQ
REZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJv
dmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAtMTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVn
aW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRl
eHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFy
YW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBn
cmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXND
QUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAw
ZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2JkYjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4
MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVu
dC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBk
ZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVjdCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAg
ICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBkZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwog
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0Lmdl
dCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNv
bnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7
CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0
KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdB
cmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKaW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZi
ZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERp
cmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYzNjYjhiNzg0
NTY4MGQxNmRmMWE2NzE4ZTY2ZjQ3OGU5ZTk4OGI1Ni4uOWIxMjFjYTllM2Q0MjRiMDUzZGNjYjlm
YWVmZTJjNjc5YjQ3OTIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNl
c0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJlYWxs
eSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5nIGNv
ZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzODgsNyArNTM5Myw3IEBAIHZvaWQgV2Vi
UGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBQ
cmludEluZm8mIHByaW50CiAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJl
Zj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOwogICAgICAgICAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0Lmdl
dCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGN0
eChjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEs
IC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQt
PnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICBtX3ByaW50Q29udGV4
dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndp
ZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZkZmZj
NWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUwYWM5
OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJh
bWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9uR3Rr
OjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3KCk7
CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lkdGgo
bV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fY2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250ZXh0
LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4dCwg
cGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9zY2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3JlKG1f
Y2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2
NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBiN2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+Ci0j
aW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENv
bnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBAQCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENH
Q29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdpZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAogICAg
IGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhp
Y3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0
aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdp
ZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAyYmEw
MDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0ZTg4
ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2lt
cG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5o
PgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRyYXMu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50
OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9udCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICoK
IAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtu
c0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dCB7IGNnQ29udGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0Nv
bnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAgICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEgZmxp
cHBlZCBncmFwaGljcyBjb250ZXh0LgogICAgICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250ZXh0
IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5ZWNm
MWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4uOTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2MyYjMz
ZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVj
dG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBAQAog
I2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdobGln
aHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgsNyBA
QCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogCiAgICAgICAgIEFTU0VSVChbW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBD
R0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICAgICAgW193ZWJOb2Rl
SGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xsZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwog
ICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYzNWQ3
YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5NjIw
ZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxv
YWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2MTMs
NyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNv
bnRlbnRzT25seQogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50R3Jh
cGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29u
dGV4dChjdHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4KTsK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0g
Y29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MTVhZDJiNWIzOGMxNjhhMWJkNzhlOWU5M2FjMDM2MjU2ODZlMzJiLi5kYmZiZWQ3
YTliYTNkMDRkNDQ0ZjM3YzA4MmUxMTVmOTJjN2QzM2MwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjQg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVh
bGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0
VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0wNS0y
MyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQ2hlY2tl
ZExvY2sgdGhlIGRlZmF1bHQgTG9jawpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAppbmRleCA4N2EzNmFj
ZmU2YTEwMGNjMzIzZTI0ODk3ZmNlMzgwM2YyMzRhNzc4Li5hNTk4ZDU0YTI3NTI5NThjNDJlNGUy
Yjc5ZTUzMzdjNTdiMTc0YjQ2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAKIG5hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDksNyArNTAsNyBA
QCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIFJlcGxheVdpdGhNaXNzaW5nUmVzb3VyY2UpCiAKICAg
ICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKICAgICBh
dXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNv
bnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFj
ZS5wbGF0Zm9ybUNvbG9yU3BhY2UoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBH
cmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRv
IGltYWdlQnVmZmVySWRlbnRpZmllciA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKTsKIApAQCAtMTEzLDcgKzExNCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgT3V0
T2ZMaW5lSXRlbURlY29kaW5nRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0
Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAgICBh
dXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNv
bnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFj
ZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRD
RyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBEaXNwbGF5TGlzdCBvcmlnaW5h
bExpc3Q7CiAgICAgV3JpdGluZ0NsaWVudCB3cml0ZXI7CkBAIC0xNDQsNyArMTQ1LDcgQEAgVEVT
VChEaXNwbGF5TGlzdFRlc3RzLCBJbmxpbmVJdGVtVmFsaWRhdGlvbkZhaWx1cmUpCiAKICAgICBh
dXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBj
b250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAg
ICAgYXV0byBydW5UZXN0V2l0aEludmFsaWRJZGVudGlmaWVyID0gWyZdKEZsdXNoSWRlbnRpZmll
ciBpZGVudGlmaWVyKSB7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpZGVudGlmaWVyLmlzVmFsaWQo
KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429569</attachid>
            <date>2021-05-24 15:06:58 -0700</date>
            <delta_ts>2021-05-24 16:06:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524150657.patch</filename>
            <type>text/plain</type>
            <size>366308</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjIyMThjNGE5NzA0
ZDljMGJhNDM3MTM4Y2RiYjE1ZGRiOWY1My4uYzI4ZDk4ODc4MWUyZmIyYWIwMDkzYTRmOTY1ZjYx
M2YxMDhmMGY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0
b3AgdXNpbmcgVW5jaGVja2VkTG9jayBpbiBTaGFkb3dCbHVyJ3MgU2NyYXRjaEJ1ZmZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCA5YmQzNmQ3MTg3NGIzY2FiMjcxMjQwMjQzMmU3ZjNlNTk1N2Y1N2M1Li4yZjVkZjFl
NTE5NTEzNTk2OWNhZmUzOTdmNTAwYjQ4NjJmNDAwZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCk6CisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmll
dyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVE
aXJlY3QyRC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNv
bnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnJlbmRlclBhZ2UpOgor
CiAyMDIxLTA1LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Nzk0MC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwppbmRleCA1OWEyMzY0MmI1MDYyNjVlZmZlMzU0NWY0NjVhN2Y5MDc5ZTE5ZTQ3Li5k
MzE0MGQyZjhiOGEzNjk2NDA5MDA3ZGY0ZTcxMjZmNDZjNTkxNmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0Nv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJpbnRUb0NH
Q29udGV4dDpwYWdlV2lkdGg6cGFnZUhlaWdodDpdKToKKyAgICAgICAgKiBNaXNjL1dlYktpdE5T
U3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdBdFBvaW50OmZv
bnQ6dGV4dENvbG9yOl0pOgorICAgICAgICAqIFdlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodFZpZXcgZHJhd1JlY3Q6XSk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYXdS
ZWN0OmNvbnRlbnRzT25seTpdKToKKwogMjAyMS0wNS0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzc5
NDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAwOWJmMDI0MDc2NmM3OGE3OTA1NTlhMGY0MTU4NzZh
OGI2MGUyMzkzLi5lMDQ1OTgxYWZhZGRmZWU4NzJkZmRhZThmYjE1ZTljYmEyNzlkN2IyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEyMzgsNyArMTIzOCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1GVFcuY21ha2UKaW5kZXggNGNjMzkxOTkzMTU0NzNkOWFkMzE3MmI2YWFjMWI1OWJhOGJmMTkx
Yy4uNzExNDdhNGUyY2QxNWVlMDFiZjFjMDIxZWVjYjY0NTZiZGVjODAwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1GVFcuY21ha2UKQEAgLTQzLDcgKzQzLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ2VuZXJpYy9LZXllZEVuY29kZXJHZW5lcmljLmNwcAogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNw
bGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAg
LTcxLDcgKzcwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNv
bldpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCkBAIC0xODksNyArMTg3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRl
VXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xs
ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA5N2NlNTQ3MzIxZGMzN2NiZDI1NzU4ZjRmYTYzOTBmNzQxMmRhMzBmLi5h
NWExYWZiMzVkYzk1OGJmNDUzOTVlMDU5MTBmMzUzNGIwYzY1ZjYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTk4Miw3ICsxOTgyLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dElt
cGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJVcGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZiNzRlZjJlNGM5MmExMTIzOGVjODhmYmEwZDlmMDM3
Y2Q1NTRhNmMuLmZjMTg5Y2Y3NDQxYjgwMTJiZTg1NjYwNDYxMzliNTI4YWQ1MjBiNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTg2MSw3ICs4NjEsNiBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyogTWVkaWFLZXlz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJG
NzMzMURCRkRDMEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQkyRDlCRjc0NzFE
QkZEQzQ5MDA3QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMwRjAwN0E3RDk5
IC8qIE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMxNEZGMUNCRjAw
QkEwRkY3IC8qIGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGluZWFyU1JHQi5p
Y2MgKi87IH07Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAw
MTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEQUYzNDNEMUVBN0UwRjEw
MDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3Rh
bnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJGRTk3MDBDRkNCQUIgLyogTW9k
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQzhE
Mzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21w
b3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
ODYsOCArNjA4NSw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xV
bmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RUQx
QkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBNZW51Q29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUNDRDcwMDQ1QTUwNyAvKiBTZWFy
Y2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVDb2NvYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjQwMUZBRDg4MTAwMDUz
MUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAzQzA3
MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5RDA3
MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzAwOCw4ICsyNzAwNSw2IEBACiAJCQkJ
N0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
ICovLAogCQkJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4
N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYx
MkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0zMjY5NSw3ICszMjY5MCw2
IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAw
OUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
OUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGlj
c0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBFNDIw
RjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmgg
aW4gSGVhZGVycyAqLywKQEAgLTM0NTI4LDYgKzM0NTIyLDcgQEAKIAkJCQk0OTlCM0VDNTEyOEND
QzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTNF
NUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAwMTkwOEEgLyogUGxhdGZvcm1DQUxheWVyQ29j
b2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDM0U2MjQzMjY1OTc5MTgwMDU0OEFDRCAvKiBQbGF0
Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDk3ODcxMUFCQUYzQTUwMENF
RjdFNCAvKiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNUM3
NjJCMTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyNjYwMUVCRjE0QjNCOUFEMDAxMkMwRkUgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlJT1MuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlz
cGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3Nz
L0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggMDA5NzlkMDA5Yjg1NTYzZTUy
N2Y4MjgxZmU3MmE5ZDE3OTkzMGFlMy4uZDQ2OGZiYzBmNzZhYjBiMmRiMjIyYWQ2MGFjY2RlNGM2
NjVkZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJv
eERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0xMjk4LDEwICsxMjk4LDcgQEAgdm9p
ZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBw
YWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgYXV0byBzaGFkb3dSZWN0T3JpZ2luID0gZmls
bFJlY3QucmVjdCgpLmxvY2F0aW9uKCkgKyBzaGFkb3dPZmZzZXQ7CiAgICAgICAgIGF1dG8gYWRq
dXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFkb3dSZWN0T3JpZ2luIC0gYWRqdXN0ZWRGaWxsUmVjdC5y
ZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICBpZiAoc2hhZG93LmlzV2Via2l0Qm94U2hhZG93
KCkpCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMZWdhY3lTaGFkb3co
YWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3co
YWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOworICAg
ICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRv
dygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVs
dCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgLy8gSWYg
dGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dl
dmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDEyLDExICsxNDA5LDcgQEAgdm9pZCBCb3hE
ZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQudHJhbnNsYXRl
KGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0g
ICAgICAgIGlmIChzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50
aW5nQ29udGV4dC5jb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvdy5jb2xvcigpKTsKLQorICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNX
ZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1
c01vZGU6OkRlZmF1bHQpOwogICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShzaGFkb3dDYXN0aW5nUmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxs
Q29sb3IpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggNGY0NmY2NTkwOTU5
YTFlNGNkZGNkY2MzNzUyODA1MTZkNDJjYTFkMS4uZTdjMDI4NWY3NTU0NTQ4MDNiMTQwYzkyMGJk
NGIyYWZkZmU2MWY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTI1Miw3ICsyNTIsNyBA
QCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmlzQWNjZWxlcmF0ZWQoKSBjb25z
dAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCiAgICAgYXV0byog
Y29udGV4dCA9IGNhbnZhc0Jhc2UoKS5leGlzdGluZ0RyYXdpbmdDb250ZXh0KCk7Ci0gICAgcmV0
dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aXNBY2NlbGVyYXRlZENvbnRleHQoKTsKKyAgICByZXR1
cm4gY29udGV4dCAmJiBjb250ZXh0LT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQ7CiAjZWxzZQogICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtMTEyMCw3
ICsxMTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGlwSW50ZXJu
YWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1bGUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgYy0+Y2FudmFzQ2xpcChwYXRoLCB0b1dpbmRSdWxlKHdp
bmRpbmdSdWxlKSk7CisgICAgYy0+Y2xpcFBhdGgocGF0aCwgdG9XaW5kUnVsZSh3aW5kaW5nUnVs
ZSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmJlZ2luQ29tcG9z
aXRlTGF5ZXIoKQpAQCAtMTIxMiw3ICsxMjEyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2EK
ICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBjb250ZXh0LT5zYXZlKCk7
CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAgY29udGV4dC0+c2V0TGVnYWN5U2hhZG93
KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAgIGNvbnRl
eHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQogICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFs
cGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpAQCAtMTM3OSw5ICsxMzc5LDkgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdygpCiAgICAgaWYg
KHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNo
YWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRv
d09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3
aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvcik7
CisgICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgp
LnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2Fj
eSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwg
MCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRT
aXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNob3VsZERyYXdT
aGFkb3dzKCkgY29uc3QKQEAgLTIwMzAsNyArMjAzMCw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxD
YW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVy
bihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFzUGF0dGVybj4geyBDYW52YXNQYXR0ZXJu
OjpjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51bGwoKSwgcmVwZWF0WCwgcmVwZWF0WSwg
b3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9ICFkcmF3
aW5nQ29udGV4dCgpIHx8IGRyYXdpbmdDb250ZXh0KCktPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdD
b250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxlbWVudC5jcmVhdGVCdWZmZXJGb3JQYWlu
dGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmluZ01vZGUsIGNvbG9yU3BhY2UoKSwgcGl4
ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0yNDczLDcgKzI0NzMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGZsbwogCiAgICAg
ICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0OwogCi0gICAgICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICAg
ICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29s
b3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAKICAgICAgICAgICAgIGlmIChmaWxsKQog
ICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCmluZGV4IDY1ODNjMzY5ZmRhMWMwNmQ5NDM3NWNjZGMyM2ZjOGI3MjIz
MGJmNWEuLjMxNzJlN2Y3OWY2MGExNDgzYWYwOGZmOGYyNjM2YmY3MjlhNGNjMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQxODcsMTIgKzQxODcsMTIgQEAgdm9pZCBGcmFtZVZp
ZXc6OnVwZGF0ZUNvbnRyb2xUaW50cygpCiAgICAgICAgIHBhZ2UtPnNldElzQ291bnRpbmdSZWxl
dmFudFJlcGFpbnRlZE9iamVjdHMoaXNDdXJyZW50bHlDb3VudGluZ1JlbGV2YW50UmVwYWludGVk
T2JqZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRp
b24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnMgcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zKQordm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRp
b24oR3JhcGhpY3NDb250ZXh0TnVsbDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHBhaW50SW52
YWxpZGF0aW9uUmVhc29ucykKIHsKICAgICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgbGF5
b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBHcmFwaGljc0NvbnRleHROdWxsIGNvbnRleHQo
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkgewog
ICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250ZW50cygpLgogICAgICAg
ICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVjdChMZWdhY3lJT1NEb2N1
bWVudFZpc2libGVSZWN0KSk7CkBAIC00NzQyLDcgKzQ3NDIsNyBAQCB2b2lkIEZyYW1lVmlldzo6
YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRvbSwgZmxvYXQgb2xkVG9w
LCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0aCBwYWludGluZyBkaXNh
YmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChHcmFwaGljc0NvbnRleHQ6OlBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgR3JhcGhpY3NDb250ZXh0TnVsbCBjb250
ZXh0KEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7
CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGljX2Nhc3Q8aW50PihmbG9vcmYo
b2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAsIHN0YXRpY19jYXN0PGludD4o
Zmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVyZmxvd1JlY3QoKS5tYXhYKCks
IHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xkVG9wKSkpOwogICAgIHJlbmRl
clZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5k
ZXggOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZmOWEwZi4uODBkMzZmMmNmN2Mx
N2ExMzRkOWNhNDg1ZTM3MzQ1OGU5Y2I0ODJmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBA
IC02NjYsOSArNjY2LDkgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWVGbGF0
dGVuaW5nIGVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKLSAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50cyk7IH0KLSAgICB2
b2lkIGludmFsaWRhdGVJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgeyB0cmF2ZXJzZUZvclBhaW50
SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJ
bnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHROdWxsOjpQ
YWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRyb2xUaW50
cygpIHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHROdWxsOjpQ
YWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50cyk7IH0KKyAg
ICB2b2lkIGludmFsaWRhdGVJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgeyB0cmF2ZXJzZUZvclBh
aW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52YWxpZGF0aW9uUmVh
c29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KIAogICAgIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxhYmxlQXJlYXMoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcAppbmRleCA3M2Q4YjQ5Y2VhN2NhNjU4ZDU1NDZkM2Vi
MTUyMmFkMzRjMGFlYzFjLi5hMThmZTViYmFiN2UzNjQ5OTMyOWYyYWNmN2NmNmYwM2FkMjZiNmE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcApAQCAtNzIsNyArNzIsNyBA
QCBHRElPYmplY3Q8SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25zdCBGcmFtZSogZnJhbWUsIElu
dFJlY3QmIGlyKQogICAgICAgICA4LCB3ICogc2l6ZW9mKFJHQlFVQUQpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QpKTsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQuZ2V0KCkpOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNvbnRleHQuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdjKGNvbnRleHQuZ2V0KCkpOwogCiAgICAgZHJhd1JlY3RJbnRvQ29udGV4dChpciwg
ZnJhbWUtPnZpZXcoKSwgZ2MpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4
IGMxYjUzNjA1NzEzNzc0ZGMwMDZkMDI4ZWRhN2M2YTgyMTNkNmNjYTEuLjIzN2ViZmJiODAzMzhk
MzEzZDJhNTFhNzdlMjgzMDlkNzA1ZmJmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNt
YWtlCkBAIC0xMiw3ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tl
bmRDYWlyb1gxMS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggNWYwMTQ5NGYzY2Ex
ZTMxZDc0N2JmN2M3YWZiNzZhZDBjZDdmNjcwYi4uMTk3ZTMzY2RjMzc1MzhhYzkwMGM4N2Q1NGQ5
YzZjM2YzNTY5ZjVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
CkBAIC0yOSw3ICsyOSw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQppbmRleCA2ZDgxMTg4ODg0NjRkODE1NWQ5
ZDUwODMyY2NiYTY0M2IxODdkYWQ4Li5hMDdkNjQ2YTJlODBjMWZlM2U1MTU0YWQ3ZThmNmUwMTQ4
OWViOWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1h
Z2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VD
b2NvYS5tbQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBv
cnQgIkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiRm9udFNlbGVjdG9yLmgiCi0jaW1wb3J0
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1w
b3J0ICJJbWFnZS5oIgogI2ltcG9ydCAiTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIgog
I2ltcG9ydCAiUGFnZS5oIgpAQCAtMzAwLDcgKzMwMCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVE
cmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHRpCiAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdl
IGFsbG9jXSBpbml0V2l0aFNpemU6aW1hZ2VTaXplXSk7CiAgICAgW2RyYWdJbWFnZSBfd2ViX2xv
Y2tGb2N1c1dpdGhEZXZpY2VTY2FsZUZhY3RvcjpkZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
LkNHQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdLkNHQ29udGV4dCk7CiAKICAgICBjb250ZXh0LmZpbGxSb3Vu
ZGVkUmVjdChGbG9hdFJvdW5kZWRSZWN0KGxheW91dC5ib3VuZGluZ1JlY3QsIEZsb2F0Um91bmRl
ZFJlY3Q6OlJhZGlpKGxpbmtJbWFnZUNvcm5lclJhZGl1cykpLCBjb2xvckZyb21OU0NvbG9yKFtO
U0NvbG9yIGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA4N2E0NGE1MzQ3YWI4NmJh
OGUxOTMwZjA0MjBlNjQ1MDk1NjBiODFkLi45NmM5ZjBlNjhkMWI5ZjRhMWE4ODVjMDBhMDNmM2Ix
ZjVmMzQ5Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhc2NhZGUuY3BwCkBAIC0yMjksOSArMjI5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3Bs
YXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHJl
Y29yZGluZ0NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7
Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpSZWNvcmRlcj4oZGlzcGxh
eUxpc3RDb250ZXh0LCAqZGlzcGxheUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCks
IEFmZmluZVRyYW5zZm9ybSgpLCBudWxscHRyLCBEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29y
ZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCk7Ci0gICAgfSk7
CisgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0
LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0
ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0
aW9uOjpEb250RGVjb25zdHJ1Y3QpOwogICAgIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9
IHRvRmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkp
KTsKICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0
YXJ0UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA4OTRiNWNj
ZTQyMTFkYjFkZmUyZDQ2Y2FmMGY2NWM0NDIxYTUxYTRkLi5kYTgzNzc5ZmZjZTA2Yzk1Yjk2OTFk
ZTVkOTQ2ZGNiZjFmNDBlMzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRpYVBs
YXllci5oIgpAQCAtODIsMTEgKzgxLDYgQEAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlKCkKICAgICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCiAgICAgLCBzaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHModHJ1ZSkKICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKGZhbHNlKQotI2lmIFVTRShDRykKLSAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5
IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0
NDI+KSwKLSAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9y
IGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAsIHNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMoZmFsc2UpCi0jZW5kaWYKICAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQog
ewogfQpAQCAtMTYwLDEwICsxNTQsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZTo6YWNjdW11bGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKICAgICB9
CiAKICAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IERlYWwgd2l0aCBzdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzLgogICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKICAgICAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKICAg
ICAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICBt
X3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0K
IAogICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlKSkKQEAgLTIyOSwxNCArMjIzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZTo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlm
IChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiAKLSAgICBpZiAobV9j
aGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkg
ewotI2lmIFVTRShDRykKLSAgICAgICAgaWYgKG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1
cykKLSAgICAgICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zm
c2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICBl
bHNlCi0jZW5kaWYKLSAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93
T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIH0K
KyAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hh
ZG93Q2hhbmdlKSkKKyAgICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZz
ZXQsIG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlKTsKIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNl
dFN0cm9rZVRoaWNrbmVzcyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CkBAIC0zMDIsOSArMjkw
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKSkgewogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1i
bHVyIiwgbV9zdGF0ZS5zaGFkb3dCbHVyKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFk
b3ctb2Zmc2V0IiwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQpOwotI2lmIFVTRShDRykKLSAgICAgICAg
dHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFk
b3dzVXNlTGVnYWN5UmFkaXVzKTsKLSNlbmRpZgorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAg
LTM2MSw1NSArMzQ3LDE5IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoCiAgICAgcmV0dXJuIHRz
OwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlv
blJlYXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQotICAgIDogbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQotewotfQotCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1H
cmFwaGljc0NvbnRleHQpCi17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhp
Y3NDb250ZXh0SW1wbEZhY3RvcnkmIGZhY3RvcnlGdW5jdGlvbikKLSAgICA6IG1faW1wbChmYWN0
b3J5RnVuY3Rpb24oKnRoaXMpKQotewotfQotCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0Nv
bnRleHQoKQogewogICAgIEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFt
X3RyYW5zcGFyZW5jeUNvdW50KTsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHQ6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+aGFzUGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
cmV0dXJuICEhbV9kYXRhOworICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUp
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNhdmUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAg
TE9HX0VSUk9SKCJFUlJPUiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlz
IGVtcHR5Iik7CiAgICAgICAgIHJldHVybjsKQEAgLTQyMiwyMCArMzcyLDEwIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlKCkKICAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1l
ZGlhdGVseSBzYXZlKCkgYWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHku
CiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKQogICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cmVzdG9yZSgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNhdmUo
KTsKIAogICAgIHNldFN0cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKQEAgLTQ1MSw2NyArMzkxLDIx
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAg
ICBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9z
dGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5
bGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
U3R5bGUoc3R5bGUpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsK
ICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLnN0cm9r
ZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Io
Y29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1
cjsKLSAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1f
c3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNl
dFBsYXRmb3JtU2hhZG93KG9mZnNldCwgYmx1ciwgY29sb3IpOworICAgIHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENv
bG9yJiBjb2xvciwgU2hhZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQogewogICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CiAg
ICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRl
LnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSB0cnVlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRm
b3JtU2hhZG93KG9mZnNldCwgYmx1ciwgY29sb3IpOworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHJhZGl1c01vZGU7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVh
clNoYWRvdygpCkBAIC01MTksMTUgKzQxMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVh
clNoYWRvdygpCiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKICAgICBt
X3N0YXRlLnNoYWRvd0JsdXIgPSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigp
OwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxz
ZTsKLSNlbmRpZgotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyU2hh
ZG93KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJQbGF0Zm9ybVNoYWRvdygp
OworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQ7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CkBAIC01NDQsNjYgKzQz
MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgIG1fc3RhdGUuZmlsbENvbG9yID0gY29sb3I7CiAgICAgbV9zdGF0ZS5maWxsR3Jh
ZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29sb3IpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykKLXsKLSAgICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXM7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRy
YW5zZm9ybXNDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50
aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKQotewotICAgIG1fc3RhdGUuc2hvdWxkQW50aWFs
aWFzID0gc2hvdWxkQW50aWFsaWFzOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMoc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpCi17Ci0gICAg
bV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOwotICAgIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc2hvdWxk
U21vb3RoRm9udHMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU3VicGl4
ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotewotICAg
IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250
c0NoYW5nZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
Ci17Ci0gICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKLQotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNo
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybUltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYm
IHBhdHRlcm4pCkBAIC02MTEsOCArNDM5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0
cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLnN0cm9rZUNv
bG9yID0geyB9OwogICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1f
c3RhdGUuc3Ryb2tlUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYyMCw4
ICs0NDcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRl
cm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKICAgICBtX3N0YXRl
LmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1v
dmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAg
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNo
YW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSkKQEAgLTYzMCwxNSArNDU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZm
aW5lVHIKICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAg
ICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIG1fc3RhdGUu
ZmlsbFJ1bGUgPSBmaWxsUnVsZTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7
CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdy
YWRpZW50Q2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0pCkBAIC02NDcsNjQgKzQ2NSwzOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3Qg
QWZmaW5lVHJhbgogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7
CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNw
YWNlVHJhbnNmb3JtOwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSk7IC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0
dGVybj8KKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bEdyYWRpZW50Q2hhbmdlKTsKKyAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNp
dHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkK
IHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7Ci0gICAgZWxzZQotICAgICAgICBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSk7Ci0gICAgKyttX3RyYW5zcGFyZW5jeUNvdW50OworICAgICsrbV90cmFu
c3BhcmVuY3lMYXllckNvdW50OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBlbHNlCi0gICAgICAgIGVuZFBsYXRmb3JtVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKLSAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lDb3VudCA+IDApOwotICAgIC0t
bV90cmFuc3BhcmVuY3lDb3VudDsKKyAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50
ID4gMCk7CisgICAgLS1tX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKIEZsb2F0U2l6ZSBH
cmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRp
b25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIEZsb2F0U2l6ZSgpOwotCiAgICAgLy8gRGlzcGxheSBsaXN0IHJlY29yZGluZyBm
b3IgdGV4dCBjb250ZW50IGlzIGRvbmUgYXQgZ2x5cGhzIGxldmVsLiBTZWUgR3JhcGhpY3NDb250
ZXh0OjpkcmF3R2x5cGhzLgogICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBv
aW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNl
cywgbnVtR2x5cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgRm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBo
cywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8p
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
Zm9udC5kcmF3RW1waGFzaXNNYXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8p
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNj
YWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBCaWRpUmVzb2x2ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRp
UmVzb2x2ZXI7CiAgICAgYmlkaVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJl
Y3Rpb24oKSwgcnVuLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwogICAgIGJpZGlSZXNvbHZlci5z
ZXRQb3NpdGlvbklnbm9yaW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIDAp
KTsKQEAgLTczNCwxOSArNTI3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4
dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIGJpZGlS
dW5zLmNsZWFyKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybUltYWdlKGltYWdl
LnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Ci19Ci0KIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgaW1hZ2VQYWludGluZ09wdGlvbnMpCiB7CiAgICAgcmV0dXJuIGRyYXdJbWFnZShp
bWFnZSwgRmxvYXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBpbWFnZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjAs
MTggKzU0MCwxMiBAQCBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2Uo
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbgogCiBJbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhp
cywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJh
dygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKIEltYWdlRHJhd1Jl
c3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2Nv
cGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGlt
YWdlLmRyYXdUaWxlZCgqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNp
bmcsIG9wdGlvbnMpOwogfQpAQCAtNzc5LDkgKzU1Myw2IEBAIEltYWdlRHJhd1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKICAgICBJbWFnZTo6VGls
ZVJ1bGUgaFJ1bGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIGlmIChoUnVsZSA9PSBJ
bWFnZTo6U3RyZXRjaFRpbGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CiAgICAg
ICAgIC8vIEp1c3QgZG8gYSBzY2FsZS4KICAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwg
ZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CkBAIC04MDMsMTQgKzU3NCw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCAmJiBtX2ltcGwtPmNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZSkpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9w
dGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxp
dHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRp
b25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3Rp
bmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQpAQCAtODMzLDM2ICs1OTYsMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlLCBjb25zdAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0lt
YWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdJbWFnZUJ1ZmZlcigqaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAg
IGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMs
IG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoV1RGTW92ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRp
b25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdQYXR0ZXJuKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZHJhd1BsYXRmb3JtUGF0dGVybihpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGlt
YWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRS
b3VuZGVkUmVjdChyZWN0KTsKICAgICBjbGlwUGF0aChwYXRoKTsKQEAgLTg3MCw5ICs2MTEsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKICAg
ICAgICAgY2xpcE91dChyZWN0LnJlY3QoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTg4NSwxNCAr
NjIzLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByZWN0KQogCiBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdD
b21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdp
bmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5jbGlwVG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoZHJhd2luZ0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29t
bWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29s
b3JTcGFjZSwgKnRoaXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBA
IC05MDQsNjEgKzYzNCwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xpcFRvSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlz
LCBkZXN0aW5hdGlvblJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkg
JiYgIVVTRShDQUlSTykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29u
c3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwog
fQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9
IG1vZGU7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJl
Y3QsIGdyYWRpZW50KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZp
bGwoKnRoaXMsIHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5m
aWxsUmVjdChyZWN0LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRl
T3BlcmF0aW9uKCk7CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwog
ICAgIGZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU4LDE2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29tcG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJl
Y3QocmVjdCwgY29sb3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBpZiAocmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24o
Y29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJv
dW5kZWRSZWN0KHJlY3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0
LCBjb2xvcik7CiAgICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRp
b24oKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwg
Y29tcG9zaXRlT3BlcmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAh
VVNFKERJUkVDVDJEKSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg3
LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1
bGUpOwogICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFs
cGhhID0gYWxwaGE7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVu
ZE1vZGUgPSBibGVuZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRp
b25DaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9z
aXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1h
c2spCi17Ci0gICAgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNr
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lm
IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNl
RGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVz
ZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAh
VVNFKERJUkVDVDJEKQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0
aGUgZHJhd2luZyBtb2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2lu
Z01vZGVGbGFncykKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJF
Q1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9r
ZVN0eWxlKQoteworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAm
JiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxk
U21vb3RoRm9udHMoYm9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShE
SVJFQ1QyRCkgJiYgIVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJh
dGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2lu
dCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVu
U3R5bGUpCiB7CkBAIC0xMTAyLDI0ICs3MjQsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRq
dXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgog
ICAgIH0KIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2Vu
ZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9y
KGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRm
b3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBG
bG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRl
bHlJbmNsdWRlRGV2aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM3LDEwIEBAIEZsb2F0U2l6ZSBH
cmFwaGljc0NvbnRleHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zCiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3Jj
UmVjdC5zaXplKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxFbGxpcHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
cGxhdGZvcm1GaWxsRWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBh
dGgocGF0aCk7CisgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcs
MjMgKzc1NywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lm
ICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgo
ZWxsaXBzZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxp
cHNlKTsKKyAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQo
KSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzLCBzdHlsZSk7CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29t
cHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHBy
aW50aW5nKQogewpAQCAtMTIxOCwyMCArNzk1LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6Y29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8K
ICAgICByZXR1cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhp
Y2tuZXNzKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0
YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwot
ICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0g
ICAgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAg
ICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5
bGUoc3RhdGUuc3Ryb2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEp
OwotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0
YXRlLnNob3VsZEFudGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhz
dGF0ZS5zaG91bGRTbW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFz
aGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0
CiB7CiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2
ICs4NDYsMTUgQEAgVmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGlu
ZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEs
IHBvaW50MiB9OwogfQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IEZsb2F0UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0
aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0K
LSNlbmRpZgotCiAjaWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVy
KSkgewotICAgICAgICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0
aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRl
KCktPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAj
ZW5kaWYKIAordm9pZCBHcmFwaGljc0NvbnRleHROdWxsOjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGM3OGFm
N2UyNWRkYjU0MTQzY2ViNTlhMTFmZmZjMjNhYWEzNDcxNjcuLjg0YTIxNzAzYmNjMDEyOWJlYjRm
NjI2MWUyMjY3YzAxYWM1MGNhZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
SW1hZ2UuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQ
YWludGluZ09wdGlvbnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVy
bi5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KQEAgLTg2LDcgKzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwogY2xhc3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3Mg
R3JhcGhpY3NDb250ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTsKIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMg
QEAgZW51bSBjbGFzcyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0
RHJhd2luZ01vZGVGbGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdh
Y3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94
LXNoYWRvdy4KKy8vIEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4Lgor
ZW51bSBjbGFzcyBTaGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBM
ZWdhY3kKK307CisKIGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlk
U3Ryb2tlLApAQCAtMjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
IHsKICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9k
ZTo6Tm9ybWFsIH07CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSB7IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFk
aXVzTW9kZSBzaGFkb3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9Owog
CiAgICAgYm9vbCBzaG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9u
dHMgOiAxOwogICAgIGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBi
b29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBz
aGFkb3dzVXNlTGVnYWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5j
ZU1hc2sgOiAxOwogI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VE
YXJrQXBwZWFyYW5jZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3ND
b250ZXh0U3RhdGVDaGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFz
cyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29u
dGV4dCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQ
T1JUIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAg
IHVzaW5nIEdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdF
QkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFj
dG9yeSYpOworcHVibGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0Owot
ICAgIFdFQkNPUkVfRVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNs
YXNzIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAot
ICAgICAgICBJbnZhbGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0lt
YWdlc1dpdGhBc3luY0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAot
ICAgIH07Ci0gICAgR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJE
KQorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJECiAgICAgZW51bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3Qg
ewogICAgICAgICBDUFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1
LDI3MSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlm
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Owot
ICAgIFdFQkNPUkVfRVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBh
aW50aW5nRGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAg
ICBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsg
fQotICAgIGJvb2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZh
bGlkYXRpbmdDb250cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhB
c3luY0RlY29kZXMoKSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9
PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0Rl
Y29kZXM7IH0KLSAgICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29u
czo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5n
RGlzYWJsZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJm
b3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVz
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29u
dGVudGZ1bFBhaW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRl
CisKKyAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0
ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ry
b2tlVGhpY2tuZXNzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0K
IAotICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ry
b2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxl
OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVD
aGFuZ2UpOyB9CiAgICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnN0cm9rZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9r
ZUNvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQ
YXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9r
ZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
ID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxH
cmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQq
IHN0cm9rZUdyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5n
ZXQoKTsgfQogCi0gICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRG
aWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5n
ZSk7IH0KICAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmls
bFJ1bGU7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENv
bG9yJik7CiAgICAgY29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuZmlsbENvbG9yOyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYm
KTsKICAgICBQYXR0ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmls
bFBhdHRlcm4uZ2V0KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRp
ZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAg
R3JhZGllbnQqIGZpbGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRp
ZW50LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wp
OworICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykgeyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9v
bCk7CisgICAgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsg
bV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAg
ICAgYm9vbCBzaG91bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFu
dGlhbGlhczsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250
cyhib29sKTsKKyAgICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3Ro
Rm9udHMpIHsgbV9zdGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9u
dHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJs
ZXMgc3VicGl4ZWwtcXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1h
bmNlIG9mIGFsaWduaW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8g
ZGlzYWJsZSB0byB0byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMu
Ci0gICAgdm9pZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMpIHsgbV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBz
aG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3Vs
ZFN1YnBpeGVsUXVhbnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdl
KTsgfQorICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAot
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJu
KCk7Ci0gICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25z
dCBQYXRoJik7CisgICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhh
ID0gYWxwaGE7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBo
YUNoYW5nZSk7IH0KKyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxw
aGE7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsgfQorCisgICAgdm9pZCBzZXREcmF3
THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1fc3RhdGUuZHJhd0x1bWlu
YW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsgfQorICAgIGJvb2wgZHJh
d0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNr
OyB9CisKKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBt
b2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7IH0KKyAgICBU
ZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnRleHREcmF3aW5nTW9kZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0NB
TGF5ZXJDb250ZXh0KGJvb2wpOwotICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygp
OworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0Jiwg
Q29sb3ImKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCk7CisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93
KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0Js
dXIgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNl
dC5oZWlnaHQoKSk7IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVy
biBoYXNWaXNpYmxlU2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFy
a0FwcGVhcmFuY2U7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpV
c2VEYXJrQXBwZWFyYW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAg
Ym9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzdG9yZSgpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAg
dW5zaWduZWQgc3RhY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAor
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2Ug
cmVhbGx5IGJlIHB1YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQ
YXR0ZXJuKCkgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5z
dGVhZCBvZiBhIHdoYXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/Cisg
ICAgdmlydHVhbCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENh
biB0aGlzIGJlIGEgR3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBq
dXN0IGJlIHJlYWQgb2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29udGV4dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsgfQorCisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdN
b2RlIHsKKyAgICAgICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1l
bnNpb25zCisgICAgfTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMo
RmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tl
U3R5bGUpOworCisgICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhv
ZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5l
eGNlcHQgZHJhd1JlY3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2Vz
CiAgICAgLy8gdXNpbmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRl
cnMgKG9mIHRoZSBjb3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzID0gMSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNl
Q29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0Nv
bG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IHsgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQogCi0gICAgdm9pZCBmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJs
ZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
ZGllbnQmKTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOworICAg
IC8vIEZJWE1FOiBXaHkgYXJlbid0IHRoZXNlIHBhcnQgb2YgdGhlIHN0YXRlPworICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVk
aWEKIAotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlv
bjo6RnJvbUltYWdlIH0pOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2Ug
fSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7
CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2Uo
SW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3Jp
ZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRT
aXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFj
dG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVm
UHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdl
QnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5
IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KKyNpZiBFTkFCTEUoVklERU8pCisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOworI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29u
c3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHZvaWQgY2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIGVudW0gY2xh
c3MgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRv
Q3JlYXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0
aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7CiAgICAgCi0g
ICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldFRleHREcmF3aW5n
TW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0gICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4
dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0K
LQotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBw
ZWFyYW5jZShib29sKTsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQotI2VuZGlmCi0KLSAgICBGbG9hdFNpemUg
ZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51
bGxvcHQpOwotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9u
YWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpOwotCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0OwogCi0gICAgZW51bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3Vu
ZEFsbFNpZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAg
IEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5n
TW9kZSA9IFJvdW5kQWxsU2lkZXMpOworICAgIC8vIFRleHQKIAotICAgIEZsb2F0UmVjdCBjb21w
dXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5n
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJl
Y3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxl
ID0gU29saWRTdHJva2UpOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tl
KTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxv
YXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0g
V1RGOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1
bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBG
b250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lDb3VudCA+IDAp
ICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBG
bG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0Jiwg
Ym9vbCBwcmludGluZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdMaW5l
Rm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
ID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKLSAgICAvLyBMZWdhY3kgc2hh
ZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRv
dy4KLSAgICAvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KLSAg
ICB2b2lkIHNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25z
dCBDb2xvciYpOworICAgIC8vIFRyYW5zcGFyZW5jeSBMYXllcnMKIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xlYXJTaGFkb3coKTsKLSAgICBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBm
bG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJhbnNw
YXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4g
MCkgJiYgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsgfQogCi0gICAgYm9vbCBoYXNWaXNp
YmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUo
KTsgfQotICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRv
dygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgo
KSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7IH0KLSAgICBib29sIGhhc0JsdXJy
ZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgbV9zdGF0ZS5z
aGFkb3dCbHVyOyB9CisgICAgLy8gRm9jdXMgUmluZ3MKIAotICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJik7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRp
b24/IE9yIGVsc2V3aGVyZT8KICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNv
bnN0IENvbG9yJik7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYp
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGlt
ZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKICNlbmRpZgog
Ci0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbik7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLQotICAgIHZvaWQgc2V0
QWxwaGEoZmxvYXQpOwotICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5h
bHBoYTsgfQorICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQotICAgIEJsZW5kTW9k
ZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsg
fQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29sKTsKLSAgICBib29sIGRyYXdM
dW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzazsg
fQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBieSA8Y2FudmFzPiBj
b2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIGNsaXBwaW5n
IG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAgICAvLyB0aGUgZGlzY2lwbGluZSBp
cyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9
IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwotCi0g
ICAgdm9pZCBzY2FsZShmbG9hdCBzKQotICAgIHsKLSAgICAgICAgc2NhbGUoeyBzLCBzIH0pOwot
ICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwot
ICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKKyAgICB2b2lkIHNjYWxlKGZs
b2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9CisgICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5S
YWRpYW5zKSA9IDA7CiAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7
IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CiAgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOworICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwogCi0gICAgdm9p
ZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9p
ZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJl
Y3QmKTsKLSAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAg
IHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwogCiAgICAg
ZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlLCBQ
b3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0ID0gMDsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxl
IGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFraW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKICAg
ICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1l
bnQuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAg
RmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgRmxvYXRTaXplIHNjYWxlRmFjdG9y
Rm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3IpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRT
aXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNj
YWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRl
Y3RlZCgpIHsgbV9jb250ZW5mdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgY29u
dGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZDsgfQorICAgIC8vIExpbmtzCiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0
KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNl
dERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNv
bnN0IEZsb2F0UG9pbnQmKSB7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFs
TGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gQ29udGVudGZ1bCBQYWlu
dCBEZXRlY3Rpb24KKworICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1f
Y29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgYm9vbCBjb250ZW5mdWxQYWlu
dERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQor
CisgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5k
IHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9XUykKICAgICBIREMgZ2V0
V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpOyAv
LyBUaGUgcGFzc2VkIGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNvbXBv
c2l0aW5nIGluc2lkZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgogICAgIHZvaWQgcmVsZWFzZVdpbmRv
d3NDb250ZXh0KEhEQywgY29uc3QgSW50UmVjdCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpOyAv
LyBUaGUgcGFzc2VkIGluIEhEQyBzaG91bGQgYmUgdGhlIG9uZSBoYW5kZWQgYmFjayBieSBnZXRX
aW5kb3dzQ29udGV4dC4KICAgICBIREMgaGRjKCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oV0lOKQot
ICAgIEdyYXBoaWNzQ29udGV4dChIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1F
OiBUbyBiZSByZW1vdmVkLgogCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBleGlzdDsg
d2UgbmVlZCBhIGRpZmZlcmVudCBwbGFjZSB0bworICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3
ZWVuIFdpbmRvd3MgQ0cgYW5kIFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCisgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
IGNvbnN0ID0gMDsKKyNpZiBQTEFURk9STShXSU4pCiAgICAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSwg
Y2hpbGQgd2luZG93cyBzaG91bGQgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQKICAgICAv
LyByYXRoZXIgdGhhbiBhbGxvd2luZyB0aGVtIGp1c3QgdG8gcmVuZGVyIHRvIHRoZSBzY3JlZW4u
IERlZmF1bHRzIHRvCiAgICAgLy8gZmFsc2UuCkBAIC01NjQsMTIgKzU3OCwxMiBAQCBwdWJsaWM6
CiAjaWYgVVNFKERJUkVDVDJEKQogICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElEMkQxRENSZW5k
ZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJl
IHJlbW92ZWQuCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBzeXN0
ZW1GYWN0b3J5KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0
KiBkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisgICAgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVt
RmFjdG9yeSgpOworICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRh
cmdldCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpbkRyYXcoKTsKKyAgICB2b2lk
IGJlZ2luRHJhdygpOwogICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBoYShjb25z
dCBDb2xvciYpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygpOworICAg
IHZvaWQgZW5kRHJhdygpOwogICAgIHZvaWQgZmx1c2goKTsKIAogICAgIElEMkQxQnJ1c2gqIHNv
bGlkU3Ryb2tlQnJ1c2goKSBjb25zdDsKQEAgLTU4NSw3NyArNTk5LDE1NSBAQCBwdWJsaWM6CiAj
ZW5kaWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0
aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZpbGxFbGxpcHNlQXNQYXRoKGNvbnN0
IEZsb2F0UmVjdCYpOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmKTsKIAotICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3Q7CisgICAgRmxv
YXRSZWN0IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3Qg
RmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKKworICAgIGZsb2F0IGRhc2hlZExp
bmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKKyAgICBmbG9hdCBkYXNo
ZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OworICAgIGZsb2F0
IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBh
dHRlcm5XaWR0aCwgZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OworICAgIFZlY3RvcjxGbG9hdFBv
aW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9h
dCBjb3JuZXJXaWR0aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25z
dDsKIAotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGltcGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0
KCk7IH0KKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSBtX3N0YXRlOwogCiBwcml2YXRlOgotICAg
IHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdm9pZCBw
bGF0Zm9ybURlc3Ryb3koKTsKKyAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1f
c3RhY2s7CiAKLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBi
b29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVu
Y3lMYXllckNvdW50IHsgMCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7
IGZhbHNlIH07Cit9OwogCi0jaWYgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgcGxhdGZvcm1Jbml0
KEhEQywgSUQyRDFSZW5kZXJUYXJnZXQqKiwgUkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsK
LSAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCosIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlKTsKLSNlbmRpZgorLy8gRklYTUU6IE1vdmUgdG8gYSBzZXBhcmF0
ZSBmaWxlLgorY2xhc3MgR3JhcGhpY3NDb250ZXh0TnVsbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDog
dWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50
cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAgICAgICAg
RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKIAotICAgIHZvaWQgc2F2ZVBsYXRmb3Jt
U3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CisgICAgR3JhcGhpY3ND
b250ZXh0TnVsbChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcmVhc29ucykKKyAgICAgICAgOiBt
X3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhyZWFzb25zKQorICAgIHsKKyAgICB9CiAKLSAgICB2
b2lkIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKK3By
aXZhdGU6CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBzZXRJc0NBTGF5
ZXJDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKIAotICAgIHZvaWQgc2V0UGxhdGZv
cm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VT
dHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhm
bG9hdCk7CisgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zOjpOb25lOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQorICAgIGJv
b2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29u
czo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQorICAgIGJvb2wgZGV0ZWN0
aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50
ZnVsUGFpbnQ7IH0KIAotICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3Im
KTsKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsIHsgfQogCi0gICAgdm9p
ZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3Jt
U2hvdWxkU21vb3RoRm9udHMoYm9vbCk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOworI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwg
eyB9CisjZW5kaWYKIAotICAgIHZvaWQgc2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIGNsZWFyUGxhdGZvcm1TaGFk
b3coKTsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgZmluYWwgeyB9CiAKLSAgICB2b2lkIHNldFBsYXRmb3JtQWxwaGEoZmxv
YXQpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9
CiAKLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOworICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQogCi0gICAgdm9pZCBmaWxsRWxsaXBzZUFz
UGF0aChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBh
cHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNl
bmRpZgogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwg
eyB9CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQor
ICAgIC8vIEZJWE1FOiBJcyBpdCBvayB0aGF0IHRoaXMgZG9lc24ndCB3b3JrPz8KKyAgICBGbG9h
dFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5n
TW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsIHsgcmV0dXJuIHJlY3Q7IH0KKyAgICB2b2lkIGRy
YXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9r
ZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wg
PSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9CisgICAgdm9pZCBz
ZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpv
aW4pIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpIGZpbmFsIHsgfQorICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5hbCB7
IH0KKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsIHsgfQorICAgIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAg
dm9pZCBzYXZlKCkgZmluYWwgeyB9CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWwgeyB9CisKKyAg
ICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQg
PSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gPSBXVEY6Om51bGxvcHQpIGZpbmFsIHsgcmV0dXJuIHsg
fTsgfQorCisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQsIGNvbnN0IEZsb2F0
UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWwgeyB9CisKKyAgICB2b2lkIGRyYXdFbXBo
YXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21T
dHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgPSAwLCBPcHRpb25hbDx1bnNpZ25l
ZD4gPSBXVEY6Om51bGxvcHQpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSkgZmluYWwgeyB9CisKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsIHsg
fQorCisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZy
b21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0K
KyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRh
dGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90
aGluZzsgfQorCisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyBy
ZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRTaXplJiwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOyB9CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJv
b2wmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHBsYXRmb3Jt
RmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpOwor
ICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZm
ZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOwogCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShj
b25zdCBQbGF0Zm9ybUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKTsKLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3Qg
UGxhdGZvcm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisgICAg
dm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5h
bCB7IH0KIAotICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01v
ZGVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENvbG9yJik7CisgICAg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3ND
b250ZXh0Jik+JiYpIGZpbmFsIHsgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6
U3VjY2VzczsgfQorICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KIAotICAgIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0
aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKLSAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVy
bldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OwotICAgIGZsb2F0IGRhc2hlZExpbmVQ
YXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRoKGZsb2F0IHBhdHRlcm5XaWR0aCwg
ZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0OwotICAgIFZlY3RvcjxGbG9hdFBvaW50PiBjZW50ZXJM
aW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0
aCwgRmxvYXRQb2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKSBjb25zdDsKKyAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CiAKLSAgICBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0SW1wbD4gbV9pbXBsOworICAgIHZvaWQgZmlsbFJv
dW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsIHsgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsK
LSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7CisjaWYgRU5BQkxF
KFZJREVPKQorICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1MpCisgICAgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBm
aW5hbCB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYgLy8gT1MoV0lORE9XUykKIAorcHJpdmF0
ZToKICAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKLSAgICB1bnNpZ25l
ZCBtX3RyYW5zcGFyZW5jeUNvdW50IHsgMCB9OwotICAgIGJvb2wgbV9jb250ZW5mdWxQYWludERl
dGVjdGVkIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
ewpAQCAtNzQ0LDggKzgzNiw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7
CiB9OwogCi0KLQogY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRp
b25RdWFsaXR5VG9Vc2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMjE0YTBhODkyYjZlOTlmOTlkYjgyM2NlYTM1MjFiNGM1ZmY1NWM3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6OkdyYXBoaWNzQ29u
dGV4dEltcGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIDogbV9ncmFwaGljc0NvbnRl
eHQoY29udGV4dCkKLXsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4
dEltcGwoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjQ2ZGI3NGQzNThlMWUzYjdmZjNiZDY1MzNlZjM0
YmQzODQ3OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29u
dGV4dEltcGwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dEltcGwpOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29u
dGV4dEltcGwoR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0
SW1wbCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1BsYXRm
b3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhd0ltYWdlQnVm
ZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1
YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotCi0jaWYgVVNFKENHKQot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBh
bmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAw
OwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29u
c3QgUGF0aCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHNhdmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpID0gMDsKLQotICAgIHZp
cnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5k
UnVsZSkgPSAwOwotICAgIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pID0gMDsKLSNpZiBFTkFCTEUo
VklERU8pCi0gICAgdmlydHVhbCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2Fu
UGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3QgPSAwOwotI2VuZGlm
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0g
MDsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpID0gMDsKLQotcHJpdmF0ZToK
LSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIEdyYXBoaWNzQ29udGV4dCYg
bV9ncmFwaGljc0NvbnRleHQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKaW5kZXggNDQwZjcyNTM1ODJjYzY0
OTMxNWYyNDczYjM5MDMyMmIwYTY2MjA4NS4uMTM4MGU3ZWQ5ZmM4ZjM2NDhlZjA2NzE5MzQ4ZGJl
NzcxY2Y5OTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNw
cApAQCAtMTg4LDggKzE4OCw5IEBAIEltYWdlRHJhd1Jlc3VsdCBJbWFnZTo6ZHJhd1RpbGVkKEdy
YXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjCiAgICAgfQogCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBGSVhNRTogRG8gd2UgcmVhbGx5IHdhbnQg
dG8ga2VlcCB0aGlzIGJlaGF2aW9yIGRpZmZlcmVuY2U/Pz8KICAgICAvLyBXaGVuIHVzaW5nIGFj
Y2VsZXJhdGVkIGRyYXdpbmcgb24gaU9TLCBpdCdzIGZhc3RlciB0byBzdHJldGNoIGFuIGltYWdl
IHRoYW4gdG8gdGlsZSBpdC4KLSAgICBpZiAoY3R4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7
CisgICAgaWYgKGN0eHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkKSB7CiAgICAgICAgIGlmIChzaXplKCkud2lkdGgoKSA9PSAxICYmIGludGVyc2VjdGlvbihv
bmVUaWxlUmVjdCwgZGVzdFJlY3QpLmhlaWdodCgpID09IGRlc3RSZWN0LmhlaWdodCgpKSB7CiAg
ICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVNyY1JlY3Q7CiAgICAgICAgICAgICB2aXNpYmxl
U3JjUmVjdC5zZXRYKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgK
aW5kZXggNGQzZjQzMGM2MTdkMTAwMTZlZjUzODBmZDg5YTk0Y2IwYmFlYTZjMy4uMTc2NDc0N2Q2
MTQwY2YxMTZjOWM2NDI2ZGRjOTcxYWMyYmViOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCkBAIC03MSw3ICs3MSw2IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
c3RydWN0IExlbmd0aDsKIApAQCAtODAsNyArNzksNiBAQCBjbGFzcyBJbWFnZU9ic2VydmVyOwog
CiBjbGFzcyBJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlPiB7CiAgICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1w
bDsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbWFnZSgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA4YTM1NTJmZTg5ZjI4
NTQwOWYyNTQ1ODQ5MTNkNWU2ZjFlY2ViMDEzLi43ZDAzZGI2MmQ2NmZjMWY4NmIyN2M2OTI3NGZi
ODdiOWNhOWExMWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcApAQCAtMTk4LDcgKzE5OCw5IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgICwgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyhzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cp
Ci0gICAgaWYgKHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpIHsKKyAgICAvLyBDb3JlIEdy
YXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJk
YXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKKyAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0
aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKyAg
ICBpZiAoc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kp
IHsKICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKHN0YXRl
LnNoYWRvd0JsdXIpOwogICAgICAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUoc2hhZG93Qmx1
ciwgc2hhZG93Qmx1cik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNzhjNzljZDdlODllOTJj
MjZjNGZlNmM0N2RlOTU3ZmZkOGZmOTZjNC4uNDQzYTU2YTJiNzQ1YmViZWRkZDU4MTY3YWQ2YjFk
MzMyMmZiMGI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC0xNzQxLDkgKzE3NDEsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhDb21taXRTdGF0ZSYgY29tbWl0
U3RhdGUsIGNvbnN0IFRyYQogICAgICAgICAKICAgICAgICAgRmxvYXRSZWN0IGluaXRpYWxDbGlw
KGJvdW5kc09yaWdpbigpLCBzaXplKCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlPERpc3BsYXlMaXN0OjpSZWNvcmRlcj4oY29udGV4dCwgKm1fZGlzcGxheUxpc3Qs
IEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7
Ci0gICAgICAgIH0pOworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgY29udGV4dCgqbV9k
aXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRy
YW5zZm9ybSgpKTsKICAgICAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmNwcAppbmRleCAzYjQ0OGFmMDRmYTI1NWU0Zjg0M2VmNDI5ZWJkNzdjOWExZDg2
OGFiLi42ODgxMjIxYjA0NThkY2M5NDg0ZjM0ZjQxNjYzZGRkNzRlMTI4NzdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yU2Vy
aWFsaXphdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR0RJVXRp
bGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgi
CkBAIC04OTAsNyArODkwLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQ
b2ludChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dGbG9hdCB4LCBDR0Zsb2EKICAgICBGb250Q2Fz
Y2FkZSBmb250ID0gRm9udENhc2NhZGUoV1RGTW92ZShkZXNjKSwgMCwgMCk7CiAgICAgZm9udC51
cGRhdGUobnVsbHB0cik7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4dCk7CisgICAg
R3JhcGhpY3NDb250ZXh0Q0cgY2coY29udGV4dCk7CiAgICAgY2cuc2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CiAgICAgY2cuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgSW50UG9pbnQo
eCwgeSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKaW5k
ZXggZDNmNDQ4YWNhOTAzMGY3N2Q3OGU1N2M0MmYzMDUyZDZhOTg5MzFjNC4uZGJkMzYzZTYxM2Nl
YjA3ZTAzNjY3MzM1NWQwNDdlZGFhYTUyZTUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaWYgVVNFKENBKQogCiAjaW5j
bHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgog
I2luY2x1ZGUgIlRpbGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCkBA
IC05NCw3ICs5NCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlD
YWxsYmFjayhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0CiAKICAgICBQbGF0Zm9ybUNB
TGF5ZXI6OmZsaXBDb250ZXh0KGNvbnRleHQsIGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBv
cnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJl
IHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5n
LiB0aWxlZCBsYXllcnMpCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJX
aW5JbnRlcm5hbDo6ZHJhd1JlcGFpbnRDb3VudGVycyhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dD
b24KICAgICBlbHNlCiAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNhY2hlZENHQ29sb3IoQ29s
b3I6OnJlZCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBQ
bGF0Zm9ybUNBTGF5ZXI6OmRyYXdSZXBhaW50SW5kaWNhdG9yKGdyYXBoaWNzQ29udGV4dCwgb3du
ZXIoKSwgZHJhd0NvdW50LCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVk
QmFja2luZ0xheWVyV2luLmNwcAppbmRleCBjNWE3M2U4ZDNhZTliYjQ5YTk2YmUyN2Y1MzI3ZTA2
YzA2MjE0ZmMzLi5iNTNhMzM3YmE0Y2NkY2YyM2Y3ODU0OTA1YjI3NjA3ZWM5MGMwNjRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAog
I2lmIFVTRShDQSkKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVk
ZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTg2LDcg
Kzg2LDcgQEAgdm9pZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxheUNhbGxiYWNrKENB
Q0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHRSZWYKICAgICBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCA9IG93bmVyKCktPm93bmVyKCk7CiAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9z
aXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gY2xpZW50LT5wbGF0Zm9y
bUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29u
dGV4dChjb250ZXh0KTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBm
cm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5CiAgICAgLy8g
c21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IGNmNDgzNzYwM2UwYWIxOTA4ODk3NWYxMGU0MmRl
NzVhMTI4YjA3NTcuLmJhNTk0YWU4Y2MyYTgwMmI2NTYwNjBmYjBlM2JiYTIyMTg2OTg0MjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKIAogI2lmIFVTRShDQUlSTykKIApAQCAtMzksNyAr
MzksNiBAQAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fp
cm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAg
LTU3LDYzMyArNTYsMzU3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250
ZXh0KQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3Jt
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCisgICAgOiBtX3BsYXRmb3JtQ29udGV4dChw
bGF0Zm9ybUNvbnRleHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKIHsKLSAgICBpZiAoIXBsYXRm
b3JtQ29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSgqcGxhdGZvcm1Db250ZXh0KTsKLSAgICBtX2RhdGEtPnBs
YXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fZGF0YSk7Ci0gICAgbV9k
YXRhLT5zeW5jQ29udGV4dChwbGF0Zm9ybUNvbnRleHQtPmNyKCkpOworICAgIG1fcGxhdGZvcm1D
b250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKKyAgICBt
X3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dENhaXJv
OjpHcmFwaGljc0NvbnRleHRDYWlybyhjYWlyb190KiBjYWlyb0NvbnRleHQpCisgICAgOiBtX293
bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJv
Q29udGV4dCkpCisgICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4
dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQogewotICAgIGlmIChtX2RhdGEpIHsKLSAgICAgICAg
bV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRy
KTsKLSAgICAgICAgZGVsZXRlIG1fZGF0YTsKLSAgICB9CisgICAgbV9wbGF0Zm9ybUNvbnRleHQu
c2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0
ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLUFmZmluZVRyYW5z
Zm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNj
YWxlKSBjb25zdAorR3JhcGhpY3NDb250ZXh0Q2Fpcm86On5HcmFwaGljc0NvbnRleHRDYWlybygp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRy
YW5zZm9ybSgpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZh
dGUobnVsbHB0cik7Cit9CiAKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBs
LT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q2Fpcm86Omhhc1Bs
YXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK3sK
ICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKK1BsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRDYWlybzo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4g
bV9pbXBsLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1D
b250ZXh0OworICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZSgpOwogICAgIENhaXJvOjpzYXZlKCpwbGF0Zm9ybUNvbnRleHQoKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogICAgIENhaXJv
OjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJl
Y3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1Jl
Y3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3UmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENv
bG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
IG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250
ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxw
aGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNl
ZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dzLgotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0
cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0xpbmUoKnBsYXRm
b3JtQ29udGV4dCgpLCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7
CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2ly
Y2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5m
aWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5
KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZmlsbFBhdGgoKnBsYXRmb3JtQ29u
dGV4dCgpLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5
KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpzdHJva2VQYXRoKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxs
UmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENh
aXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIENhaXJvOjpGaWxsU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgp
LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKK30KIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xvcik7Cit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Cisg
ICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBpZiAoIXBhdHRlcm4pCiAgICAgICAgIHJldHVy
bjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJv
OjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUoKSkpOworICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKKyAg
ICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRlcm4uZ2V0KCkp
OworICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
cHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNv
bnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIENhaXJvOjpmaWxsUmVj
dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOworICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1D
b250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9CiAKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CiAgICAgQ2Fpcm86OmNsaXAoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgQ2Fpcm86OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwog
fQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlw
Qm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlm
IChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29u
dGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QpOworfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICNp
ZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50
Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKICAgICBVTlVTRURfUEFSQU0od2lkdGgpOwogICAg
IFVOVVNFRF9QQVJBTShvZmZzZXQpOwogICAgIHJldHVybjsKICNlbHNlCi0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0aCwgb2Zmc2V0
LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNvbnRleHQo
KSwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAjaWYgUExBVEZPUk0oV1BF
KSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBy
ZWN0cywgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFN
KG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIHdp
ZHRoLCBjb2xvcik7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
VW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGlu
ZXMsIFN0cm9rZVN0eWxlKQogewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigp
LCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcs
IGRvdWJsZVVuZGVybGluZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBT
dHJva2VTdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xv
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIocmVjdCwgc3R5
bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QsIHN0eWxlKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSBy
b3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0Owot
Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRUb0RldmljZVBp
eGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwotCiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91
bmRUb0RldmljZVBpeGVscygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6dHJhbnNsYXRl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYpCi17Ci0gICAgLy8gQ2Fpcm8gY29udGV4
dHMgY2FuJ3QgaG9sZCBzZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCi0gICAgLy8gc28g
d2Ugc2V0IHRoZW0ganVzdCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKIHsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZp
bGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3
ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6
c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25l
c3MpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
ZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlU3R5bGVDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9w
bGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MoKnBs
YXRmb3JtQ29udGV4dCgpLCBzdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAo
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcg
dGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENH
IGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8m
IHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWln
aHQoKSB9OworICAgICAgICB9CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgc3Ryb2tlU3R5bGUpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciwgc3RhdGUuYmxlbmRNb2RlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZv
cm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNmb3Jt
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgQ2Fpcm86OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9y
bSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6U3RhdGU6OnNldENUTSgqcGxhdGZv
cm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQsIGNvbnN0IENvbG9y
JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkKIHsKLSAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
ewotICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29j
aWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgLy8gV2UgZmxpcCB0
aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMK
LSAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IG9mZnNldC53aWR0aCgpLCAtb2Zmc2V0
LmhlaWdodCgpIH07Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0
Zm9ybVNoYWRvdygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3Jt
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5
KTsKICAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCks
IG9wYWNpdHkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3Bh
cmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFuc3BhcmVuY3lM
YXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6
Y2xlYXJSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ry
b2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgQ2Fpcm86OnN0cm9rZVJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBs
aW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxp
bmVDYXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAobGluZUNhcCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgbGluZUNhcCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDYWlybzo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMs
IGRhc2hPZmZzZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGlu
ZUpvaW4gbGluZUpvaW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lSm9pbihM
aW5lSm9pbiBsaW5lSm9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpv
aW4obGluZUpvaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4
dCgpLCBsaW5lSm9pbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IG1pdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBtaXRlcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJl
IHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGltaXQobWl0ZXIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIG1pdGVy
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQpCi17
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGNsaXBQYXRoKHBhdGgsIHdpbmRSdWxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fp
cm86OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJv
dGF0ZShyYWRpYW5zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCks
IHJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xp
cE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZmlsbFJvdW5kZWRS
ZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5pc1ZhbGlkKCkpCisgICAgaWYg
KCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBh
dHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0gICAgQ2Fpcm86OmRyYXdQYXR0ZXJu
KCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CisgICAg
Q2Fpcm86OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZv
cm1JbWFnZSgpLmdldCgpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCitSZW5kZXJpbmdN
b2RlIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFz
KCpwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKKyAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpp
c0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci19Cisg
ICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOwogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAg
IGlmICghaGFzUGxhdGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJv
R2x5cGhzKG51bUdseXBocyk7CisgICAgeworICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAg
ICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQg
fTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKKyAgICAgICAg
ICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICB9CiAK
LSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1D
b250ZXh0KCkpOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250LnBs
YXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKTsKKyAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNl
dCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOworCisgICAgaWYgKCFmb250LmFsbG93c0Fu
dGlhbGlhc2luZygpKQorICAgICAgICBmb250U21vb3RoaW5nID0gRm9udFNtb290aGluZ01vZGU6
Ok5vU21vb3RoaW5nOworCisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENh
aXJvOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgY2Fpcm9H
bHlwaHMsIHhPZmZzZXQsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAorICAg
ICAgICBmb250U21vb3RoaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJjYzFlZWMwNmQzMzM4OTRlYWRiOGIxZGU0
NjZkNjdiYjEwMmFiYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKQEAgLTAsMCArMSwxMTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENv
cHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNhaXJvX3Q7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1Db250ZXh0Q2Fpcm87CisK
K2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENhaXJvIGZpbmFsIDogcHVibGlj
IEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxh
dGZvcm1Db250ZXh0Q2Fpcm8mKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhjYWlyb190Kik7
CisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0Q2Fpcm8oKTsKKworICAgIGJvb2wgaGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzKTsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
IGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lk
IHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgdHJh
bnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFs
OworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisKKyAgICB2
b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0
IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOworCisjaWYg
T1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250
ZXh0OworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlMjYxZWYzMGU2ODNkYzk1OGU3ZjJiOWUxODRiNjU5NjJmM2YzNzkwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0KLSNpZiBV
U0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9h
dFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGVDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVG
YWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAg
IFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxDYWlybz4o
Y29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjcmVhdGVGYWN0b3J5KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW2NhaXJv
Q29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIGNh
aXJvQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJ
bXBsKGNvbnRleHQpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0g
ICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+
KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGlj
c0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29u
dGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
YWlyb190KiBjYWlyb0NvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQp
Ci0gICAgLCBtX293bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0
Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBs
YXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1D
b250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBt
X3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86On5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQotewotICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFn
cyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAg
IENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0
ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0
eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0
aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cg
YW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYg
bXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3Rh
dGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9
IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21w
b3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3Rh
dGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50
aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJTaGFkb3coKQotewotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17
Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXApOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNo
KG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0g
ICAgQ2Fpcm86OnNldExpbmVKb2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVy
TGltaXQpCi17Ci0gICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1p
dGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDYWlybzo6ZmlsbFJlY3Qo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIGF1dG8g
cGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6cmVzdG9y
ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENvbXBv
c2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsK
LQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3Qo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29u
dGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7
Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hhZG93U3Rh
dGUgc2hhZG93U3RhdGUoc3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAg
ICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwg
c2hhZG93U3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZv
cm1Db250ZXh0LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91
c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKQot
ewotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQs
IHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBz
ZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lk
dGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENhaXJvOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIENh
aXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpTdHJv
a2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAg
c3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZykKLXsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPGNh
aXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAgICAgICBhdXRv
IHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
R2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0s
IHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0u
d2lkdGgoKTsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0g
Zm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRoZXRpY0Jv
bGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICghZm9udC5h
bGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhp
bmdNb2RlOjpOb1Ntb290aGluZzsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAg
ICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRp
Y0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJh
d2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0
ZS5zaGFkb3dDb2xvciwKLSAgICAgICAgZm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXcoZ3JhcGhp
Y3NDb250ZXh0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0g
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2Uo
bV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBz
dGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShz
cGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIGltYWdl
LnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGls
ZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENh
aXJvOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tl
Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBz
ZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tl
U3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
LXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyht
X3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9w
bGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6c2F2ZSgpCi17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNv
bnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9yZSgpCi17
Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAg
Q2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0g
ICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBz
aXplKQotewotICAgIENhaXJvOjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRmb3JtQ29u
dGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3Rh
dGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJh
bnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSht
X3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAg
IENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBDYWlybzo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17
Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0
LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRz
KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjphcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
R3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0
ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3Qg
RmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLSNp
ZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cGFpbnRGcmFt
ZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhN
RTogTm90IGltcGxlbWVudGVkLgotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYTFlZWUzOTA3M2EyNmUwOTdiOTZjNzQ2
NTNmYTYxNmY5MjY1MjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChD
KSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNhaXJvX3Q7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0Q2Fpcm87Ci0KLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJ
bXBsIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4
dENhaXJvJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShjYWlyb190Kik7Ci0KLSAgICBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiwgUGxhdGZvcm1Db250ZXh0
Q2Fpcm8mKTsKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0Jiwg
Y2Fpcm9fdCopOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygpOwotCi0g
ICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9y
bUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFk
b3coKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1p
dGVyTGltaXQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBHcmFkaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzYXZlKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIElu
dFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRl
OwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wg
Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3Zl
cnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dENh
aXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJvJiBt
X3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cAppbmRleCBjOWU3MDgwMTQ2YzdmMjMyNzI3ZDFhNDI3ZTExZTZiYzhkMDgxOGYyLi4wNTIxMjIw
ZDYyNTU0NjkzNTI2ZWI0ODc0MDYyYjMwNDA5NmRhYTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJDb2xvclRyYW5zZmVyRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0Nh
aXJvLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcAppbmRleCAzYmU3NTU2OWU5NzNjMmIxNjg5OWE1MDc2Mjc1ZjUyM2ZhODA3MWVhLi45
YjVjMGFkMDc0NDUxODgwZGVmZGQzYzQ4OTJlNGY3M2MyODY0MmM5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVkZSA8
Y2Fpcm8uaD4KQEAgLTUxLDcgKzUxLDcgQEAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYKIAogICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0
KCkpKTsKICAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9jb250
ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworICAgIG1fY29udGV4dCA9IG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAog
R3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGF0aENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BhdGhDYWlyby5jcHAKaW5kZXggODFkMTU4ZTJkZmY3ZTViZjAzYzdiNjVkMDM2ZGRhODk5ZjBm
OTAxZi4uMmExOWU0N2E5YWFjZWMyMDk2YTYwZTk3ZTNiNWM0ODc0NTNkYWFmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3Bw
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9VbmlxdWVQdHIuaCIKICNpbmNsdWRl
ICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJv
LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00MjEsNyArNDIxLDcgQEAgRmxvYXRSZWN0
IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgaWYgKHN0
cm9rZVN0eWxlQXBwbGllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOworICAgICAgICBH
cmFwaGljc0NvbnRleHRDYWlybyBnYyhtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VTdHls
ZUFwcGxpZXIoZ2MpOwogICAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIGJvb2wgUGF0aDo6c3Ry
b2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0
ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdy
YXBoaWNzQ29udGV4dChtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIo
Z3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBlZjNhYzJl
MTM3MWI4ZTFjOTA3ZGExMjQyYTc2Y2U2ZTYxNDc4NzBlLi5mZGIxYWUwNjU3NGJkZjgxNWM2MTY3
MGUwNmNiNjc3YTA3MjM4OWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01NSwxNyArNTUsMTIg
QEAgc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4
dCwgY2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1N0cm9rZUNv
bG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ0dD
b250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihjb2xv
cikpOwotfQotCiBpbmxpbmUgQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShDR0Nv
bnRleHRSZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQo
Q0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpLCBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0NvbnRl
eHRHZXRCYXNlQ1RNKGNvbnRleHQpKSk7CiB9CiAKLXN0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFs
aXR5KQorc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0
eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCiB7CiAgICAgc3dpdGNoIChxdWFsaXR5
KSB7CiAgICAgY2FzZSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDoKQEAgLTgyLDYgKzc3LDM0IEBA
IHN0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHko
Q0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxCiAgICAgcmV0dXJuIEludGVycG9sYXRpb25RdWFsaXR5
OjpEZWZhdWx0OwogfQogCitzdGF0aWMgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBjZ0ludGVycG9s
YXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCit7CisgICAgc3dpdGNo
IChxdWFsaXR5KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OworICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBv
bGF0aW9uTm9uZTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6CisgICAgICAg
IHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTG93OworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25NZWRpdW07CisgICAg
Y2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIGtDR0ludGVy
cG9sYXRpb25IaWdoOworICAgIH0KKyAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7
Cit9CisKK3N0YXRpYyBDR1RleHREcmF3aW5nTW9kZSBjZ1RleHREcmF3aW5nTW9kZShUZXh0RHJh
d2luZ01vZGVGbGFncyBtb2RlKQoreworICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMoVGV4
dERyYXdpbmdNb2RlOjpGaWxsKTsKKyAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMoVGV4
dERyYXdpbmdNb2RlOjpTdHJva2UpOworICAgIGlmIChmaWxsICYmIHN0cm9rZSkKKyAgICAgICAg
cmV0dXJuIGtDR1RleHRGaWxsU3Ryb2tlOworICAgIGlmIChmaWxsKQorICAgICAgICByZXR1cm4g
a0NHVGV4dEZpbGw7CisgICAgcmV0dXJuIGtDR1RleHRTdHJva2U7Cit9CisKIHN0YXRpYyBDR0Js
ZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9kZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBzd2l0Y2ggKGJsZW5kTW9kZSkgewpA
QCAtMTU2LDM1ICsxNzksMzkgQEAgc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRNb2Rl
KENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE0KICAgICByZXR1cm4g
a0NHQmxlbmRNb2RlTm9ybWFsOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3ND
b250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKICAgICBpZiAoIWNnQ29udGV4dCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZShjZ0NvbnRleHQpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFy
dHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxs
Q29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAg
ICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAgbV9z
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFs
aXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7
CisgICAgLy8gRklYTUU6IFRoaXMgaXMgbm90IGdyZWF0LCBiZWNhdXNlIGl0IHNldHMgaXQgYmFj
ayBvbiB0aGUgR3JhcGhpY3NDb250ZXh0LCBidXQgbWF5YmUgaXQgZG9lc24ndCBtYXR0ZXI/Cisg
ICAgc2V0RmlsbENvbG9yKGZpbGxDb2xvcigpKTsKKyAgICBzZXRTdHJva2VDb2xvcihzdHJva2VD
b2xvcigpKTsKKyAgICBzZXRTdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOworICAg
IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNz
Q29udGV4dENHOjp+R3JhcGhpY3NDb250ZXh0Q0coKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9
CiAKLUNHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
Citib29sIEdyYXBoaWNzQ29udGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiB0cnVlOworfQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OnBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkp
OwogICAgIEFTU0VSVChtX2RhdGEtPm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5t
X2NnQ29udGV4dC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNhdmUoKQogewotICAgIEFTU0VSVCgh
cGFpbnRpbmdEaXNhYmxlZCgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0
aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3
YW50IHRvIGF2b2lkIHRoZSBleHRyYQogICAgIC8vIHNhdmUgb2YgdGhlIHNlY29uZGFyeSBjb250
ZXh0IChpbiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTE5MiwxMCAr
MjE5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKICAgICBt
X2RhdGEtPnNhdmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9y
bVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogewotICAgIEFTU0VS
VCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90
IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5j
ZSB3ZSB3YW50IHRvIGF2b2lkIHRoZSBleHRyYQogICAgIC8vIHJlc3RvcmUgb2YgdGhlIHNlY29u
ZGFyeSBjb250ZXh0IChpbiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAg
LTIwNCwxMCArMjMwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0
YXRlKCkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdl
KGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdl
ID0gbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAg
IE1vbm90b25pY1RpbWUgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC0yOTgs
NyArMzIzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KIAogICAgIGF1dG8gb2xkQ29tcG9z
aXRlT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICBhdXRvIG9sZEJsZW5kTW9k
ZSA9IGJsZW5kTW9kZU9wZXJhdGlvbigpOwotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0
aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Cisg
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0
aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhl
IG9yaWdpbiB0byBiZSBhdCAoMCwgMCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4
dCwgYWRqdXN0ZWREZXN0UmVjdC54KCksIGFkanVzdGVkRGVzdFJlY3QueSgpKTsKQEAgLTMyNSwx
MCArMzUwLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHdhc0Fu
dGlhbGlhc2VkKTsKICNlbmRpZgotICAgICAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlv
bihvbGRDb21wb3NpdGVPcGVyYXRvciwgb2xkQmxlbmRNb2RlKTsKKyAgICAgICAgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOwogICAgIH0K
IAotICAgIExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0
OjpkcmF3TmF0aXZlSW1hZ2UgIiA8PCBpbWFnZS5nZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNp
emUgPDwgIiBpbnRvICIgPDwgZGVzdFJlY3QgPDwgIiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6
Om5vdygpIC0gc3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSA8PCAibXMiKTsKKyAgICBMT0dfV0lU
SF9TVFJFQU0oSW1hZ2VzLCBzdHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZl
SW1hZ2UgIiA8PCBpbWFnZS5nZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBpbnRv
ICIgPDwgZGVzdFJlY3QgPDwgIiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3Rh
cnRUaW1lKS5taWxsaXNlY29uZHMoKSA8PCAibXMiKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd1Bh
dHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKQEAgLTMzOSw3
ICszNjQsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENH
Q29udGV4dFJlZiBjb250ZXh0KQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0x
KTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWhlaWdodCk7CiAjZW5k
aWYKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChp
bWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dENHKGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0
KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0
YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTM0NywxNiAr
MzcyLDE4IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykK
ICAgICBjYWxsT25NYWluVGhyZWFkKFtpbWFnZSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0dJbWFn
ZVJlZj4oaW5mbykpXSB7IH0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRm
b3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
dGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5U
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52
ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1h
Z2UucGxhdGZvcm1JbWFnZSgpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7
CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRQ
bGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9w
dGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNv
bXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJl
Y3QuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKQEAg
LTQyMywxNiArNDUwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRl
cm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEYKIH0KIAogLy8gRHJhd3Mg
YSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBhdHRlcm5z
IGFuZCBncmFkaWVudHMgbGlrZSBkcmF3UGF0aCBkb2VzLCBpdCBwcm9iYWJseSBzaG91bGQuCiAg
ICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CiAKQEAgLTQ1OCwxOSArNDc3LDExIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJz
Lgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlj
a25lc3MoKTsKICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkgKyB0aGlja25l
c3MgPT0gcG9pbnQyLngoKSk7CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBpc1ZlcnRpY2FsTGlu
ZSA/IHBvaW50Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQyLngoKSAtIHBvaW50MS54KCk7CkBA
IC01MjYsMzEgKzUzNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludAogICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgdHJ1ZSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKICAg
ICBkcmF3UGF0aChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRy
YW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC01NjUsMTYgKzU2MCw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIENHQ29u
dGV4dFNldFN0cm9rZVBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZw
YXR0ZXJuQWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVy
bigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdl
dFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTYxNiwxNSArNjAzLDEwIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIENHUGF0CiAgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgp
OworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKQEAgLTY1NCwxNiArNjM2LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIH0K
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGgu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KSB7CkBAIC03MTgsMTUgKzY5NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKQEAgLTc5NCwxNiArNzY2LDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICNlbmRpZgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTgzMyw3ICs3OTcs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJu
KCk7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAm
JiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093
blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3du
U2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBD
RyBzaGFkb3dzLgpAQCAtODQ2LDIzICs4MTAsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250
ZXh0LCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBp
ZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0
LCBjb2xvcik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wg
ZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBk
cmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJu
IG9mZiBDRyBzaGFkb3dzLgpAQCAtODgxLDIwICs4MzcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZp
bGxDb2xvciA9IGZpbGxDb2xvcigpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikK
ICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3
T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygp
ICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93
Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFk
b3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRy
YXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTkyNCwx
NiArODc1LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgc2V0Q0dGaWxsQ29s
b3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAK
ICAgICBQYXRoIHBhdGg7CkBAIC05NTEsNyArODk0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXQKICAgICBzZXRGaWxsQ29sb3IoY29sb3IpOwogCiAgICAgLy8gZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoKSBhc3N1bWVzIHRoYXQgdGhlIGVkZ2VzIG9mIHJlY3QgYXJlIGNsaXBwZWQgb3V0LCBz
byB3ZSBvbmx5IGNhcmUgYWJvdXQgc2hhZG93cyBjYXN0IGFyb3VuZCBpbnNpZGUgdGhlIGhvbGUu
Ci0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFz
Qmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAg
IGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250
ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAv
LyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtOTcwLDUyICs5MTMsMjggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXQKICAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBtX2RhdGEt
PmNsaXAocmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3Qp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gRklYTUU6IFVzaW5nIENHUmVjdElu
ZmluaXRlIGlzIG11Y2ggZmFzdGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xpcCBib3VuZGluZyBib3gu
IEhvd2V2ZXIsIGR1ZQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVj
dEluZmluaXRlIGNhbid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQK
ICAgICAvLyBoYXMgY2VydGFpbiB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xh
dGlvbiBvciBhIHNjYWxlLiBBbmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAg
ICAvLyB3ZSBjYW5ub3QgdXNlIGl0IGluIGZvciBhIHByaW50aW5nIGNvbnRleHQgZWl0aGVyLgog
ICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5V
c2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9
IGtDR0NvbnRleHRUeXBlUERGICYmICghaXNBY2NlbGVyYXRlZENvbnRleHQoKSB8fCAoIWN0bS5i
KCkgJiYgIWN0bS5jKCkpKTsKKyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250
ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIo
KSAmJiAhY3RtLmMoKSkpOwogICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5m
aW5pdGUgPyBDR1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0
Zm9ybUNvbnRleHQoKSksIHJlY3QgfTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIENHQ29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0
cywgMik7CiAgICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRk
UmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRm
b3JtQ29udGV4dCgpKSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKQEAgLTEwMjMsMTYgKzk0
Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiAg
ICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgs
IGNsaXBSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwpAQCAtMTA0OSwy
MyArOTYwLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0aCk7CiB9CiAKLUlu
dFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAg
ICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KICAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogCiAgICAg
c2F2ZSgpOwogCkBAIC0xMDc1LDEyICs5NzcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgbV9kYXRhLT5t
X3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAg
Q0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7CkBAIC0xMDg4LDExICs5ODcs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigp
CiAgICAgcmVzdG9yZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCBh
cHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQpAQCAtMTEwMCw3ICs5OTQsNyBAQCBz
dGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsCiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVO
VVNFRF9QQVJBTSh5T2Zmc2V0KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkKKyAgICBpZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChDR0NvbnRleHRE
cmF3c1dpdGhDb3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkK
QEAgLTExMjEsMjEgKzEwMTUsMjIgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3Jr
YXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogI2VuZGlmCiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQg
c2V0Q0dTaGFkb3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdy
YXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChvZmZzZXQuaXNaZXJv
KCkgJiYgIWJsdXIpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRl
eHQsIENHU2l6ZVplcm8sIDAsIDApOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAKICAgICAvLyBGSVhNRTogd2UgY291bGQg
YXZvaWQgdGhlIHNoYWRvdyBzZXR1cCBjb3N0IHdoZW4gd2Uga25vdyB3ZSdsbCByZW5kZXIgdGhl
IHNoYWRvdyBvdXJzZWx2ZXMuCiAKICAgICBDR0Zsb2F0IHhPZmZzZXQgPSBvZmZzZXQud2lkdGgo
KTsKICAgICBDR0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBi
bHVyUmFkaXVzID0gYmx1cjsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCi0gICAgaWYgKCFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Cisg
ICAgaWYgKCFncmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkgewogICAg
ICAgICBDR0FmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRvQmFzZUNUTShj
b250ZXh0KTsKIAogICAgICAgICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9C
YXNlQ1RNLmEgKyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBAIC0xMTU2LDcg
KzEwNTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogICAgIC8vIEV4dHJlbWUgImJsdXIi
IHZhbHVlcyBjYW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6eSBsb25nIHRp
bWVzLCBzbyBjbGFtcAogICAgIGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFkaXVzLCBuYXJy
b3dQcmVjaXNpb25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZCgqdGhpcywgeE9mZnNldCwgeU9mZnNldCk7CisgICAgYXBwbHlTaGFk
b3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zm
c2V0KTsKIAogICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5z
IHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdl
IHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAt
MTE2Niw1MCArMTA2MSw1MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFk
b3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogICAgICAgICBDR0Nv
bnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zm
c2V0KSwgYmx1clJhZGl1cywgY2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwotfQorICAgIGF1dG8g
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgoY29udGV4dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0
aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9y
V2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIAot
ICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLX0K
KyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNo
YW5nZSkpCisgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKKyAgICAg
ICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOwogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2Rl
Q2hhbmdlIH0pKQorICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwgc2VsZWN0
Q0dCbGVuZE1vZGUoc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSkpOwog
Ci0gICAgQ0dDb250ZXh0Q2xlYXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5n
ZSkpCisgICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHRE
cmF3aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKKyAgICAg
ICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlh
bGlhcyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
b3VsZFNtb290aEZvbnRzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3Ro
Rm9udHMoY29udGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworCisgICAgaWYgKGZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
Q2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4
dCwgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KSk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSkpCisgICAgICAgIHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQs
IG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1p
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAg
Q0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdp
ZHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KHBs
YXRmb3JtQ29udGV4dCgpLCByKTsKK30KIAordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tl
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQpIHsKQEAgLTEyNjksMTYgKzExNjcsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
ICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNl
dExpbmVDYXAoTGluZUNhcCBjYXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExp
bmVDYXAoY2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAoY2FwKSB7
CiAgICAgY2FzZSBCdXR0Q2FwOgogICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lQ2FwQnV0dCk7CkBAIC0xMjkyLDE2ICsxMTgyLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCiAgICAgfQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9hdCBs
ZW5ndGggPSAwOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7
ICsraSkKQEAgLTEzMTIsMTYgKzExOTQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgQ0dD
b250ZXh0U2V0TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5k
YXRhKCksIGRhc2hlcy5zaXplKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gam9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2lu
KExpbmVKb2luIGpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2lu
KGpvaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChqb2luKSB7CiAg
ICAgY2FzZSBNaXRlckpvaW46CiAgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3Jt
Q29udGV4dCgpLCBrQ0dMaW5lSm9pbk1pdGVyKTsKQEAgLTEzMzUsOTQgKzEyMDksNDMgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiAgICAgfQogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBmaWxsUnVsZSkKLXsKLSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSk7CiAgICAgbV9kYXRhLT5zY2FsZShzaXplKTsKICAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
cm90YXRlKGFuZ2xlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJv
dGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwogICAgIG1fZGF0YS0+cm90YXRlKGFu
Z2xlKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9y
bUNvbnRleHQoKSwgeCwgeSk7CiAgICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7CiAgICAgbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNv
bmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250
ZXh0Q29uY2F0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+
Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9y
bUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zv
cm0pOwogICAgIG1fZGF0YS0+c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0o
SW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsK
LQogICAgIC8vIFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2aWNlU2NhbGVGYWN0b3Ig
ZXhjZXB0IGluIFdlYktpdCAxIHdoZW4gdGhlCiAgICAgLy8gY29udGVudCBpcyBub24tY29tcG9z
aXRlZCwgc2luY2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVkIGF0IGEgbG93ZXIKICAg
ICAvLyBsZXZlbC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VTY2FsZSBpcyBpbmNsdWRlZCwgd2Ug
Y2FuIHVzZSB0aGlzIENHIEFQSS4KQEAgLTE0MzIsMTQgKzEyNTUsOCBAQCBBZmZpbmVUcmFuc2Zv
cm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2Fs
ZSkgY29uc3QKICAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpKTsK
IH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+cm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwot
CiAgICAgLy8gSXQgaXMgbm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZp
Y2Ugc3BhY2UuIFRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZQogICAgIC8vIGFmZmluZSB0cmFuc2Zv
cm0gbWF0cml4IHRvIGRldmljZSBzcGFjZSBjYW4gbWVzcyB3aXRoIHRoaXMgY29udmVyc2lvbiBp
ZiB3ZSBoYXZlIGEKICAgICAvLyByb3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUg
d29ybGQgY2xvY2sgd2lkZ2V0LiBXZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbwpAQCAtMTQ4Miwy
NyArMTI5OSwxMSBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNbwogICAgIHJldHVybiBGbG9hdFJl
Y3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQotewotICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsK
LSAgICB3aWR0aHMuYXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChy
ZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzLCBzdHJva2VTdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRo
aWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAog
ICAgIEZsb2F0UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01v
ZGVGb3JUZXh0KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNr
bmVzcykpLCBwcmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xNTU2LDE2ICsxMzU3LDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZv
cm1Db250ZXh0KCksIGZpbGxDb2xvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdh
eXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJs
ZSB3aXRoIHJlY29yZGluZyBjb250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBm
b3IgZGlzcGxheSBsaXN0cy4KLSAgICB9Ci0KICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJl
ZiA9IGxpbmsuY3JlYXRlQ0ZVUkwoKTsKICAgICBpZiAoIXVybFJlZikKICAgICAgICAgcmV0dXJu
OwpAQCAtMTU3OSwzNiArMTM3Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JS
ZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKICAgICBDR1BE
RkNvbnRleHRTZXRVUkxGb3JSZWN0KGNvbnRleHQsIHVybFJlZi5nZXQoKSwgQ0dSZWN0QXBwbHlB
ZmZpbmVUcmFuc2Zvcm0ocmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
SW50ZXJwb2xhdGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJs
ZWQoKSk7Ci0KLSAgICBDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkgPSBrQ0dJbnRlcnBv
bGF0aW9uRGVmYXVsdDsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpEZWZhdWx0OgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkRl
ZmF1bHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRv
Tm90SW50ZXJwb2xhdGU6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAg
ICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkxvdzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0ga0NH
SW50ZXJwb2xhdGlvbk1lZGl1bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25IaWdo
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8v
IFNob3VsZCBiZSBjYWxsZWQgZm9yIENBIENvbnRleHQuCiAgICAgQVNTRVJUKG1fZGF0YSk7CiAg
ICAgaWYgKGlzTGF5ZXJDb250ZXh0KQpAQCAtMTYxNywxMjkgKzEzODIsMjggQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKICAg
ICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNMYXllckNHQ29udGV4dDsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFw
aGljc0NvbnRleHRDRzo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
ZGF0YSAmJiAobV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzTGF5ZXJDR0NvbnRleHQpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCBpc0FjY2VsZXJhdGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgZm9yIENBIENvbnRleHQu
Ci0gICAgQVNTRVJUKG1fZGF0YSk7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1f
ZGF0YS0+bV9jb250ZXh0RmxhZ3MgfD0gSXNBY2NlbGVyYXRlZENHQ29udGV4dDsKICAgICBlbHNl
CiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJj0gfklzQWNjZWxlcmF0ZWRDR0NvbnRl
eHQ7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNv
bnN0Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cmVuZGVyaW5nTW9k
ZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+
bV9jb250ZXh0RmxhZ3MgJiBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxh
Z3MgbW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAKLSAgICBib29sIGZpbGwgPSBtb2Rl
LmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6RmlsbCk7Ci0gICAgYm9vbCBzdHJva2UgPSBtb2Rl
LmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6U3Ryb2tlKTsKLSAgICBpZiAoZmlsbCAmJiBzdHJv
a2UpCi0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0
RmlsbFN0cm9rZSk7Ci0gICAgZWxzZSBpZiAoZmlsbCkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4
dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRGaWxsKTsKLSAgICBlbHNlIGlmIChzdHJva2Up
Ci0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0U3Ry
b2tlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBz
ZXRDR1N0cm9rZUNvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3Mp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldExpbmVXaWR0
aChwbGF0Zm9ybUNvbnRleHQoKSwgc3RkOjptYXgodGhpY2tuZXNzLCAwLmYpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgc2V0Q0dGaWxsQ29sb3IocGxh
dGZvcm1Db250ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0
KCksIGVuYWJsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3Vs
ZFNtb290aEZvbnRzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0K
LSAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5h
YmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQg
YWxwaGEpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldEFs
cGhhKHBsYXRmb3JtQ29udGV4dCgpLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3ND
b250ZXh0Q0c6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKHBsYXRmb3JtQ29udGV4dCgpLCBzZWxlY3RD
R0JsZW5kTW9kZShjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7CisgICAgcmV0dXJuIG1f
ZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0ID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
IGRldmljZVNjYWxlRmFjdG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZp
Y2VTY2FsZUZhY3Rvcik7CiAKICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFzZSBD
VE0gb2YgYSBIaURQSSBjb250ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVkIHRv
IGl0LgogICAgIC8vIEZhaWxpbmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxsIGNh
dXNlIGNlcnRhaW4gQ0cgZmVhdHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCkBAIC0xNzQ3LDEz
ICsxNDExLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKICAgICBDR0NvbnRleHRTZXRCYXNlQ1RN
KHBsYXRmb3JtQ29udGV4dCgpLCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJh
c2VDVE0ocGxhdGZvcm1Db250ZXh0KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVG
YWN0b3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0KICAgICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNv
bGlkIGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxs
UGF0dGVybikgewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3NjQs
MTMgKzE0MjMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qo
Y29udGV4dCwgZWxsaXBzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qg
b25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAgIHN0cm9rZUVsbGlwc2VBc1Bh
dGgoZWxsaXBzZSk7CkBAIC0xNzgxLDE4ICsxNDM1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENH
Q29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3QoY29udGV4dCwgZWxsaXBzZSk7CiB9CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAorYm9vbCBHcmFw
aGljc0NvbnRleHRDRzo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAg
RmxvYXRSZWN0IHJlY3QgPSBkZXN0UmVjdDsKQEAgLTE4MDIsMTUgKzE0NTEsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgRmxvYXRSZWN0JgogICAgIENHUERGQ29udGV4dFNldERlc3RpbmF0aW9uRm9yUmVjdChj
b250ZXh0LCBuYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUmVjdCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotCiAgICAgQ0dQb2ludCB0
cmFuc2Zvcm1lZFBvaW50ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvc2l0aW9uLCBD
R0NvbnRleHRHZXRDVE0oY29udGV4dCkpOwogICAgIENHUERGQ29udGV4dEFkZERlc3RpbmF0aW9u
QXRQb2ludChjb250ZXh0LCBuYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVk
UG9pbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmgKaW5kZXggMjVhMDg2NmUyZjM4NjllMWU3ZTFmOWU2NjI2
YmVjMjA1YmIwZGM3NS4uNWUyMDY3NjllYmZmOGFkOTEwMjkxOTM2MjJjZmQxYzJlYzRmMjg5ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCkBAIC03Miw1ICs3MiwxMDggQEAgcHJpdmF0ZToKICAgICBib29sIG1f
c2F2ZUFuZFJlc3RvcmU7CiB9OwogCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRl
eHRDRyA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29u
dGV4dENHKENHQ29udGV4dFJlZik7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgR3JhcGhpY3ND
b250ZXh0Q0coSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVt
b3ZlZC4KKyNlbmRpZgorCisgICAgfkdyYXBoaWNzQ29udGV4dENHKCk7CisKKyAgICBib29sIGhh
c1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVz
dG9yZSgpIGZpbmFsOworCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCBib3JkZXJUaGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJu
KCkgZmluYWw7CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCBk
cmF3UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKworICAg
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKKworICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSBmaW5hbDsKKworICAgIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSBmaW5hbDsKKworICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25z
dCBmaW5hbDsKKworICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWw7
CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICB2
b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5h
bDsKKworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6
OkV2ZW5PZGQpIGZpbmFsOworCisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7
CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBmaW5hbDsKKyAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpIGZpbmFsOworCisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBmaW5h
bDsKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsKKworICAgIHZv
aWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkg
Y29uc3QgZmluYWw7CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBD
b2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisjZW5kaWYKKworICAg
IHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbDsKKwor
ICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKKworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisKKyAgICBib29s
IHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKworI2lmIE9TKFdJTkRPV1MpCisgICAgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBm
aW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogbV9kYXRhIHsgbnVsbHB0ciB9OworfTsKKwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAKaW5kZXggZGQzNDFiMTQyMTZjMmUyYzlkNDZkMmFiMDViOWFhNTJkN2Q5
NzRkMi4uYmNiZmNlMDkzMjgxYjYzMmRiYzk4YjNlMjYxMjE3ZWY3M2UxZDFkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtODUsNyArODUsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpjcmVhdGUoYwogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0Nv
bnRleHQuZ2V0KCkpOworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0Q0c+KGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBkYXRhLCBudW1CeXRlcywg
W10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKICAgICAgICAgZmFzdEZyZWUo
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggY2VkM2FkYmEyYjRjMTJmMGU4MjNhMDg4ZDI1ZmMx
NWFhODg5YTQyNy4uZjMzZGNlOTE2ZGViMzZlOWIyNTJhMjViODI4NGVkNWQxYThhYjFkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJG
bG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlIDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC0y
NDQsNyArMjQ0LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICBDR0NvbnRleHRCZWdp
blBhdGgoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBh
dGgoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwor
ICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBzdHJv
a2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAogICAgIGJvb2wgaGl0U3VjY2VzcyA9
IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQYXRoU3Ryb2tl
KTsKQEAgLTMwNSw3ICszMDUsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgIENHQ29u
dGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1QYXRoKCkpOwogCiAgICAgaWYgKHN0cm9rZVN0
eWxlQXBwbGllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4
dCk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKaW5kZXggNzZlYTlhZjRkNDIzMjQ5NDFhODk3ZmFhM2U1ZGZkYWIyM2RmODEzNC4uMDVhMzkx
NjU0MGJiNzZkYTNmMGFiYWEzMzk0ZmM4ZGQwODhjOGRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC0zMCw3ICszMCw3IEBA
CiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpAQCAtNDMsNyAr
NDMsNyBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0
UmVmIGNvbnRleHQpCiAgICAgaWYgKCFwbGF0Zm9ybUltYWdlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNl
UGl4ZWxzKAorICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0Q0coY29udGV4dCkucm91
bmRUb0RldmljZVBpeGVscygKICAgICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0
aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdlKSkpOwogICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCByZWN0LCBwbGF0Zm9ybUltYWdlKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNj
YWRlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
Q2FzY2FkZUNvY29hLm1tCmluZGV4IGUyOWFlY2RmYmZlNjgwMDY3ZmNiYTE5MzlmYWU1MWVkYzg3
OTJkNGMuLmUxZTViNDQ4Y2IyNmZjN2UwMTc4YWJjYTg3YmU0MjJmYjU4MWNmNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29j
b2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQpAQCAtMjMsNyArMjMsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1w
b3J0ICJGb250Q2FzY2FkZS5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29j
b2EubW0KaW5kZXggMTQyMWViOTBkN2E0OWQxZTQ4MjRiNWFjODk2ODgxM2EzMDU0M2Y3ZC4uMzg4
YWZjZDZmNDZhZmM0NTIyMWY4MDcxZDM1MDk2N2YwZTUzNTUwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250
ZXh0Q29jb2EubW0KQEAgLTEwNiw0OCArMTA2LDMzIEBAIHN0YXRpYyB2b2lkIGRyYXdGb2N1c1Jp
bmdUb0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1JpbmdQYXRo
CiAgICAgZHJhd0ZvY3VzUmluZyhjb250ZXh0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzTnVsbCgpKQor
ICAgIGlmIChwYXRoLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBkcmF3Rm9jdXNSaW5nVG9Db250
ZXh0KHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBjb2xvcik7CiB9CiAK
ICNpZiBQTEFURk9STShNQUMpCiAKLXN0YXRpYyBib29sIGRyYXdGb2N1c1JpbmdUb0NvbnRleHRB
dFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1JpbmdQYXRoLCBkb3Vi
bGUgdGltZU9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIGJvb2wgZHJhd0ZvY3Vz
UmluZ1RvQ29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3Vz
UmluZ1BhdGgsIGRvdWJsZSwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIFVOVVNFRF9QQVJB
TSh0aW1lT2Zmc2V0KTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgQ0dD
b250ZXh0QWRkUGF0aChjb250ZXh0LCBmb2N1c1JpbmdQYXRoKTsKICAgICByZXR1cm4gZHJhd0Zv
Y3VzUmluZ0F0VGltZShjb250ZXh0LCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Om1heCgp
LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgYW5pbWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5nLgorICAgIGlmIChwYXRoLmlzTnVsbCgp
KQogICAgICAgICByZXR1cm47CiAKICAgICBuZWVkc1JlZHJhdyA9IGRyYXdGb2N1c1JpbmdUb0Nv
bnRleHRBdFRpbWUocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIHRpbWVP
ZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYg
bmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkb3VibGUgdGlt
ZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSAvLyBGSVhNRTogaW1wbGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4KLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IGZvY3VzUmluZ1Bh
dGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQo
KSwgMCwgQ0dSZWN0KHJlY3QpKTsKQEAgLTE1NywxNiArMTQyLDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkb3Vi
bGUgdGltZU8KIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4g
Zm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBmb3Ig
KGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQYXRo
LmdldCgpLCAwLCBDR1JlY3RJbnNldChyZWN0LCAtb2Zmc2V0LCAtb2Zmc2V0KSk7CkBAIC0xOTks
MTEgKzE3Niw4IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFya2VyTGluZVN0eWxlKERv
Y3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlIHN0eWxlLCBiCiAgICAgfQogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFdlIHdhbnQgdG8gZmluZCB0aGUgbnVtYmVy
IG9mIGZ1bGwgZG90cywgc28gd2UncmUgc29sdmluZyB0aGUgZXF1YXRpb25zOgogICAgIC8vIGRv
dERpYW1ldGVyID0gaGVpZ2h0CiAgICAgLy8gZG90RGlhbWV0ZXIgLyBkb3RHYXAgPSAxMy4yNDcg
LyA5LjQ1NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLm1tCmluZGV4IGJlMzQzMDRiMmQxMDczNTYzMWFiOGZhOTM5Nzc4NGZmMGRjZTU2
NGMuLjJhYmNjNmY0MDQ2MWZlMWViYWM5NjIwMmU4NWFjNWE0YmVlY2VlZjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAg
LTM2OSw3ICszNjksNyBAQCBHcmFwaGljc0NvbnRleHQmIElPU3VyZmFjZTo6ZW5zdXJlR3JhcGhp
Y3NDb250ZXh0KCkKICAgICBpZiAobV9ncmFwaGljc0NvbnRleHQpCiAgICAgICAgIHJldHVybiAq
bV9ncmFwaGljc0NvbnRleHQ7CiAKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0PihlbnN1cmVQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgbV9ncmFwaGlj
c0NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihlbnN1cmVQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgbV9ncmFwaGljc0NvbnRleHQtPnNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KHRydWUpOwogCiAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXggMjBkYWVmNGJi
NDFmNTA2NGYzYzFiZGEzYzJmYzM2NzMyMDA0ZjNmNy4uM2U1NTFiODU3NjY2NzQ0ODU1ODU5ZWM5
OGIxZWNhMDYzNTljMjlkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgi
CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjaWYgVVNFKENPUkVfVEVYVCkKICNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CkBAIC02OCw3ICs2OSw5IEBAIHB1Ymxp
YzoKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb247IH0KIAogcHJpdmF0
ZToKLSAgICBHcmFwaGljc0NvbnRleHQgY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CisjaWYgVVNF
KENPUkVfVEVYVCkKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5h
bENvbnRleHQoKTsKKyNlbmRpZgogCiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CkBAIC05MSw3ICs5NCwxMSBAQCBwcml2
YXRlOgogCiAgICAgUmVjb3JkZXImIG1fb3duZXI7CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0
aW9uIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uOwotICAgIEdyYXBoaWNzQ29udGV4dCBtX2lu
dGVybmFsQ29udGV4dDsKKworI2lmIFVTRShDT1JFX1RFWFQpCisgICAgVW5pcXVlUmVmPEdyYXBo
aWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKKwogICAgIGNvbnN0IEZvbnQq
IG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21v
b3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZm
aW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmlu
ZGV4IGMwNDg2NTJmOWIwZTY1YWI1YzJjOWNlNTk4YjUyNzcwMmM4YWEzM2QuLmNhY2Y3NjRmNWRl
MmM4Y2Y2ZDNmNDAwMDJmZWFmNWUxMjE2OTFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNv
cmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCiAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4
dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGEKICAgICByZXR1
cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1HcmFwaGljc0NvbnRleHQgRHJhd0dseXBoc1JlY29y
ZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4g
RHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogewogICAgIGF1dG8g
Y29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7
CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCks
IGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNr
PigmYmVnaW5MYXllcikpOwpAQCAtODQsNyArODUsNyBAQCBHcmFwaGljc0NvbnRleHQgRHJhd0ds
eXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIENHQ29udGV4dERlbGVn
YXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50
ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OkRpc3BsYXlM
aXN0OjpkcmF3R2x5cGhzKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250
ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0ltYWdlLCByZWludGVycHJldF9jYXN0PENHQ29udGV4
dERlbGVnYXRlQ2FsbGJhY2s+KCZkcmF3SW1hZ2UpKTsKICAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dENGKENHQ29udGV4dENyZWF0ZVdpdGhEZWxlZ2F0ZShjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGtD
R0NvbnRleHRUeXBlVW5rbm93biwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3Jh
cGhpY3NDb250ZXh0Q0c+KGNvbnRleHQuZ2V0KCkpOwogfQogCiBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCkBAIC0xMTksMzQgKzEyMCwzMSBAQCB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBjb250ZQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50
ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCiB7
CiAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxT
dHlsZS5jb2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0Rmls
bEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdy
YWRpZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0p
OwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5w
YXR0ZXJuKTsKICAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikK
LSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX29yaWdpbmFs
U3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOworICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldEZpbGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwogICAg
IH0KIAogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgp
KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3Rh
dGUuc3Ryb2tlU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ry
b2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlm
IChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
Z3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VT
dHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
KG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENv
bnRleHQuc2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRl
cm4pOworICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKm1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKLSAgICBtX2ludGVy
bmFsQ29udGV4dC5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CisgICAgbV9pbnRlcm5hbENv
bnRleHQtPnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKIAotICAgIG1faW50ZXJuYWxDb250
ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdu
b3JlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKGNvbnRleHRTdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFk
aXVzKQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5jb2xvcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvcik7CisgICAgbV9p
bnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0
ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNo
YWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0U3RhdGUuc2hhZG93
UmFkaXVzTW9kZSk7CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUo
Y29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNl
dFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKIH0KIAogdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYg
Zm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTMwMiw3ICszMDAsNyBA
QCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgICAgICByZXR1cm47CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAotICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9u
KG1faW50ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBhdXRvIHRleHRQb3Np
dGlvbiA9IENHQ29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIEFTU0VSVCghdGV4dFBvc2l0aW9uLngpOwogICAgIEFTU0VSVCgh
dGV4dFBvc2l0aW9uLnkpOwogI2VuZGlmCkBAIC0zMjEsNyArMzE5LDcgQEAgdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYgZ3N0YXQKICAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0byBlYWNoIG90
aGVyLCBhbmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKICAgICAvLyBDVE0gKiBjdXJyZW50VGV4dE1h
dHJpeCA9IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAogICAgIC8vIGN1cnJlbnRUZXh0
TWF0cml4ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCi0gICAgQWZmaW5lVHJh
bnNmb3JtIGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVy
bmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJl
bnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBjdG1GaXh1cDsKICAgICBp
ZiAoYXV0byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0cml4
LmludmVyc2UoKSkKICAgICAgICAgY3RtRml4dXAgPSBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVy
dGVkT3JpZ2luYWxUZXh0TWF0cml4LnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggNTRkODU0NzEyM2Y4OTQ3ZDZmMmZhY2Q3
ZmNhNmY5OTUxODFhMjY3MS4uMzk1N2M0NTc2ZmU5MTJkNjgxMDIwNzYxMDAxY2MyNGY2ODY4ODYy
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNw
cApAQCAtMzQsOSArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBSZWNvcmRl
cjo6RGVsZWdhdGUqIGRlbGVnYXRlKQotICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRl
eHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNv
cmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRT
dGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVnYXRl
KTsKLSAgICB9KQorICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4
dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVsZWdh
dGUpCiB7CiB9CiAKQEAgLTQ2LDEzICs0NCw2IEBAIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiAgICAg
bV9yZXBsYXllZERpc3BsYXlMaXN0LnJlc2V0KCk7CiB9CiAKLVJlY29yZGVyJiBEcmF3aW5nQ29u
dGV4dDo6cmVjb3JkZXIoKQotewotICAgIGF1dG8qIGdyYXBoaWNzQ29udGV4dEltcGwgPSBjb250
ZXh0KCkuaW1wbCgpOwotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHRJbXBsKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8UmVjb3JkZXImPigqZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci19Ci0KIHZv
aWQgRHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQpCiB7CiAgICAgaWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKaW5kZXggZDM3YzA3MzViZWI1
NTQ5MmQ5MGZmOWVjZTRjYTRkYjc5OTVkNWY1OC4uZDk1ZGRkZWY4NTc1MjhjODI3OWU0ZjFlZmJm
MmQyNTg4ZjZjYTRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCkBAIC0zOSw4ICszOSw5IEBAIGNsYXNzIERyYXdpbmdDb250ZXh0IHsKIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIFJlY29y
ZGVyOjpEZWxlZ2F0ZSogPSBudWxscHRyKTsKIAorICAgIC8vIEZJWE1FOiBEZWR1cGxpY2F0ZSB0
aGVzZS4KICAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIFJlY29yZGVyJiByZWNvcmRlcigpOworICAgIFJlY29yZGVyJiByZWNvcmRlcigpIHsg
cmV0dXJuIG1fY29udGV4dDsgfTsKICAgICBEaXNwbGF5TGlzdCB0YWtlRGlzcGxheUxpc3QoKSB7
IHJldHVybiBzdGQ6OmV4Y2hhbmdlKG1fZGlzcGxheUxpc3QsIHsgfSk7IH0KICAgICBEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3Qg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsg
fQpAQCAtNTAsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmKTsKIAogcHJvdGVjdGVkOgotICAgIEdyYXBo
aWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgUmVjb3JkZXIgbV9jb250ZXh0OwogICAgIERpc3Bs
YXlMaXN0IG1fZGlzcGxheUxpc3Q7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluTWVtb3J5RGlzcGxh
eUxpc3Q+IG1fcmVwbGF5ZWREaXNwbGF5TGlzdDsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCmlu
ZGV4IDFhNGVhNmRlM2I1YThjZTM1ZDhlNzc5ZmNlY2VmYjQ2YjE4MmMwYTMuLmYyMjJlMjE4M2Ez
OTEwM2JkNjk4NTM0NDY0ZGYzY2IwYThmZjkwN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKQEAgLTYwNSwxMSArNjA1LDcgQEAgc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdFbGxpcHNlJiBpdGVtKQogCiB2b2lkIERy
YXdQYXRoOjphcHBseShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiB7Ci0jaWYgVVNF
KENHKQogICAgIGNvbnRleHQuZHJhd1BhdGgobV9wYXRoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGNvbnRleHQpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3UGF0aCYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAppbmRleCBhMWQ1N2EwNjg1ZjAzMzhmN2RkYWYyNmUwOGEyMjJlYTMwNjRhNzAxLi5k
YzZmMGM5NjBhY2NlMzM2ODQzMzVkNWY1MzJkMDAyYmZhOTc1OTc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTI3OSwxMCArMjc5LDYgQEAgcHVibGljOgogICAgIFJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciBzdHJva2VQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJva2VQYXR0ZXJuLnRpbGVJbWFnZUlkZW50aWZpZXI7IH0KICAgICBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgZmlsbFBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZpbGxQYXR0ZXJuLnRpbGVJbWFnZUlkZW50aWZpZXI7IH0KIAotICAg
IHN0YXRpYyB2b2lkIGJ1aWxkZXJTdGF0ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
LQotICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0ZUNoYW5nZXMoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7Ci0KICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVuY29kZShFbmNv
ZGVyJikgY29uc3Q7CiAgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RhdGljIE9wdGlvbmFs
PFNldFN0YXRlPiBkZWNvZGUoRGVjb2RlciYpOwogCkBAIC0zMzUsOSArMzMxLDcgQEAgdm9pZCBT
ZXRTdGF0ZTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgICAgIGVuY29kZXIg
PDwgc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0Js
dXI7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Q29sb3I7Ci0jaWYgVVNFKENHKQot
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYg
Ly8gVVNFKENHKQorICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAg
ICAgfQogCiAgICAgaWYgKGNoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtNDYzLDE0ICs0NTcsMTIgQEAgT3B0aW9uYWw8
U2V0U3RhdGU+IFNldFN0YXRlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIAogICAgICAgICBz
dGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd0NvbG9yID0gKnNoYWRvd0NvbG9yOwogCi0jaWYgVVNF
KENHKQotICAgICAgICBPcHRpb25hbDxib29sPiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotICAg
ICAgICBkZWNvZGVyID4+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0gICAgICAgIGlmICghc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cykKKyAgICAgICAgT3B0aW9uYWw8U2hhZG93UmFkaXVzTW9kZT4g
c2hhZG93UmFkaXVzTW9kZTsKKyAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dSYWRpdXNNb2RlOwor
ICAgICAgICBpZiAoIXNoYWRvd1JhZGl1c01vZGUpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCi0gICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9ICpzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gV1RGTW92ZSgqc2hhZG93
UmFkaXVzTW9kZSk7CiAgICAgfQogCiAgICAgaWYgKHN0YXRlQ2hhbmdlLm1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAppbmRleCA5ZGI1YTVhODEw
MWE5OWRkNWRjNmFmYzAyMGUzZjU2YmRjZWZmM2M5Li5jMWVhYzUzOTVhYmM4MWMyN2I5OWY5NmU1
ZWEzMjVhZGE1NTQ4MWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwCkBAIC0zMywxNSArMzMsMTUgQEAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNw
bGF5TGlzdCB7CiAKLVJlY29yZGVyOjpSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQotICAgIDogR3Jh
cGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlz
dCkKK1JlY29yZGVyOjpSZWNvcmRlcihEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERy
YXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNv
bnN0cnVjdGlvbikKKyAgICA6IG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCiAgICAgLCBtX2Rl
bGVnYXRlKGRlbGVnYXRlKQogICAgICwgbV9pc05lc3RlZChmYWxzZSkKICAgICAsIG1fZHJhd0ds
eXBoc1JlY29yZGVyKCp0aGlzLCBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCkBAIC01MCw5ICs1
MCw4IEBAIFJlY29yZGVyOjpSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIERpc3Bs
YXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7
IHN0YXRlLCBpbml0aWFsQ1RNLCBpbml0aWFsQ2xpcCB9KTsKIH0KIAotUmVjb3JkZXI6OlJlY29y
ZGVyKFJlY29yZGVyJiBwYXJlbnQsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCi0gICAgOiBHcmFwaGljc0NvbnRleHRJ
bXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rpc3BsYXlMaXN0KQor
UmVjb3JkZXI6OlJlY29yZGVyKFJlY29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBpbml0aWFsQ1RNKQorICAgIDogbV9kaXNwbGF5TGlzdChwYXJlbnQubV9kaXNw
bGF5TGlzdCkKICAgICAsIG1fZGVsZWdhdGUocGFyZW50Lm1fZGVsZWdhdGUpCiAgICAgLCBtX2lz
TmVzdGVkKHRydWUpCiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgcGFyZW50Lm1f
ZHJhd0dseXBoc1JlY29yZGVyLmRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpKQpAQCAtMTY2LDEx
ICsxNjUsNiBAQCBSZW5kZXJpbmdNb2RlIFJlY29yZGVyOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QK
ICAgICByZXR1cm4gbV9kZWxlZ2F0ZSA/IG1fZGVsZWdhdGUtPnJlbmRlcmluZ01vZGUoKSA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsZWFyU2hh
ZG93KCkKLXsKLSAgICBhcHBlbmQ8Q2xlYXJTaGFkb3c+KCk7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6
OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewogICAgIGFwcGVuZDxTZXRMaW5lQ2FwPihs
aW5lQ2FwKTsKQEAgLTIwNiw2ICsyMDAsMTEgQEAgdm9pZCBSZWNvcmRlcjo6YXBwZW5kRHJhd0ds
eXBoc0l0ZW1XaXRoQ2FjaGVkRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEIKIAog
dm9pZCBSZWNvcmRlcjo6ZHJhd0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiBpbWFn
ZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKKyAgICAvLyBGSVhN
RTogVGhpcyBmZWVscyBvZGQsIGJ1dCBpcyB3aGF0IHVzZWQgdG8gaGFwcGVuLgorICAgIGlmICgh
Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fZGlzcGxheUxpc3QuY2FjaGVJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlcik7CiAgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VC
dWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKIH0KQEAgLTI3MCw3ICsyNjksNyBAQCB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgYXBwZW5kPFNldENUTT4odHJhbnNm
b3JtKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCitBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogUmVzcGVjdCB0aGUgZ2l2ZW4gdmFsdWUgb2YgSW5jbHVkZURldmljZVNjYWxlLgogICAg
IHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CkBAIC0yOTgsOCArMjk3LDkgQEAgdm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCiAgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKKyAgICAv
LyBGSVhNRTogV2h5IGlzIHN0cm9rZVN0eWxlIG5vdCB1c2VkPwogICAgIGFwcGVuZDxEcmF3TGlu
ZXNGb3JUZXh0PihGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50KSwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiB9CiAKQEAgLTMyOCw2ICszMjgsMTggQEAg
dm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0IHdpZHRoLCBmbG9hdAogICAgIGFwcGVuZDxEcmF3Rm9jdXNSaW5nUmVjdHM+KHJl
Y3RzLCB3aWR0aCwgb2Zmc2V0LCBjb2xvcik7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCit2b2lk
IFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25z
dCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBSZWNvcmRlcjo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNv
bnN0IENvbG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorI2VuZGlmCisKIHZvaWQg
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBhcHBlbmQ8
RmlsbFJlY3Q+KHJlY3QpOwpAQCAtNDQwLDEwICs0NTIsOSBAQCB2b2lkIFJlY29yZGVyOjpjbGlw
UGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKICAgICBhcHBlbmQ8Q2xp
cFBhdGg+KHBhdGgsIHdpbmRSdWxlKTsKIH0KIAotSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5k
cygpCitJbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBXVEZMb2dB
bHdheXMoIkdldHRpbmcgdGhlIGNsaXAgYm91bmRzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggRGlz
cGxheUxpc3Q6OlJlY29yZGVyLiIpOwotICAgIHJldHVybiBJbnRSZWN0KC0yMDQ4LCAtMjA0OCwg
NDA5NiwgNDA5Nik7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFN0YXRlKCku
Y2xpcEJvdW5kcyk7CiB9CiAKIHZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKQEAgLTQ1Miwz
NSArNDYzLDM0IEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0CiAgICAgYXBwZW5kPENsaXBUb0lt
YWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVz
dFJlY3QpOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Us
IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQorR3Jh
cGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVjb3JkZXI6OmNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
JiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQo
WyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlw
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRv
IGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgp
KTsKIAotICAgICAgICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGlu
aXRpYWwgQ1RNLgotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUo
KSk7Ci0gICAgICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlv
bi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFs
Q1RNOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENU
TS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RN
LnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5hdGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0
aWFsIENUTSBtYXRjaGVzIEltYWdlQnVmZmVyJ3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNs
dWRlRGV2aWNlU2NhbGUpOworICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNj
YWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5k
ZWRJbnRTaXplKGRlc3RpbmF0aW9uLnNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gaW5pdGlhbENUTTsKKyAgICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBp
bml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlh
bENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlY29yZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRl
eHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0g
ICAgfSk7CisgICAgUmVjb3JkZXIgbmVzdGVkQ29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBU
b0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdG
dW5jdGlvbihuZXN0ZWRDb250ZXh0KTsKICAgICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzPihkZXN0aW5hdGlvbik7Ci19CiAKLSNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVy
OjpjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QK
LXsKLSAgICByZXR1cm4gISFwbGF5ZXIuaWRlbnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9E
cmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2
b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVy
KCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXll
ci5pZGVudGlmaWVyKCkpOwogICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwg
ZGVzdGluYXRpb24pOwogfQpAQCAtNTE3LDcgKzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6
ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBG
bG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxv
YXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUo
c2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRp
bmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CkBAIC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0
ZSgpLmN0bTsKIH0KIAotY29uc3QgRmxvYXRSZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQg
UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAg
ICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oCmluZGV4IDc2MzM5YWJlOGE2MDgwNGJjNzJjYzA5MWZmNGQyMWFmMTRjYWUwNTQuLjA4NTJl
OTFjMzY1NmY1MjY0ZjIzNmU1MGFkYjJkMTRkZmUyNmJkZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNs
dWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZv
ciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdP
cHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAg
IFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0Jiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6
RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVn
YXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0
aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29u
c3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1h
dCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3
NywyNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNS
ZWNvcmRlcjsKLSAgICBSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVj
b3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAg
ICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wg
Y2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBv
dmVycmlkZTsKIAorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBv
dmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSNpZiBVU0UoQ0cpCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBh
cHBseVN0cm9rZVBhdHRlcm4oKSBvdmVycmlkZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIwLDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNv
bnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZz
ZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAg
ICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAK
QEAgLTEzNiw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3Zl
cnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1
ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91
bmRzKCkgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rp
b248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisKICNpZiBF
TkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50
RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpAQCAt
MTczLDcgKzE4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAg
ICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQo
KSkpCisgICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcygqdGhpcykp
CiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChleHRl
bnRGcm9tTG9jYWxCb3VuZHMoKnJlY3QpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVj
dCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5h
ZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CkBAIC0xOTUsNyArMjEwLDYgQEAgcHJpdmF0ZToK
ICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNv
bnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0gICAg
Y29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgQ29udGV4
dFN0YXRlIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQppbmRleCA2NWJjYTY3MGY5Mjg2
ZDI1YTE5NTE5MjFiODVmMGEwNWEwMTUyZDUxLi44OWQ4ODJjNTdmNDc2MWU1NDZkZDQyNDcwMWYz
M2QyZmIyMDMxZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0NvbG9yTWFjLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBVU0UoQVBQS0lUKQogCisj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9y
dCA8d3RmL0xvY2suaD4KQEAgLTg1LDcgKzg2LDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVp
bnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKICAgICAg
ICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VSZXA+IG9mZnNjcmVlblJlcCA9IGFkb3B0TlMoW1tO
U0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERhdGFQbGFuZXM6bmlsIHBpeGVs
c1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAgICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1wbGVz
UGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQbGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNEZXZp
Y2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93OjQgYml0c1BlclBpeGVsOjMyXSk7CiAKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4
dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0
KCldLkNHQ29udGV4dCk7CiAgICAgICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2Nh
bENvbnRleHQoYml0bWFwQ29udGV4dCk7CiAKICAgICAgICAgW2NvbG9yIGRyYXdTd2F0Y2hJblJl
Y3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXggY2U3YWJkN2I0ZTk1ZWViMzg5NmFlNWQ5
YjNjYTRkMWNlMGZlYjllZi4uNTU0ODBiNTJiOTFlMDI4NjJmZjBiZmMxMzA2ZGE4MGQ2MDNjNTQy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxh
eWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXll
ci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJM
YXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRm
b3JtQ0FMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CkBAIC01MSw3
ICs1MSw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsK
ICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5
ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpSZXBhaW50UmVjdExpc3QgcmVj
dHNUb1BhaW50ID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpjb2xsZWN0UmVjdHNUb1BhaW50
KGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCks
IHJlY3RzVG9QYWludCwgc2VsZi5pc1JlbmRlcmluZ0luQ29udGV4dCA/IFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXJQYWludFNuYXBzaG90dGluZyA6IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludE5v
cm1hbCk7CiAgICAgfQpAQCAtMTI4LDcgKzEyOCw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1
dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxh
eWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93bmVy
KCkpIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4
dCh0cnVlKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0
KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggMzg1ZGY2MTY4Mjc2
YWJmZmY1N2Y3MTU0ODM0N2Q5YzBiMTlmNzI0NS4uNjJjMGUxNmQxN2Q0MjAwMjAwZTI4MjFlNWVl
M2I3NGNmYzI1Y2QxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTcyLDkgKzcyLDggQEAgYXV0byBjcmVhdGVDb21t
YW5kKCkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+
LCBUPjo6dmEKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUPigpOwogfQogCi1DYWlyb09wZXJhdGlv
blJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlzdCkKLSAgICA6IEdyYXBoaWNzQ29udGV4
dEltcGwoY29udGV4dCkKLSAgICAsIG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCitDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9u
cyYgY29tbWFuZExpc3QpCisgICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewogICAg
IG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3Qo
KSB9KTsKIH0KQEAgLTE1NCwxMCArMTUzLDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
Ojp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXAKICAg
ICB9CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewot
fQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5l
Q2FwKQogewogICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8TGluZUNhcD4gewpAQCAtMjUwLDcgKzI0NSw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC0yNzAsNyArMjY1LDcgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRl
eHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCkBAIC0yOTIsNyArMjg3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwg
c3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pKSk7CiB9CiAKQEAgLTMxNiw3ICszMTEs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3Qs
IGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOwogfQogCkBAIC0zNDYsNyArMzQxLDcg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4o
cm91bmRlZFJlY3QsIGNvbG9yLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTM2Nyw3ICszNjIsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29ucwogICAgIH07CiAKICAgICBVTlVTRURfUEFSQU0oY29sb3IpOwot
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
PihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwog
fQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCkBAIC0zODYsNyArMzgxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFBhdGg+KHBhdGgsIENhaXJv
OjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBA
IC00MDgsNyArNDAzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwg
Q2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9
CiAKQEAgLTQyOCw3ICs0MjMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIH0K
ICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwor
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQ0OCw3ICs0NDMsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQ3MCw3ICs0NjUsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTIzLDcg
KzUxOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBG
b250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+
KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAg
ICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LAogICAgICAgICBSZWZQdHI8
Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLApA
QCAtNTUzLDcgKzU0OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvCiAgICAgfTsKIAogICAg
IFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBz
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTkzLDcgKzU4OCw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3Jk
ZXJUaGlja25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBz
dGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikpOwog
fQogCkBAIC02MTMsMTEgKzYwOCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUu
c3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFz
KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQordm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewogICAgIHN0cnVjdCBE
cmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8
RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKICAgICAg
ICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKQEAgLTYzMyw3ICs2Mjgs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4
dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywg
c3RhdGUuc3Ryb2tlQ29sb3IpKTsKIH0KIApAQCAtNjcyLDE0ICs2NjcsMTAgQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQog
Ci12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewot
fQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewogICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5nIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9w
ZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENvbG9yPiB7CkBAIC05MDMsNyArODk0LDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKIH0KIAot
QWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCkuY3RtOwogfQpAQCAtMTAzMiw3
ICsxMDIzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICB9CiB9CiAKLUludFJlY3QgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpCitJbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0
YWNrLmxhc3QoKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNl
Lm1hcFJlY3Qoc3RhdGUuY2xpcEJvdW5kcykpOwpAQCAtMTA3NiwxNSArMTA2NywxNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdP
cGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29t
bWFuZCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdD
b21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCitXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7CiAgICAgLy8gRklYTUU6
IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0
OjpTdWNjZXNzOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3Qm
KQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKICAgICAvLyBG
SVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZv
ck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCA2NTg5M2Iw
YjJiYzA2YmJiNTBkNWMwNGFkN2I5NzZiOGJmZDZmMGJjLi4wMzIzOWM2Y2NhODJiZGY0ZDE3Yzli
YjdlNzdhODViOTRjMWZmMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC0yOCwyMSArMjgsMjAgQEAKIAogI3ByYWdtYSBv
bmNlCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uLmgiCiAKIG5h
bWVzcGFjZSBOaWNvc2lhIHsKIAotY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5hbCA6
IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsKIHB1
YmxpYzoKLSAgICBDYWlyb09wZXJhdGlvblJlY29yZGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYsIFBhaW50aW5nT3BlcmF0aW9ucyYpOworICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFp
bnRpbmdPcGVyYXRpb25zJik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxs
cHRyOyB9CiAKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKQEAgLTUz
LDYgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6Qmxl
bmRNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0
IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNv
cmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxQYXRo
KGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKQEAgLTcwLDEwICs3MCw5IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0
KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJv
a2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBm
bG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwpAQCAtODYsNyArODUsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgV2Vi
Q29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBvdmVycmlkZTsKQEAgLTk1LDEyICs5NCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBP
dXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29u
c3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJD
b3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IGNsaXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlv
bjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBw
YWludEZyYW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVG
b3JNZWRpYShjb25zdCBXZWJDb3JlOjpNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGlu
Z0NvbnRleHRDYWlyby5jcHAKaW5kZXggMDAxMTAwZjc3NzgxZTRjZjViOGMxZDg3YTJjNmMzN2Nj
ZThhYWY1NC4uNDlhYmNhYTQ1MjUzMTQ1Mzg0YjM1NTg4NDY4NjdlMGNmYmQwNmFkMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcApA
QCAtMzIsNyArMzIsNyBAQAogI2lmIFVTRShDQUlSTykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiTmljb3NpYUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIk5pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgiCiAjaW5jbHVkZSAiTmljb3Np
YVBhaW50aW5nT3BlcmF0aW9uUmVwbGF5Q2Fpcm8uaCIKQEAgLTcxLDcgKzcxLDcgQEAgUGFpbnRp
bmdDb250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpGb3JQYWludGluZyhCdWZmZXImIGJ1ZmZlcikK
IAogICAgIG1fY2Fpcm8uY29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NhaXJvLnN1
cmZhY2UuZ2V0KCkpKTsKICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KG1fY2Fpcm8uY29udGV4dC5nZXQoKSk7Ci0gICAgbV9n
cmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KCptX3BsYXRmb3Jt
Q29udGV4dCkpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybz4oKm1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAogUGFpbnRpbmdD
b250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjp+Rm9yUGFpbnRpbmcoKQpAQCAtMTA0LDExICsxMDQs
NyBAQCB2b2lkIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6cmVwbGF5KGNvbnN0
IFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbgogCiBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9y
UmVjb3JkaW5nOjpGb3JSZWNvcmRpbmcoUGFpbnRpbmdPcGVyYXRpb25zJiBwYWludGluZ09wZXJh
dGlvbnMpCiB7Ci0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dD4oCi0gICAgICAgIFsmcGFpbnRpbmdPcGVyYXRpb25zXShXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlPENhaXJvT3BlcmF0aW9uUmVjb3JkZXI+KGNvbnRleHQsIHBhaW50aW5nT3BlcmF0
aW9ucyk7Ci0gICAgICAgIH0pOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxD
YWlyb09wZXJhdGlvblJlY29yZGVyPihwYWludGluZ09wZXJhdGlvbnMpOwogfQogCiBQYWludGlu
Z0NvbnRleHRDYWlybzo6Rm9yUmVjb3JkaW5nOjp+Rm9yUmVjb3JkaW5nKCkgPSBkZWZhdWx0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAKaW5kZXggODMwYWVkMDgyMmY1NzVkNTJjOGJkYmQxY2Uy
ODJiOGViYTdkNTBiYi4uMGY5ZDg3MjllNzFkZDQyZTgwZTU5ZWViMzhiYTgxYzA0YmVjZjNmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgVVNFKENH
KQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCkBAIC02
NywzMiArNjcsMTkgQEAgc3RhdGljIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IENHQ29udGV4dFdp
dGhIREMoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAot
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkK
K0dyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhIREMgaGRjLCBib29sIGhhc0Fs
cGhhKQorICAgIDogR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0Fs
cGhhKSkKIHsKLSAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsKLSAg
ICBpZiAoIWhkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEpKTsK
ICAgICBtX2RhdGEtPm1faGRjID0gaGRjOwotICAgIGlmIChtX2RhdGEtPm1fY2dDb250ZXh0KSB7
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91
ciBzdGF0ZS4KLSAgICAgICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAg
ICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIH0KIH0KIAog
Ly8gRklYTUU6IElzIGl0IHBvc3NpYmxlIHRvIG1lcmdlIGdldFdpbmRvd3NDb250ZXh0IGFuZCBj
cmVhdGVXaW5kb3dzQml0bWFwIGludG8gYSBzaW5nbGUgQVBJCiAvLyBzdWl0YWJsZSBmb3IgYWxs
IGNsaWVudHM/CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhE
QyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7
Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlz
SW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9ICFkZXByZWNh
dGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAg
ICAgaWYgKCFjcmVhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fZGF0YS0+cmVzdG9yZSgpOworICAg
ICAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xMTAsNyArOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVs
ZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dXBwb3J0QWxwaGFCbGVuZCA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJ
bWFnZUFscGhhTm9uZVNraXBGaXJzdCkpKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKLSAgICBDR0Nv
bnRleHREcmF3SW1hZ2UobV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2Uu
Z2V0KCkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3QsIGltYWdlLmdldCgpKTsKICAgICAKICAgICAv
LyBEZWxldGUgYWxsIG91ciBqdW5rLgogICAgIDo6RGVsZXRlREMoaGRjKTsKQEAgLTEyNCwyMSAr
MTExLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dz
Qml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvCiAgICAgUmV0YWluUHRyPENHRGF0YVBy
b3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aENGRGF0YShpbWFnZURhdGEuZ2V0KCkpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJ
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdl
LT5zaXplKCkuaGVpZ2h0KCksIDgsIDMyLCBpbWFnZS0+Ynl0ZXNQZXJSb3coKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZp
cnN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpKTsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UobV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKSwg
Q0dSZWN0TWFrZShwb2ludC54KCksIHBvaW50LnkoKSwgaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBp
bWFnZS0+c2l6ZSgpLmhlaWdodCgpKSwgY2dJbWFnZS5nZXQoKSk7ICAgCisgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2NnQ29udGV4dC5nZXQoKSwg
Q0dSZWN0TWFrZShwb2ludC54KCksIHBvaW50LnkoKSwgaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBp
bWFnZS0+c2l6ZSgpLmhlaWdodCgpKSwgY2dJbWFnZS5nZXQoKSk7ICAgCiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0K
IAogLy8gRklYTUU6IFRoaXMgaXMgbmVhcmx5IGlkZW50aWNhbCB0byB0aGUgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nIGZ1bmN0aW9uIGluIEdyYXBoaWNzQ29udGV4dE1hYy5tbS4KIC8v
IFRoZSBjb2RlIGNvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGFuZCBiZSBzaGFy
ZWQuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgZmxvYXQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyLjBmOwogICAgIG9mZnNldCAr
PSByYWRpdXM7CiAgICAgQ0dDb2xvclJlZiBjb2xvclJlZiA9IGNvbG9yLmlzVmFsaWQoKSA/IGNh
Y2hlZENHQ29sb3IoY29sb3IpIDogbnVsbHB0cjsKQEAgLTE2NCwxMSArMTQ4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHlsZS5tb2RlICE9
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZyAmJiBzdHlsZS5tb2RlICE9
IERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyKQogICAgICAgICByZXR1cm47
CiAKQEAgLTI0NCw1ICsyMjUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OmZsdXNoKCkKICAgICBDR0NvbnRleHRGbHVzaChtX2NnQ29udGV4dC5nZXQoKSk7CiB9CiAK
K0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q0c6OmRlcHJl
Y2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YTsKK30KKwog
fQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAppbmRleCBmMTQ0MjU3MmNj
NmQxZDU0YmJlZTU4YmRiYzM2ZWRmNzc0YWFiYjY0Li5mODI0ZjMxZmMyOGYyYmYxYzY1NDMxYjlm
Yzk5ZGE2Nzk1YTA5YmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkRJ
QlBpeGVsRGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUg
PGNhaXJvLXdpbjMyLmg+CkBAIC0xMjcsOSArMTI3LDkgQEAgc3RhdGljIHZvaWQgZHJhd0JpdG1h
cFRvQ29udGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBE
SUIKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRj
LCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAg
IGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8fCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIWRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKICAgICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJl
c3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4LDQgKzE3OCw5IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiB9CiAjZW5kaWYKIAorR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRleCAyOWE4MmE4OTc4MjI5YjBm
NTg3M2FiZGY4MmJmYWY4MDZjZjE2NTk4Li5lM2M2ZjdjNjI0YWU2Zjk5NTgyNzM0YjBmODg5Yzhm
ZjA2YTE4NmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKQEAgLTQ3LDE3ICs0
NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgcGxhdGZv
cm1Jbml0KGhkYywgaGFzQWxwaGEpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJl
Y3QsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250
ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVj
dCwgYm9vbCBoYXNBbHBoYSkKIHsKICAgICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0Lgog
ICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0
aWVzKCk7CiAKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5
KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQp
OworICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9y
eSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0
KTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgICgqcmVuZGVyVGFy
Z2V0KS0+QmluZERDKGhkYywgJnJlY3QpOwpAQCAtNjcsMTIgKzY3LDEyIEBAIEdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5k
ZXJUYXJnZXQsIFJFCiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKIH0KIAotR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUpCitH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyZXJUeXBlKQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCwgcmVuZGVyZXJUeXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6
OnN5c3RlbUZhY3RvcnkoKQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c3lzdGVtRmFjdG9yeSgpCiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0
b3J5ID0gbnVsbHB0cjsKICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODks
NyBAQCBJRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAg
cmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJ
RDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYg
KCFkZWZhdWx0UmVuZGVyVGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJU
YXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJu
IGRlZmF1bHRSZW5kZXJUYXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRj
KQogICAgICAgICByZXR1cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6
IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9u
UXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQo
KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4
dCkKIHsKICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNv
bnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAg
aWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRl
eHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjp+R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9
CiAKLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0CitQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgcmV0dXJuIG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGlu
Z0Rpc2FibGVkKCkpOwogICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0K
IApAQCAtMTk1LDMzICsxOTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjpjdXJyZW50R2xvYmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgq
cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBs
YXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmUoKTsKICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRy
PElEMkQxQml0bWFwPiYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXpl
JiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAg
RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgp
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFn
ZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVs
ZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wg
c3VwcG9ydEFscGhhQmxlbmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNl
V2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBw
b3J0QWxwaGFCbGVuZCkKIHsKICAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1f
ZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVhdGVk
Qml0bWFwKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAg
IERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFz
ZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAg
IDo6RGVsZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dz
Qml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFw
KiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJEOjpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7
CiB9CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdy
YXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkK
K0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBl
KQogICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5k
ZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5
KQorICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7
CiB9CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBv
d25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1f
b3duZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAgICAg
LCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVu
ZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1
bmlxdWVfcHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3Jl
bmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMxMCw5
ICszMDMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29saWRD
b2xvckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKK0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1
c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xv
cihjb2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMgKzM2
NCw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0
IGFuZ2xlKQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhH
bG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xv
cikgY29uc3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxm
bG9hdD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1
cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpz
b2xpZFN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250
ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhp
Y3NDb250ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0
Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCog
R3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCog
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsK
IH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29u
c3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNo
KCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxC
cnVzaC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCiB7
CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1c2go
KnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd1BhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkg
fHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJh
bnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAgRGly
ZWN0MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2Up
LCBJbnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1v
ZGUoKSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBi
b3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tu
ZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5
KCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VT
dHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJEMV9T
VFJPS0VfU1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0
cm9rZVN0eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVz
KG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2Fw
LCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUpv
aW4sIG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElE
LCAwLjBmKTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bVN0cm9rZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7CiB9
CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VT
dHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJv
a2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShy
ZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0
MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9y
LCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFz
ZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAg
LTU0MywxMSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRD
T00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBh
dHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZp
bGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRl
ZCBvbiBXaW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5G
aWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmRy
YXdQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlz
KSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRo
KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYg
Y29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29u
dGV4dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8
fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0
LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZp
bGxSZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyks
IERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Zmls
bFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6
ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBH
cmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBh
dXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VS
VCghbV9pbXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9y
bUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHBy
ZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVjdDJE
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3Np
dGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9y
bUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAg
ICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4
dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJl
Y3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6
OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBP
dXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4
dCgpLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBh
dGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
RGlyZWN0MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwog
fQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpn
ZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEzLDEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoIW1faW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKQEAg
LTc1NCwxMTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVu
ZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVjdDJE
OjplbmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNTRVJU
KCFtX2ltcGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFs
cGhhKCk7CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c1RyYW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
dXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAg
KHZvaWQpb2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9r
ZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNo
YW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3Jt
Q29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAor
ICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52
YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9
IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpKTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNl
dDsKKyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNl
dC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAg
ICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNv
bnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNo
b3VsZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRo
aXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVy
TGltaXQobGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJU
KG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAg
IAorICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9y
ID09IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2gg
PSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1D
b250ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290aGlu
Z01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJE
MV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUp
OworICAgIH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3Qo
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBo
YSA9PSBhbHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0KIAot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKKyAg
ICAgICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAg
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVy
cG9sYXRlOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05F
QVJFU1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xB
VElPTl9NT0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRF
UlBPTEFUSU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxh
dGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBEaXJl
Y3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0
aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpjbGVh
clJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4
dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwg
RGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNh
cCBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAg
Y2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
LCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAg
ICAgZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNo
ZXMuc2l6ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNl
dCkKICAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBs
ZW5ndGg7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBE
aXJlY3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZz
ZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9p
bikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpv
aW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9y
bUNvbnRleHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgq
cGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RN
KHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4
dCgpLCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3Jt
KTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6
OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5lVHJh
bnNmb3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxl
IGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKCpw
bGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRp
bmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhl
bHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQot
ewotICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0
aHMuYXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0
aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJv
a2VTdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBv
aW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGgg
cmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNw
bGF5IGxpc3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJw
b2xhdGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7
Ci0KLSAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkg
PSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQo
KSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250
ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
ZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRl
ZC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXND
QUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5v
dCBuZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNj
ZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICghaGFz
UGxhdGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBE
aXJlY3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShU
ZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICAo
dm9pZCltb2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBB
U1NFUlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNo
ID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5vLW9w
IGZvciBEaXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NFUlQo
bV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNldFN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGlu
IEQyRC4KKyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNv
bG9yKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOwor
ICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1f
c3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9y
LCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNo
ZXMgaW4gRDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxp
YXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxsaXBz
ZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3Rh
dGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNFRF9Q
QVJBTShmb250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4T2Zm
c2V0ID0gcG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUds
eXBocyk7CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsK
KyAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7
CiAKLSAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElB
TElBU19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwot
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01v
ZGUoZm9udFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZm
ZXIuYWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAgICBt
X2RhdGEtPnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhB
dChpICsgZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndp
ZHRoKCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+
d2lkdGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5j
ZS0+aGVpZ2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJsZSBz
eW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwor
ICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6Rmls
bFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNl
KHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0
ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6
b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0
RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBz
dGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFw
cGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGljc0Nv
bnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7Ci0g
ICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90IGlt
cGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nl
c3M7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1f
c3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgot
ICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
ZWxsaXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250ZXh0
ID0gJmdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZs
b2F0UmVjdCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNo
ZXMgaW4gRDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0
YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNs
dWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0Lmgi
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkK
LXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSgKLSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0K
LQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRl
clRhcmdldCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJ
bXBsRmFjdG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0pOwot
fQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAg
LCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0
LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkp
KQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9w
cml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250
ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwg
bV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PihyZW5kZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9y
bUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0
LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZh
dGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBtX3Bs
YXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1i
b29sIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQot
ICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29u
dGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwot
Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewot
ICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVp
Z2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAg
ICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3Rh
dGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRv
d09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5z
aGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdo
dCgpIH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9z
aXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxk
QW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFy
U2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1fcGxh
dGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zm
c2V0KQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwgZGFz
aGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5l
Sm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAg
IERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBE
aXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ewotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3Is
IERpcmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGll
bnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlm
ICghYnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhH
cmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9y
ID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3Bl
cmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
cHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVjdDJE
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91
c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNoYWRv
d1N0YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGlyZWN0
MkQ6OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRv
d1N0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJlY3Qy
RDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlv
dXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0KLSAgICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0Nv
bnRleHQoKSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJydXNo
V2l0aENvbG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNlLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAg
RGlyZWN0MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6Rmls
bFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5h
ZGRFbGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGxpbmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0
KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0
cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uo
c3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxp
cHNlKHJlY3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IERpcmVjdDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250
LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZv
bnRTbW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlm
ICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1
dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBo
cyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUds
eXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1H
bHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7
Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5h
ZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZy
b20pOwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwot
ICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7
Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdo
dCgpOwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50
aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERp
cmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpT
dHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6
OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGds
eXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAg
IHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFk
b3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3Qy
RDo6ZHJhd05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdl
KCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFs
cGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1h
Z2UucGxhdGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0
Zm9ybUNvbnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJl
Y3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVP
cGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJv
cmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRl
LnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBz
dGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwg
cG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50
TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURf
UEFSQU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9wbGF0
Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cmVz
dG9yZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwg
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4
dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZSht
X3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0g
ICAgRGlyZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTShtX3Bs
YXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmlj
ZVNjYWxlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRmb3Jt
Q29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAg
IERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRl
eHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6
OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJl
Y3QgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1
cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQg
PSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3ND
b250ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lm
IEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJ
WE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5MGVl
YTdiNDJmMjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25j
ZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
OwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoSUQy
RDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFw
aGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCopOwot
ICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9vbCBo
YXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVw
ZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGlt
aXQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
LCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZv
bnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRl
cm4oKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25z
dCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3Rv
cmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29u
c3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0
IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQot
ICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEo
Y29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2Vu
ZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlk
ZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9y
bUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0
OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4g
bV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3NzVh
NjJiYWVhMjJmOTkwNjA3ZWI0Y2JkLi42ZGJiZTk2NmQzOTY5OTI1OWU2NWM2Zjg1MGVlNmU3YzM1
Y2RkOTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0YXRp
YyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9STShX
SU4pCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhi
b29sIGluY2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3Mg
PSBpbmNsdWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1
ZGVDaGlsZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hv
dWxkSW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9z
aG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0NvbnRl
eHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6ZSYg
c2l6ZSkKQEAgLTk1LDcgKzk1LDcgQEAgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+
V2luZG93c0JpdG1hcCgpCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ6OldpbmRv
d3NCaXRtYXA+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlV2luZG93c0JpdG1hcChjb25zdCBJbnRT
aXplJiBzaXplKQogewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KG1fZGF0
YS0+bV9oZGMsIHNpemUpOworICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYywgc2l6ZSk7CiB9CiAjZW5kaWYKIApAQCAt
MTAzLDcgKzEwMyw3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhCiB7CiAgICAgSERDIGhkYyA9
IG51bGxwdHI7CiAgICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIGhkYyA9IG1fZGF0YS0+bV9oZGM7
CisgICAgICAgIGhkYyA9IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKICAgICAv
LyBGSVhNRTogU2hvdWxkIGEgYml0bWFwIGJlIGNyZWF0ZWQgYWxzbyB3aGVuIGEgc2hhZG93IGlz
IHNldD8KICAgICBpZiAoIWhkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewogICAgICAg
ICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCkBAIC0xMzUsMTcgKzEzNSwxNyBAQCBIREMgR3JhcGhp
Y3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29s
IHN1cHBvcnRBbHBoYQogICAgICAgICByZXR1cm4gYml0bWFwREMubGVhaygpOwogICAgIH0KIAot
ICAgIG1fZGF0YS0+Zmx1c2goKTsKLSAgICBtX2RhdGEtPnNhdmUoKTsKLSAgICByZXR1cm4gbV9k
YXRhLT5tX2hkYzsKKyAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+Zmx1c2goKTsKKyAg
ICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+c2F2ZSgpOworICAgIHJldHVybiBkZXByZWNh
dGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiB9CiAKIEhEQyBHcmFwaGljc0NvbnRleHQ6Omhk
YygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2RhdGEpCisgICAgaWYgKCFkZXByZWNhdGVkUHJpdmF0
ZUNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbV9kYXRh
LT5tX2hkYzsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwog
fQogCiAjaWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2Rm
ODhjNDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4
YTEwZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2UyYmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3
ZDllN2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBC
aXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSog
c2l6ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KGJtcEluZm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQsCiAgICAg
ICAgIDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsK
ICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsKIAogICAgIEZsb2F0U2l6ZSBpbWFnZVNp
emUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4
IDJjZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1
YmNiZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgog
I2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTc1LDcgKzc1
LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29u
c3QgSW50U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUo
aW1hZ2UpOwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CiAKLSAgICBHcmFwaGlj
c0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdl
dFJlZikpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKHRhcmdldFJlZik7CiAKICAgICBG
bG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGly
ZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJl
Y3QyRC5jcHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRjYTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4u
OTEyOWExN2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKQEAg
LTIzMiw3ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChz
Y3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4
dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRj
aENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3Jh
dGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtMzQyLDcgKzM0Miw3IEBAIEZs
b2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFw
aGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAg
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJU
YXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29u
dGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2Ny
YXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKQogICAgICAgICBz
dHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJh
ZjE2MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNiZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3
ICs5NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGlt
YWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uCiAKICAgICBSZXRhaW5QdHI8VUlHcmFw
aGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNz
SW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFVJ
SW1hZ2UgKmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3Jh
cGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwog
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVNpemUuaGVpZ2h0KTsKICAgICAgICAg
Y29udGV4dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2FsZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9
KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBGbG9hdFBvaW50KCksIHsgb3Jp
ZW50YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcK
IAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdl
UmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1
dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJl
bmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0Nv
bnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNv
bnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3Qo
RmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwg
Q29sb3I6OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGlj
YQogCiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1h
Z2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplKCldKTsKICAg
ICByZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgLy8gRklY
TUU6IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1
Z2dlc3RzIHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHJlZ3VsYXIKICAgICAgICAgLy8gZHJh
ZyBpbml0aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJpbHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29u
dGV4dC4KICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsK
QEAgLTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2Uo
RnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvbwogICAgIGF1dG8mIGlt
YWdlID0gKnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpOwogICAgIGF1dG8gcmVuZGVyID0g
YWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0
V2l0aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqZmluYWxJbWFnZSA9IFtyZW5k
ZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdlXShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJl
ckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAgICAgfV07CiAKQEAgLTI1Miw3ICsyNTIs
NyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yLCBjb25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5T
KFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6
ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdl
V2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29u
dGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4
dC5DR0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IHJlbmRl
cmVyQ29udGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dS
ZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEg
fSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNw
cAppbmRleCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDczYmEwMThhOWI2NTViZDJiLi41ZWMzOGU2
NDFiZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
b2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgi
CisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRl
eCBkMDIyZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNiODg3M2Y1NTA5Li40NDUwMWFiMTM5Yjhl
ZWVlOTE0Y2U2ZDg2NzQxN2IyZTllYzkyNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMTg2LDcgKzE4Niw3IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBp
bkxhYmVsLCBUCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICA6OlNlbGVjdE9iamVj
dCh3b3JraW5nREMuZ2V0KCksIGltYWdlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChjb250ZXh0UmVmKTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KGNvbnRleHRS
ZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZl
ciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwg
c28gd2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBTUkdCQTx1
aW50OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCBkYTk1MmJmNmIzY2ZhMmZiNmMw
OWFmMGQyZDY5ZjQ2M2Q3NmFlYzI2Li40YzBmOWM5NGQ2M2NmZjJkZGYxOWU0YTdhYWNiNGFlNTFi
Yzg2NGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBh
aW50Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQ
YWludENoZWNrZXIuY3BwCkBAIC0zOCw3ICszOCw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50Q2hl
Y2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3KQog
ICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21w
b3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHRy
dWUpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNoZWNrZXJDb250ZXh0KEdyYXBoaWNzQ29udGV4
dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwor
ICAgIEdyYXBoaWNzQ29udGV4dE51bGwgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0TnVs
bDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwog
ICAgIGZyYW1lVmlldy5wYWludChjaGVja2VyQ29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZpZXco
KS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRl
bnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDhlZmZjMDkyMjZlM2Q5OGVkY2YzYmQ0Yjgx
NDA1ZTliNmIzNjMzZDUuLjQ3YjRjZGQ0MjdmZDZmODNkMDRiYWI4ODViNGFhZWQ4ZDUyYzM5Yjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVj
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmNwcApAQCAtNjkwLDEwICs2OTAsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAg
ICBib3hTaGFkb3cgPSBib3hTaGFkb3ctPm5leHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dP
ZmZzZXQoYm94U2hhZG93LT54KCksIGJveFNoYWRvdy0+eSgpKTsKLSAgICBpZiAoIWJveFNoYWRv
dy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0
TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29s
b3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSk7CisgICAgY29udGV4
dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xv
ckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlz
V2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRp
dXNNb2RlOjpEZWZhdWx0KTsKIH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYg
c2l6ZSkKQEAgLTI0MzksMTAgKzI0MzYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAg
ICAgICAgICAgRmxvYXRQb2ludCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3Vu
ZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwg
cm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3Rv
cikpOwogICAgICAgICAgICAgRmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVk
U2hhZG93T3JpZ2luIC0gcGl4ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAK
LSAgICAgICAgICAgIGlmIChzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvcik7CisgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93
KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0
KTsKIAogICAgICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAg
IC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91
dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMjU0MywxMSArMjUzNyw3IEBAIHZv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYg
aW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShleHRy
YU9mZnNldCk7CiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGlmIChzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAg
ICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvd0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotCisgICAg
ICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICAgICAgY29udGV4
dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShwaXhlbFNuYXBwZWRPdXRlclJlY3QsIHBpeGVsU25h
cHBlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBmYjYxZTU0ZTRh
OGU5OWFjNjY5NGY3YzM0ZDBmZWU4ZjFkMDI2OTRmLi4wOTgyYTRkNTIwYThmNDFmY2JkNWRiNzFi
YzA2NDc1ZGExZWMzMTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcApAQCAtMTc4OSw3ICsxNzg5LDcgQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkKICAgICB9OwogCiAgICAgYXV0byB1cGRhdGVFdmVu
dFJlZ2lvbkZvckxheWVyID0gWyZdKEdyYXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KG51bGxwdHIpOworICAgICAgICBHcmFw
aGljc0NvbnRleHROdWxsIG51bGxDb250ZXh0KEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52
YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9u
OwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBh
Z2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVnaW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKaW5kZXggOWNlYTVmYTM0YzRh
NmMwODdmZGUyOGMyNTJhMzFmMTU1OGRlNjFmZi4uMTYxNzdjMDAwNzFlZTgyNmU4MDk2ZjNlZGY5
YjgyYmI4Yzg1MGZmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hh
cmVhYmxlQml0bWFwQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1No
YXJlYWJsZUJpdG1hcENhaXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvQml0bWFwSW1hZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvT3BlcmF0aW9ucy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogCkBAIC02MCw3ICs2MCw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCkKIHsKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZSA9IGNy
ZWF0ZUNhaXJvU3VyZmFjZSgpOwogICAgIFJlZlB0cjxjYWlyb190PiBiaXRtYXBDb250ZXh0ID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3Rv
cnkoYml0bWFwQ29udGV4dC5nZXQoKSkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dENhaXJvPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVC
aXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRz
dFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Y2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCmluZGV4IDA1MGIwNDllODVhMDM3NTkyOGIwZDY0N2Yx
YjBjYWM0ZWUxMWJiNjAuLjc0ZDI0NTc1NzlkMzgxZmVlMTBmM2VhNTQxNjhiOGI5ZDUwYmY5OTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKQEAg
LTEwNyw3ICsxMDcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAsIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dDb250
ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgMSwgLTEpOwogCi0gICAgcmV0dXJuIG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihiaXRtYXBDb250ZXh0LmdldCgpKTsKKyAgICByZXR1
cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oYml0bWFwQ29udGV4dC5nZXQoKSk7CiB9
CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgc291
cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1h
cERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBE
aXJlY3QyRC5jcHAKaW5kZXggMDhmNmZiNTJjODBjMzdjZWRkMTZmZTA3MDJhNTRiYmI1ODhkN2Vm
My4uY2QxNThmMGNiNjQ3NmJkMjQ4Zjk3YzAwNjk2NTliNGYxYmY2NGUwMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCkBA
IC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGly
ZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDFfMS5oPgpAQCAtMTA0LDcg
KzEwNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBpZiAoIXN1cmZhY2VDb250ZXh0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KHN1cmZhY2VD
b250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ+KHN1cmZhY2VDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmluZGV4IGRjMGE3MGI4ODI0YWZkYzdlYzNk
ZDFmNjlmNGQ5YjUxOTQyOTI0ZjYuLjRmNzhiNWViNWNkYjUxZjJlYmZjYWZmNjRlY2QxOWIxZTYz
MGFkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdT
dG9yZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtODQs
NyArODQsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxl
Qml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8mCiAgICAgLy8gUGFpbnQgYWxsIHVwZGF0
ZSByZWN0cy4KICAgICBJbnRQb2ludCB1cGRhdGVSZWN0TG9jYXRpb24gPSB1cGRhdGVJbmZvLnVw
ZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKICAgICBSZWZQdHI8Y2Fpcm9fdD4gY2Fpcm9Db250
ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fYmFja2VuZC0+c3VyZmFjZSgpKSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNyZWF0ZUZhY3RvcnkoY2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KGNhaXJvQ29udGV4dC5nZXQoKSk7CiAKICAgICAvLyBXaGVu
IG1fd2ViUGFnZVByb3h5LmRyYXdzQmFja2dyb3VuZCgpIGlzIGZhbHNlLCBiaXRtYXAgY29udGFp
bnMgdHJhbnNwYXJlbnQgcGFydHMgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSB3ZWJwYWdlLgogICAg
IC8vIEZvciBzdWNoIGNhc2UsIGJpdG1hcCBtdXN0IGJlIGRyYXduIHVzaW5nIENvbXBvc2l0ZU9w
ZXJhdG9yOjpDb3B5IHRvIG92ZXJ3cml0ZSB0aGUgZXhpc3Rpbmcgc3VyZmFjZS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQppbmRleCBmMThiYThmMDFi
MjZkZTNmZDNjZGZiMDI4MTI4NWNmMGQ0YTY2NjlmLi5kMDNlNjQzNGIxYWIyZmJkNWU1NTQzMjk2
OGIzZTlmNTY1OTJiYWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJp
bnRpbmdWaWV3Lm1tCkBAIC0zMCwxNSArMzAsMTYgQEAKIAogI2ltcG9ydCAiQVBJRGF0YS5oIgog
I2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQg
IlByaW50SW5mby5oIgogI2ltcG9ydCAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW1wb3J0ICJXZWJQ
YWdlUHJveHkuaCIKICNpbXBvcnQgPFF1YXJ0ei9RdWFydHouaD4KLSNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaD4KICNpbXBv
cnQgPHd0Zi9SdW5Mb29wLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKIE5TU3Ry
aW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxUb3BQcmludGluZ01hcmdpbktleSA9IEAiV2ViS2l0
T3JpZ2luYWxUb3BNYXJnaW4iOwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbEJvdHRv
bVByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbEJvdHRvbU1hcmdpbiI7CiAKQEAg
LTU1NSw3ICs1NTYsNyBAQCAtICh2b2lkKV9kcmF3UHJldmlldzooTlNSZWN0KW5zUmVjdAogCiAg
ICAgUmVmUHRyPFdlYktpdDo6U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBwYWdlUHJldmlld0l0
ZXJhdG9yLT52YWx1ZTsKIAotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOworICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCiAgICAgYml0bWFwLT5wYWludChjb250ZXh0LCBf
d2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSwgV2ViQ29yZTo6SW50UG9pbnQo
bnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+Ym91bmRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKaW5kZXggYWJkYWE2ZWIy
YzU3ZGUzZWU2NmMyYzNmZjE2NGEzMzRiMTI0MTVkOS4uOTBiNDI0YWNlMjk4MzdkMDViOTcwNmQw
MDQ4NWQ5NWY3ZTFlMmQwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0MkRJbXBsLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxk
M2QxMV8xLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9Q
REYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbQppbmRleCBmMjM0OGY4NTI0ZTk2M2YzYjgyNTg0YjQ1YTI3YTgyNzZiNDUwYjdi
Li5hNWYwMzAwZWE0ZTY2NWE0NzYwMjY5MjYzM2U4Zjk5ZjMxNThjNTA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTM1LDcg
KzM1LDYgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBERkFubm90YXRpb25UZXh0
V2lkZ2V0RGV0YWlscy5oIgogI2ltcG9ydCAiUERGQ29udGV4dE1lbnUuaCIKLSNpbXBvcnQgIlBE
RktpdFNvZnRMaW5rLmgiCiAjaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJTUEkuaCIKICNpbXBv
cnQgIlBERlBsdWdpbkFubm90YXRpb24uaCIKICNpbXBvcnQgIlBERlBsdWdpblBhc3N3b3JkRmll
bGQuaCIKQEAgLTcyLDcgKzcxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZv
cm1FbGVtZW50Lmg+CkBAIC0xMDYsNiArMTA1LDggQEAKICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0
b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0ICJQ
REZLaXRTb2Z0TGluay5oIgorCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJUykKIEBpbnRl
cmZhY2UgUERGRG9jdW1lbnQgKCkKIC0oaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJvdmlkZXI6KENH
RGF0YVByb3ZpZGVyUmVmKWRhdGFQcm92aWRlcjsKQEAgLTE5NDQsNyArMTk0NSw3IEBAIHZvaWQg
UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVyICpsYXllciwg
Q0dDb250ZXh0UmVmIGNvbnRlCiAgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBsb2Nh
bEFwcGVhcmFuY2UocGFnZS0+dXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250
ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggMTYyNTNjODg3MDcz
MDc3ODAwMGQ4NTNkNGRkZmQzMjI3OWQ4MTg5ZS4uZjdiZGI5NTcwNGRjNDU2MDIzNTkyNjM4MWRm
NjA0ZjAyODBkMDEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9FdmVudE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxVTGlz
dEVsZW1lbnQuaD4KQEAgLTMxNyw3ICszMTgsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBXZWJQ
YWdlOjpwZGZTbmFwc2hvdEF0U2l6ZShJbnRSZWN0IHJlY3QsIEludFNpemUgYml0bWFwU2l6ZQog
CiAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShwZGZDb250ZXh0LmdldCgpLCBkaWN0aW9u
YXJ5KTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0IHsgcGRmQ29u
dGV4dC5nZXQoKSB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQg
eyBwZGZDb250ZXh0LmdldCgpIH07CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zY2FsZSh7IDEs
IC0xIH0pOwogICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKDAsIC1iaXRtYXBTaXpl
LmhlaWdodCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9E
cmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDg3MTZkZjQ5YmQxOTJkMDEw
NTExNmI2YmRiMGFiNjk2MzE4NzdiYjguLmU5OTQ1N2M3NDIzMjFiNTNlMWY2ZWE1ZGM5MGRkZWE4
NjUyM2ViODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Ry
YXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKICNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNv
bnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkM2QxMV8xLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGIx
N2E3NGE0MzZhZTNkZTRmYjUyZjhmNTUzY2Y4MTE1ODA3ZDA5MDcuLjNmZWU3ZjU4N2RlYjNkNTQy
ZmNmZGU5OTJlOTQ2NTA4MDUwYjI3YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNzIsNiArMzcyLDExIEBACiAjaW5jbHVkZSAiV2ViUHJl
ZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLmgiCiAjZW5kaWYKIAorI2lmIFVTRShDRykKKy8vIEJ1
dCByZWFsbHkgcHJvYmFibHkgd2Ugc2hvdWxkIG1vdmUgdGhlIENHLXNwZWNpZmljIFBERiBwYWlu
dGluZyBjb2RlIG91dCBvZiBXZWJQYWdlLmNwcC4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENHLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01Mzg4LDcgKzUzOTMsNyBAQCB2
b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1RvUERGSW1wbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwg
Y29uc3QgUHJpbnRJbmZvJiBwcmludAogICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rp
b25hcnlSZWY+IHBhZ2VJbmZvID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAs
IDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKICAgICAgICAgICAgICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29u
dGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCi0gICAgICAgICAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGN0eChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHRDRyBjdHgoY29udGV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKEZsb2F0
U2l6ZSgxLCAtMSkpOwogICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLW1fcHJpbnRD
b250ZXh0LT5wYWdlUmVjdChwYWdlKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgbV9wcmlu
dENvbnRleHQtPnNwb29sUGFnZShjdHgsIHBhZ2UsIG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChw
YWdlKS53aWR0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCmluZGV4IGRlMWYwNmRkOGFk
YThmZGZmYzVhMDk4NzM5YzRhZWFiOWJiMzNhODUuLjM5OWIxZTgwYTNkODRkMWQwZDMwMDk2YWM0
NDY1MGFjOThmNTgxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAtMzQsNyArMzQs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ29udGV4dENhaXJvLmg+CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBXZWJQcmludE9wZXJh
dGlvbkd0azo6cmVuZGVyUGFnZShpbnQgcGFnZU51bWJlcikKICAgICBwcmVwYXJlQ29udGV4dFRv
RHJhdygpOwogCiAgICAgZG91YmxlIHBhZ2VXaWR0aCA9IGd0a19wYWdlX3NldHVwX2dldF9wYWdl
X3dpZHRoKG1fcGFnZVNldHVwLmdldCgpLCBHVEtfVU5JVF9JTkNIKSAqIG1feERQSTsKLSAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2NhaXJvQ29udGV4dC5nZXQoKSkpOwor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvIGdyYXBoaWNzQ29udGV4dChtX2NhaXJv
Q29udGV4dC5nZXQoKSk7CiAgICAgbV9wcmludENvbnRleHQtPnNwb29sUGFnZShncmFwaGljc0Nv
bnRleHQsIHBhZ2VOdW1iZXIsIHBhZ2VXaWR0aCAvIG1fc2NhbGUpOwogCiAgICAgY2Fpcm9fcmVz
dG9yZShtX2NhaXJvQ29udGV4dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCBkNTQxYzRjMDRmMmQ3NWQwNmJlZTA4
MGViY2ZlNjZiMGE0NWZiZWY2Li45MjhhZTdkNTFlM2YwYjdkOTEwMjBjN2RhMjg4ZWRlMjQ1YzM4
NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0
aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRp
c3RpY3MubW0KQEAgLTM5LDcgKzM5LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dseXBoUGFn
ZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUGFnZUNvbnNvbGVDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UHJpbnRDb250ZXh0Lmg+CkBAIC0zMDUsNyArMzA1LDcgQEAgLSAodm9pZClwcmludFRvQ0dDb250
ZXh0OihDR0NvbnRleHRSZWYpY2dDb250ZXh0IHBhZ2VXaWR0aDooZmxvYXQpcGFnZVdpZHRoSW5Q
aXgKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENH
IGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOwogICAgIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQ
YWdlc1dpdGhCb3VuZGFyaWVzKCpjb3JlRnJhbWUsIGdyYXBoaWNzQ29udGV4dCwgRmxvYXRTaXpl
KHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KaW5k
ZXggMmJhMDA2ZGQzZTdiMmFmYzUwZWZmMjg0NTMyMGQ5NjUwNWJhNzFiYS4uNzgzMjU2MTljMWFj
Nzc0NGU4OGZkNDkyNTM2Yzk1N2EwNDI0NGY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENh
c2NhZGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvYWRlck5TVVJM
RXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC03OCw3ICs3OCw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3
QXRQb2ludDooTlNQb2ludClwb2ludCBmb250OihOU0ZvbnQgKilmb250IHRleHRDb2xvcjooTlND
b2xvciAqCiAKICAgICAgICAgTlNHcmFwaGljc0NvbnRleHQgKm5zQ29udGV4dCA9IFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRl
eHQgPSBbbnNDb250ZXh0IENHQ29udGV4dF07Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3Jh
cGhpY3NDb250ZXh0IHsgY2dDb250ZXh0IH07CiAKICAgICAgICAgLy8gV2ViQ29yZSByZXF1aXJl
cyBhIGZsaXBwZWQgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgYm9vbCBmbGlwcGVkID0gW25z
Q29udGV4dCBpc0ZsaXBwZWRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCmluZGV4IGQzOTczZTI5
NDQ1OWVjZjFkYmRlZjQ0OWVmMmNmZDJjYWNiOGVkMzUuLjk1MGFlOGUwMGQzMGE0NTIwOWY5YWRk
YTNjMmIzM2YxMzEwMDIyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
Ykluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KQEAgLTI5LDcgKzI5
LDcgQEAKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHRWaWV3LmgiCiAjaW1wb3J0ICJXZWJOb2Rl
SGlnaGxpZ2h0LmgiCiAKLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTk4LDcg
Kzk4LDcgQEAgLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKIAogICAgICAgICBBU1NFUlQo
W1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CiAKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0gQ0dDb250ZXh0XSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAgICAgIFtf
d2ViTm9kZUhpZ2hsaWdodCBpbnNwZWN0b3JDb250cm9sbGVyXS0+ZHJhd0hpZ2hsaWdodChjb250
ZXh0KTsKICAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRl
eCBmMzVkN2JkNWEyMzUxYjJiMDFiNjhiYjFlMjE2Zjc0NTdlNDE4YTcxLi45NWJkYTM5MGNhNjli
YTZiOTYyMGY1MWJlZTY5NmIyMTIzOWFiMTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTgxLDcgKzgxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
RnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rp
b24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CkBAIC02MTMs
NyArNjEzLDcgQEAgLSAodm9pZClfZHJhd1JlY3Q6KE5TUmVjdClyZWN0IGNvbnRlbnRzT25seToo
Qk9PTCljb250ZW50c09ubHkKICNlbHNlCiAgICAgQ0dDb250ZXh0UmVmIGN0eCA9IFdLR2V0Q3Vy
cmVudEdyYXBoaWNzQ29udGV4dCgpOwogI2VuZGlmCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoY3R4KTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0
KGN0eCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFdlYkNvcmU6OkZyYW1lICpm
cmFtZSA9IGNvcmUoc2VsZik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggN2M0MzYxYTNhY2FkMTMzNDAxODI3ODgxM2ZiM2I2MDVjZDZmNmVmMC4u
MTdlZDJmNGE5ZjhiZThkNjEwZmIwNDkzMmI3ZTk4YzNiNzZiOTE5OSAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIx
LTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAg
IFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNw
bGF5TGlzdFRlc3RzQ0cuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIw
MjEtMDUtMjQgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjc3OTQwLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApp
bmRleCAxMmI5OTY5YzYzNGViNzQ5NTI4ZmMxNjhlMTY1MzRlZDdmNjQ4YzgwLi4zNWZkYTMyOTE3
OTRkZTFiMTkxYzg1NDY3MDlkZmMzNGI3MGU2N2E3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhZGllbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAK
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAt
NDgsNyArNDksNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIFJlcGxheVdpdGhNaXNzaW5nUmVz
b3VyY2UpCiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0
ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRI
ZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dD
b250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4
dC5nZXQoKSB9OwogCiAgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAKQEAgLTExMiw3ICsxMTMsNyBAQCBURVNU
KERpc3BsYXlMaXN0VGVzdHMsIE91dE9mTGluZUl0ZW1EZWNvZGluZ0ZhaWx1cmUpCiAKICAgICBh
dXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0Nv
bG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBj
b250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAg
ICAgRGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0OwogICAgIFdyaXRpbmdDbGllbnQgd3JpdGVyOwpA
QCAtMTQzLDcgKzE0NCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgSW5saW5lSXRlbVZhbGlk
YXRpb25GYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3Bh
Y2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBj
b250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBj
Z0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gcnVuVGVzdFdpdGhJbnZhbGlkSWRlbnRpZmll
ciA9IFsmXShGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgewogICAgICAgICBFWFBFQ1RfRkFM
U0UoaWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>
<flag name="commit-queue"
          id="450802"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429578</attachid>
            <date>2021-05-24 15:47:42 -0700</date>
            <delta_ts>2021-05-24 17:01:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524154741.patch</filename>
            <type>text/plain</type>
            <size>365787</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjIyMThjNGE5NzA0
ZDljMGJhNDM3MTM4Y2RiYjE1ZGRiOWY1My4uYzI4ZDk4ODc4MWUyZmIyYWIwMDkzYTRmOTY1ZjYx
M2YxMDhmMGY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0
b3AgdXNpbmcgVW5jaGVja2VkTG9jayBpbiBTaGFkb3dCbHVyJ3MgU2NyYXRjaEJ1ZmZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCA5YmQzNmQ3MTg3NGIzY2FiMjcxMjQwMjQzMmU3ZjNlNTk1N2Y1N2M1Li4yZjVkZjFl
NTE5NTEzNTk2OWNhZmUzOTdmNTAwYjQ4NjJmNDAwZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCk6CisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmll
dyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVE
aXJlY3QyRC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNv
bnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnJlbmRlclBhZ2UpOgor
CiAyMDIxLTA1LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Nzk0MC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwppbmRleCA1OWEyMzY0MmI1MDYyNjVlZmZlMzU0NWY0NjVhN2Y5MDc5ZTE5ZTQ3Li5k
MzE0MGQyZjhiOGEzNjk2NDA5MDA3ZGY0ZTcxMjZmNDZjNTkxNmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0Nv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJpbnRUb0NH
Q29udGV4dDpwYWdlV2lkdGg6cGFnZUhlaWdodDpdKToKKyAgICAgICAgKiBNaXNjL1dlYktpdE5T
U3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdBdFBvaW50OmZv
bnQ6dGV4dENvbG9yOl0pOgorICAgICAgICAqIFdlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodFZpZXcgZHJhd1JlY3Q6XSk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYXdS
ZWN0OmNvbnRlbnRzT25seTpdKToKKwogMjAyMS0wNS0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzc5
NDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAwOWJmMDI0MDc2NmM3OGE3OTA1NTlhMGY0MTU4NzZh
OGI2MGUyMzkzLi5lMDQ1OTgxYWZhZGRmZWU4NzJkZmRhZThmYjE1ZTljYmEyNzlkN2IyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEyMzgsNyArMTIzOCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1GVFcuY21ha2UKaW5kZXggNGNjMzkxOTkzMTU0NzNkOWFkMzE3MmI2YWFjMWI1OWJhOGJmMTkx
Yy4uNzExNDdhNGUyY2QxNWVlMDFiZjFjMDIxZWVjYjY0NTZiZGVjODAwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1GVFcuY21ha2UKQEAgLTQzLDcgKzQzLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ2VuZXJpYy9LZXllZEVuY29kZXJHZW5lcmljLmNwcAogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNw
bGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAg
LTcxLDcgKzcwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNv
bldpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCkBAIC0xODksNyArMTg3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRl
VXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xs
ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA5N2NlNTQ3MzIxZGMzN2NiZDI1NzU4ZjRmYTYzOTBmNzQxMmRhMzBmLi5h
NWExYWZiMzVkYzk1OGJmNDUzOTVlMDU5MTBmMzUzNGIwYzY1ZjYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTk4Miw3ICsxOTgyLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dElt
cGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJVcGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZiNzRlZjJlNGM5MmExMTIzOGVjODhmYmEwZDlmMDM3
Y2Q1NTRhNmMuLmI0ZDkwOTRmM2ZjMjJmMGNjYWJjMDEzMGYzNThiOGFjZjJlOWFhNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTg2MSw3ICs4NjEsNiBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyogTWVkaWFLZXlz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJG
NzMzMURCRkRDMEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQkyRDlCRjc0NzFE
QkZEQzQ5MDA3QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMwRjAwN0E3RDk5
IC8qIE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMxNEZGMUNCRjAw
QkEwRkY3IC8qIGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGluZWFyU1JHQi5p
Y2MgKi87IH07Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAw
MTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEQUYzNDNEMUVBN0UwRjEw
MDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3Rh
bnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJGRTk3MDBDRkNCQUIgLyogTW9k
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQzhE
Mzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21w
b3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
ODYsOCArNjA4NSw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xV
bmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RUQx
QkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBNZW51Q29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUNDRDcwMDQ1QTUwNyAvKiBTZWFy
Y2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVDb2NvYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjQwMUZBRDg4MTAwMDUz
MUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAzQzA3
MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5RDA3
MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzAwOCw4ICsyNzAwNSw2IEBACiAJCQkJ
N0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
ICovLAogCQkJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4
N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYx
MkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0zMjY5NSw3ICszMjY5MCw2
IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAw
OUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
OUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGlj
c0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBFNDIw
RjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDAwOTc5ZDAwOWI4NTU2M2U1
MjdmODI4MWZlNzJhOWQxNzk5MzBhZTMuLmQ0NjhmYmMwZjc2YWIwYjJkYjIyMmFkNjBhY2NkZTRj
NjY1ZGYyMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMTI5OCwxMCArMTI5OCw3IEBAIHZv
aWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYg
cGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZp
bGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFk
anVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3Qu
cmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRv
dygpKQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93
KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93
KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKKyAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIC8vIElm
IHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93
ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQxMiwxMSArMTQwOSw3IEBAIHZvaWQgQm94
RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRp
bmdDb250ZXh0LCBTaGFkCiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnRyYW5zbGF0
ZShleHRyYU9mZnNldCk7CiAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAot
ICAgICAgICBpZiAoc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWlu
dGluZ0NvbnRleHQuY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0KKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93Lmlz
V2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRp
dXNNb2RlOjpEZWZhdWx0KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmls
bENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDRmNDZmNjU5MDk1
OWExZTRjZGRjZGNjMzc1MjgwNTE2ZDQyY2ExZDEuLmU3YzAyODVmNzU1NDU0ODAzYjE0MGM5MjBi
ZDRiMmFmZGZlNjFmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yNTIsNyArMjUyLDcg
QEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc0FjY2VsZXJhdGVkKCkgY29u
c3QKIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIGF1dG8q
IGNvbnRleHQgPSBjYW52YXNCYXNlKCkuZXhpc3RpbmdEcmF3aW5nQ29udGV4dCgpOwotICAgIHJl
dHVybiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCk7CisgICAgcmV0
dXJuIGNvbnRleHQgJiYgY29udGV4dC0+cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTExMjAs
NyArMTEyMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xpcEludGVy
bmFsKGNvbnN0IFBhdGgmIHBhdGgsIENhbnZhc0ZpbGxSdWxlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHJlYWxpemVTYXZlcygpOwotICAgIGMtPmNhbnZhc0NsaXAocGF0aCwgdG9XaW5kUnVsZSh3
aW5kaW5nUnVsZSkpOworICAgIGMtPmNsaXBQYXRoKHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1
bGUpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpiZWdpbkNvbXBv
c2l0ZUxheWVyKCkKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9h
CiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgY29udGV4dC0+c2F2ZSgp
OwogICAgICAgICBzYXZlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQtPnNldExlZ2FjeVNoYWRv
dyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250
ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogICAgIH0KICAgICBpZiAoc3RhdGUoKS5nbG9iYWxB
bHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEzNzksOSArMTM3OSw5IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlTaGFkb3coKQogICAgIGlm
IChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gc3RhdGUoKS5z
aGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Ip
OworICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUo
KS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCks
IDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0
U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5KTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaG91bGREcmF3
U2hhZG93cygpIGNvbnN0CkBAIC0yMDMwLDcgKzIwMzAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRl
cm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVy
bjo6Y3JlYXRlKG5hdGl2ZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHJlcGVhdFgsIHJlcGVhdFks
IG9yaWdpbkNsZWFuKSB9OwogI2VuZGlmCiAKLSAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSAhZHJh
d2luZ0NvbnRleHQoKSB8fCBkcmF3aW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5n
Q29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSB2aWRlb0VsZW1lbnQuY3JlYXRlQnVmZmVyRm9yUGFp
bnRpbmcoc2l6ZSh2aWRlb0VsZW1lbnQpLCByZW5kZXJpbmdNb2RlLCBjb2xvclNwYWNlKCksIHBp
eGVsRm9ybWF0KCkpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjQ3Myw3ICsyNDczLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBmbG8KIAogICAg
ICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0TGVn
YWN5U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAg
ICAgICAgICBjLT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0Nv
bG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkK
ICAgICAgICAgICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAppbmRleCA2NTgzYzM2OWZkYTFjMDZkOTQzNzVjY2RjMjNmYzhiNzIy
MzBiZjVhLi4zMTcyZTdmNzlmNjBhMTQ4M2FmMDhmZjhmMjYzNmJmNzI5YTRjYzMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00MTg3LDEyICs0MTg3LDEyIEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVDb250cm9sVGludHMoKQogICAgICAgICBwYWdlLT5zZXRJc0NvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3RzKGlzQ3VycmVudGx5Q291bnRpbmdSZWxldmFudFJlcGFpbnRl
ZE9iamVjdCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0
aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHBhaW50SW52YWxp
ZGF0aW9uUmVhc29ucykKK3ZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0
aW9uKEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCiB7CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxh
eW91dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBh
aW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgR3JhcGhpY3NDb250ZXh0TnVsbCBjb250ZXh0
KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IGNvbnN1bHQgcGFpbnRzRW50aXJlQ29udGVudHMoKS4KICAgICAg
ICAgcGFpbnRDb250ZW50cyhjb250ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCkpOwpAQCAtNDc0Miw3ICs0NzQyLDcgQEAgdm9pZCBGcmFtZVZpZXc6
OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKGZsb2F0ICpuZXdCb3R0b20sIGZsb2F0IG9sZFRv
cCwgZmxvYXQKIAogICAgIH0KICAgICAvLyBVc2UgYSBjb250ZXh0IHdpdGggcGFpbnRpbmcgZGlz
YWJsZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIEdyYXBoaWNzQ29udGV4dE51bGwgY29u
dGV4dChHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUp
OwogICAgIHJlbmRlclZpZXctPnNldFRydW5jYXRlZEF0KHN0YXRpY19jYXN0PGludD4oZmxvb3Jm
KG9sZEJvdHRvbSkpKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCgwLCBzdGF0aWNfY2FzdDxpbnQ+
KGZsb29yZihvbGRUb3ApKSwgcmVuZGVyVmlldy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WCgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpKTsKICAgICByZW5k
ZXJWaWV3LT5zZXRQcmludFJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmlu
ZGV4IDllZDFjNzIzZTk5YzJhMmNhNjE5Y2M4ODVlZTJhY2E1NjY2ZjlhMGYuLjgwZDM2ZjJjZjdj
MTdhMTM0ZDljYTQ4NWUzNzM0NThlOWNiNDgyZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApA
QCAtNjY2LDkgKzY2Niw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0TnVsbDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0TnVsbDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODk0YjVj
Y2U0MjExZGIxZGZlMmQ0NmNhZjBmNjVjNDQyMWE1MWE0ZC4uZGE4Mzc3OWZmY2UwNmM5NWI5Njkx
ZGU1ZDk0NmRjYmYxZjQwZTM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKQEAgLTgyLDExICs4MSw2IEBAIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSgpCiAgICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQogICAgICwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCiAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhmYWxzZSkKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3Rs
eSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAz
NDQyPiksCi0gICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBiZWhhdmlv
ciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzKGZhbHNlKQotI2VuZGlmCiAgICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkK
IHsKIH0KQEAgLTE2MCwxMCArMTU0LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2U6OmFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHCiAgICAg
fQogCiAgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cy4KICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CiAgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7CiAg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICAgICAg
bV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9
CiAKICAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkpCkBAIC0yMjksMTQgKzIyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0ln
bm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwogCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
IHsKLSNpZiBVU0UoQ0cpCi0gICAgICAgIGlmIChtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRp
dXMpCi0gICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX3N0YXRlLnNoYWRvd09m
ZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICAgICAg
ZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRv
d09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICB9
CisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
YWRvd0NoYW5nZSkpCisgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zm
c2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hh
ZG93UmFkaXVzTW9kZSk7CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKICAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwpAQCAtMzAyLDkgKzI5
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ct
Ymx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hh
ZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zmc2V0KTsKLSNpZiBVU0UoQ0cpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cyk7Ci0jZW5kaWYKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBA
IC0zNjEsNTUgKzM0NywxOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaAogICAgIHJldHVybiB0
czsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKLSAgICA6IG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zKHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKLXsKLX0KLQotR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KQotewotICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5JiBmYWN0b3J5RnVuY3Rpb24pCi0gICAgOiBtX2ltcGwoZmFj
dG9yeUZ1bmN0aW9uKCp0aGlzKSkKLXsKLX0KLQogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3ND
b250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCgh
bV90cmFuc3BhcmVuY3lDb3VudCk7Ci0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmhhc1BsYXRmb3JtQ29udGV4dCgpOwotICAg
IHJldHVybiAhIW1fZGF0YTsKKyAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRl
KTsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zYXZlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAg
IExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBp
cyBlbXB0eSIpOwogICAgICAgICByZXR1cm47CkBAIC00MjIsMjAgKzM3MiwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiAgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1t
ZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5
LgogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgbV9zdGFjay5jbGVhcigpOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJlc3RvcmUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBzYXZl
KCk7CiAKICAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7CkBAIC00NTEsNjcgKzM5MSwy
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0g
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7Ci0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIG1f
c3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9r
ZVN0eWxlKHN0eWxlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7
CiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hh
bmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9h
dFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1f
c3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJs
dXI7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBt
X3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBz
ZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBD
b2xvciYgY29sb3IsIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKIHsKICAgICBtX3N0YXRl
LnNoYWRvd09mZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwog
ICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0
Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yKTsKKyAgICBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUgPSByYWRpdXNNb2RlOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJTaGFkb3coKQpAQCAtNTE5LDE1ICs0MTMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJTaGFkb3coKQogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CiAgICAg
bV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKICAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3Io
KTsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gZmFs
c2U7Ci0jZW5kaWYKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclNo
YWRvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFyUGxhdGZvcm1TaGFkb3co
KTsKKyAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZh
dWx0OworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yKSBjb25zdApAQCAtNTQ0LDY2ICs0
MzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zQ2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEFu
dGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykKLXsKLSAgICBtX3N0YXRlLnNob3VsZEFudGlh
bGlhcyA9IHNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50
aWFsaWFzQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3Jt
U2hvdWxkQW50aWFsaWFzKHNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKQotewotICAg
IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsKLSAgICAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKHNob3Vs
ZFNtb290aEZvbnRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLXsKLSAg
ICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHNDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KQotewotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1JbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIHVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4m
JiBwYXR0ZXJuKQpAQCAtNjExLDggKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5zdHJva2VD
b2xvciA9IHsgfTsKICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02MjAs
OCArNDQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0
ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07CiAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZN
b3ZlKHBhdHRlcm4pOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAg
ICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5D
aGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUmVm
PEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZUdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pCkBAIC02MzAsMTUgKzQ1Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFm
ZmluZVRyCiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwog
ICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0cm9rZUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm07CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBtX3N0YXRl
LmZpbGxSdWxlID0gZmlsbFJ1bGU7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
OworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKQpAQCAtNjQ3LDY0ICs0NjUsMzkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW4KICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQp
OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOyAvLyBGSVhNRTogYWxzbyBmaWxsIHBh
dHRlcm4/CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxHcmFkaWVudENoYW5nZSk7CisgICAgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpOwotICAgIGVsc2UKLSAgICAgICAgYmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5j
eUxheWVyKG9wYWNpdHkpOwotICAgICsrbV90cmFuc3BhcmVuY3lDb3VudDsKKyAgICArK21fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgZWxzZQotICAgICAgICBlbmRQbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKCk7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKTsKLSAgICAt
LW1fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OwogfQogCiBGbG9hdFNpemUg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0
aW9uYWw8dW5zaWduZWQ+IHRvKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQogICAgIC8vIERpc3BsYXkgbGlzdCByZWNvcmRpbmcg
Zm9yIHRleHQgY29udGVudCBpcyBkb25lIGF0IGdseXBocyBsZXZlbC4gU2VlIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocy4KICAgICByZXR1cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBw
b2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRv
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgQmlkaVJlc29sdmVyPFRleHRSdW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlk
aVJlc29sdmVyOwogICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhydW4uZGly
ZWN0aW9uKCksIHJ1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkpKTsKICAgICBiaWRpUmVzb2x2ZXIu
c2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigmcnVuLCAw
KSk7CkBAIC03MzQsMTkgKzUyNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICBiaWRp
UnVucy5jbGVhcigpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1JbWFnZShpbWFn
ZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwotfQotCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewogICAgIHJldHVybiBkcmF3SW1hZ2Uo
aW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzYw
LDE4ICs1NDAsMTIgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW4KIAogSW1hZ2VEcmF3UmVzdWx0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRo
aXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRy
YXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCiBJbWFnZURyYXdS
ZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Nj
b3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBp
bWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFj
aW5nLCBvcHRpb25zKTsKIH0KQEAgLTc3OSw5ICs1NTMsNiBAQCBJbWFnZURyYXdSZXN1bHQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCiAgICAgSW1hZ2U6OlRp
bGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBpZiAoaFJ1bGUgPT0g
SW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewogICAg
ICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCiAgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwpAQCAtODAzLDE0ICs1NzQsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwgJiYgbV9pbXBsLT5jYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2UpKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBv
cHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KQEAgLTgzMywzNiArNTk2LDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlz
LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIEltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5kcmF3UGF0dGVybihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVBhdHRlcm4oaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRk
Um91bmRlZFJlY3QocmVjdCk7CiAgICAgY2xpcFBhdGgocGF0aCk7CkBAIC04NzAsOSArNjExLDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CiAg
ICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwogICAgICAgICByZXR1cm47CkBAIC04ODUsMTQg
KzYyMyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKGRyYXdpbmdGdW5jdGlvbikpOwotICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzUmVzdWx0OjpTdWNjZXNzOwotICAgIH0KLQogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihkZXN0aW5hdGlvbi5zaXplKCksIGNv
bG9yU3BhY2UsICp0aGlzKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpGYWlsZWRUb0NyZWF0ZUltYWdlQnVmZmVyOwpA
QCAtOTA0LDYxICs2MzQsMjIgQEAgR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWEKIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhp
cywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
ICYmICFVU0UoQ0FJUk8pCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNv
bnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsK
IH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRl
eHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUg
PSBtb2RlOwotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShtb2RlKTsKLX0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChy
ZWN0LCBncmFkaWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBncmFkaWVudC5m
aWxsKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
ZmlsbFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0
ZU9wZXJhdGlvbigpOwogICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsK
ICAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7CkBAIC05NjcsMjggKzY1OCwxNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvcwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJvdW5kZWRS
ZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBwbGF0Zm9ybUZpbGxS
b3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVj
dCwgY29sb3IpOwogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0
aW9uKCkpOwogICAgIH0gZWxzZQogICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3Is
IGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwogfQogCi0jaWYgIVVTRShDRykgJiYg
IVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlSTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKQEAgLTEwMDgsNzAgKzY4
NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSbwogICAgIHNldEZpbGxSdWxlKG9sZEZpbGxS
dWxlKTsKICAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9zdGF0ZS5h
bHBoYSA9IGFscGhhOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQWxwaGEoYWxwaGEpOwotfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwogICAgIG1fc3RhdGUuYmxl
bmRNb2RlID0gYmxlbmRNb2RlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0
aW9uQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VN
YXNrKQotewotICAgIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFz
azsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7Ci19Ci0KLSNp
ZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVz
ZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCi17Ci0gICAgbV9zdGF0ZS51
c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYg
IVVTRShESVJFQ1QyRCkKLS8vIEltcGxlbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIGdvIHB1c2gg
dGhlIGRyYXdpbmcgbW9kZSBpbnRvIHlvdXIgbmF0aXZlIGNvbnRleHQgaW1tZWRpYXRlbHkuCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0FJUk8pICYmICFVU0UoRElS
RUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJv
a2VTdHlsZSkKLXsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKIH0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykg
JiYgIVVTRShESVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3Vs
ZFNtb290aEZvbnRzKGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0Uo
RElSRUNUMkQpICYmICFVU0UoQ0FJUk8pCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVy
YXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBl
blN0eWxlKQogewpAQCAtMTEwMiwyNCArNzI0LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
anVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIK
ICAgICB9CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLSNl
bmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBzY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotfQotICAgIAog
RmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0
ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKQEAgLTExMzMsMjQgKzczNywxMCBAQCBGbG9hdFNpemUg
R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29ucwogICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNy
Y1JlY3Quc2l6ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHBsYXRmb3JtRmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGVsbGlwc2UpOworICAgIGZpbGxQ
YXRoKHBhdGgpOworICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCkBAIC0xMTY3
LDIzICs3NTcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLSNp
ZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxs
aXBzZSk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0
KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJs
aW5lcywgc3R5bGUpOwogfQotI2VuZGlmCiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNv
bXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBw
cmludGluZykKIHsKQEAgLTEyMTgsMjAgKzc5NSw2IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxv
CiAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRo
aWNrbmVzcykpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLXsKLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhz
dGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5zdHJva2VUaGlja25lc3MpOwot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0g
ICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdGF0ZS5zdHJva2VDb2xvcik7Ci0gICAgc2V0UGxh
dGZvcm1GaWxsQ29sb3Ioc3RhdGUuZmlsbENvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKHN0YXRlLnN0cm9rZVN0eWxlKTsKLSAgICBzZXRQbGF0Zm9ybUFscGhhKHN0YXRlLmFscGhh
KTsKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhz
dGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRh
c2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25z
dAogewogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTI4Mywz
NiArODQ2LDE1IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxp
bmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQx
LCBwb2ludDIgfTsKIH0KIAotI2lmICFVU0UoQ0cpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcm
LCBjb25zdCBGbG9hdFJlY3QmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVz
dGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKQotewotfQot
Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1wbC0+Y2FuUGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
cikpIHsKLSAgICAgICAgbV9pbXBsLT5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5h
dGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBwbGF5ZXIucGxheWVyUHJpdmF0
ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQog
I2VuZGlmCiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0TnVsbDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK3sKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBjNzhh
ZjdlMjVkZGI1NDE0M2NlYjU5YTExZmZmYzIzYWFhMzQ3MTY3Li44NGEyMTcwM2JjYzAxMjliZWI0
ZjYyNjFlMjI2N2MwMWFjNTBjYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdl
UGFpbnRpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRl
cm4uaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CkBAIC04Niw3ICs4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRy
YW5zZm9ybTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFJlY3Q7CkBAIC0xMTAsNiArMTEwLDEz
IEBAIGVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CiB9OwogdXNpbmcgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKIAorLy8gTGVn
YWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJv
eC1zaGFkb3cuCisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4K
K2VudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAg
TGVnYWN5Cit9OworCiBlbnVtIFN0cm9rZVN0eWxlIHsKICAgICBOb1N0cm9rZSwKICAgICBTb2xp
ZFN0cm9rZSwKQEAgLTIxOSwxNCArMjI2LDEyIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSB7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciB9OwogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1v
ZGU6Ok5vcm1hbCB9OwogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFNoYWRvd1Jh
ZGl1c01vZGUgc2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsK
IAogICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICBib29sIHNob3VsZFNtb290aEZv
bnRzIDogMTsKICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7CiAgICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0jaWYgVVNFKENHKQotICAgIGJvb2wg
c2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA6IDE7Ci0jZW5kaWYKICAgICBib29sIGRyYXdMdW1pbmFu
Y2VNYXNrIDogMTsKICNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UgOiAxOwpAQCAtMjU0LDI3ICsyNTksMTUgQEAgc3RydWN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xh
c3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0Nv
bnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKLSAgICAKLSAg
ICB1c2luZyBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSA9IFdURjo6RnVuY3Rpb248c3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+KEdyYXBoaWNzQ29udGV4dCYpPjsKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkmKTsKK3B1YmxpYzogICAKIAotICAgIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgCi0gICAgZW51bSBj
bGFzcyBQYWludEludmFsaWRhdGlvblJlYXNvbnMgOiB1aW50OF90IHsKLSAgICAgICAgTm9uZSwK
LSAgICAgICAgSW52YWxpZGF0aW5nQ29udHJvbFRpbnRzLAotICAgICAgICBJbnZhbGlkYXRpbmdJ
bWFnZXNXaXRoQXN5bmNEZWNvZGVzLAotICAgICAgICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQK
LSAgICB9OwotICAgIEdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFVTRShESVJFQ1Qy
RCkKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRAogICAgIGVudW0gY2xhc3MgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgOiB1aW50OF90
IHsKICAgICAgICAgQ1BVTWVtb3J5LAogICAgICAgICBHUFVNZW1vcnkKQEAgLTI4MiwyNTAgKzI3
NSwyNzEgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCosIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKICNlbmRp
ZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgYm9vbCBw
YWludGluZ0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YSAmJiAhbV9pbXBsOyB9Ci0g
ICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7
IH0KLSAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9Ci0gICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9Ci0gICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludGlu
Z0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVy
Zm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rl
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0Nv
bnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgLy8gQ29udGV4dCBTdGF0
ZQorCisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQogICAgIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9
CiAKLSAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKKyAgICB2b2lkIHNldFN0
cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHls
ZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxl
Q2hhbmdlKTsgfQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VTdHlsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJv
a2VDb2xvcihjb25zdCBDb2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tl
UGF0dGVybihSZWY8UGF0dGVybj4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJv
a2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKLSAgICB2b2lk
IHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50
KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQu
Z2V0KCk7IH0KIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgIHZvaWQgc2V0
RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpOyB9CiAgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZp
bGxSdWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4m
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4m
Jik7CiAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZp
bGxQYXR0ZXJuLmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFk
aWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAg
IEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFk
aWVudC5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29s
KTsKKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJv
b2wpOworICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7
IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQog
ICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRB
bnRpYWxpYXM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9u
dHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290
aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsg
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZv
bnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9CiAKICAgICAvLyBOb3JtYWxseSBDRyBlbmFi
bGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3Jt
YW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRv
IGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhz
LgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wpOworICAgIHZv
aWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KIAotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB1cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5n
ZSk7IH0KKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CiAK
LSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpOwotICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgUGF0aCYpOworICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBo
YSA9IGFscGhhOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxw
aGFDaGFuZ2UpOyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFs
cGhhOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KKworICAgIHZvaWQgc2V0RHJh
d0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1p
bmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KKyAgICBib29sIGRy
YXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFz
azsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3Mg
bW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7IHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOyB9CisgICAg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3co
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYs
IENvbG9yJikgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGJvb2wpOworICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhhc1NoYWRv
dygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dC
bHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1
cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURh
cmtBcHBlYXJhbmNlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KICNlbmRpZgotICAg
IGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlc3RvcmUoKTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogICAgIAogICAg
IHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAK
KyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNl
IHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxs
UGF0dGVybigpID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGlu
c3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIC8vIEZJWE1FOiBD
YW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3Ig
anVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7IH0KKworICAgIC8vIFBpeGVsIFNuYXBwaW5nCisKKyAgICBlbnVtIFJvdW5kaW5n
TW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGlt
ZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVz
KEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9r
ZVN0eWxlKTsKKworICAgIC8vIEJhc2ljIFNoYXBlcworCiAgICAgLy8gVGhlc2UgZHJhdyBtZXRo
b2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAvLyBGSVhNRTogLi4u
ZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tl
cwogICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3Jk
ZXJzIChvZiB0aGUgY29ycmVjdAogICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdm9pZCBkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKTsKLSAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcyA9IDEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpOwogCi0gICAgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9
CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50Jik7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0g
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKTsKKyAg
ICAvLyBGSVhNRTogV2h5IGFyZW4ndCB0aGVzZSBwYXJ0IG9mIHRoZSBzdGF0ZT8KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1l
ZGlhCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSB9KTsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdl
IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJh
d1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZh
Y3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdD
b25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAgICAvLyBDbGlwcGluZwogCi0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOworCisg
ICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBlbnVtIGNs
YXNzIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRU
b0NyZWF0ZUltYWdlQnVmZmVyIH07Ci0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwogICAgIAot
ICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRUZXh0RHJhd2lu
Z01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRl
eHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0Fw
cGVhcmFuY2UoYm9vbCk7Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KLSNlbmRpZgotCi0gICAgRmxvYXRTaXpl
IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9t
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlv
bmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQo
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZv
bnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQ
YWludElmRm9udE5vdFJlYWR5KTsKLQotICAgIHZvaWQgYnVpbGRlclN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKIAotICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91
bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGlu
Z01vZGUgPSBSb3VuZEFsbFNpZGVzKTsKKyAgICAvLyBUZXh0CiAKLSAgICBGbG9hdFJlY3QgY29t
cHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
Zyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9r
ZSk7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZs
b2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21v
b3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNp
c01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8
dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRy
YW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAw
KSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYs
IGJvb2wgcHJpbnRpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZh
bHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNo
YWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFk
b3cuCi0gICAgLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0g
ICAgdm9pZCBzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImKTsKKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwg
ZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+
IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlz
aWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxl
KCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFk
b3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRo
KCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVy
cmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUu
c2hhZG93Qmx1cjsgfQorICAgIC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0g
MDsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0
aW9uPyBPciBlbHNld2hlcmU/CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0
aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYK
IAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNl
dEFscGhhKGZsb2F0KTsKLSAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
YWxwaGE7IH0KKyAgICAvLyBUcmFuc2Zvcm1zCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KLQotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCk7Ci0gICAgYm9vbCBkcmF3
THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7
IH0KLQotICAgIC8vIFRoaXMgY2xpcCBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgYnkgPGNhbnZhcz4g
Y29kZS4gSXQgYWxsb3dzCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIHRvIGhhbmRsZSBjbGlwcGlu
ZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNpbmNlCi0gICAgLy8gdGhlIGRpc2NpcGxpbmUg
aXMgZGlmZmVyZW50LgotICAgIHZvaWQgY2FudmFzQ2xpcChjb25zdCBQYXRoJiwgV2luZFJ1bGUg
PSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKLQot
ICAgIHZvaWQgc2NhbGUoZmxvYXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsK
LSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsK
LSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShm
bG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykgPSAwOwogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
eyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJh
bnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZv
aWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZv
aWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRS
ZWN0Jik7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAg
IGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwg
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCA9IDA7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2Fs
ZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAg
ICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25t
ZW50LgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAg
IEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rv
ckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0
U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBz
Y2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0
ZWN0ZWQoKSB7IG1fY29udGVuZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNv
bnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0
ZWN0ZWQ7IH0KKyAgICAvLyBMaW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbik7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBj
b25zdCBGbG9hdFBvaW50JikgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5h
bExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFp
bnQgRGV0ZWN0aW9uCisKKyAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBt
X2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFp
bnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0K
KworICAgIC8vIEZJWE1FOiBOb3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFu
ZCBzaG91bGQgYmUgbW92ZWQgZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdl
dFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsg
Ly8gVGhlIHBhc3NlZCBpbiByZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21w
b3NpdGluZyBpbnNpZGUgdHJhbnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5k
b3dzQ29udGV4dChIREMsIGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsg
Ly8gVGhlIHBhc3NlZCBpbiBIREMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0
V2luZG93c0NvbnRleHQuCiAgICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikK
LSAgICBHcmFwaGljc0NvbnRleHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhN
RTogVG8gYmUgcmVtb3ZlZC4KIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7
IHdlIG5lZWQgYSBkaWZmZXJlbnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0
d2VlbiBXaW5kb3dzIENHIGFuZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KSBjb25zdCA9IDA7CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUs
IGNoaWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAg
Ly8gcmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVu
LiBEZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzgsMTIgQEAgcHVibGlj
OgogI2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBi
ZSByZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lz
dGVtRmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdl
dCogZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3Rl
bUZhY3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJU
YXJnZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9p
ZCBiZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29u
c3QgQ29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAg
ICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBz
b2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNzcgKzU5OSwxNTUgQEAgcHVibGljOgog
I2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKICNlbmRpZiAvLyBPUyhXSU5ET1dTKQogCi0gICAgc3Rh
dGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRS
ZWN0Jik7CiAKLSAgICBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0OworICAgIEZs
b2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0
IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENvbG9yJik7CisKKyAgICBmbG9hdCBkYXNoZWRM
aW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCkgY29uc3Q7CisgICAgZmxvYXQgZGFz
aGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKKyAgICBmbG9h
dCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBw
YXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKKyAgICBWZWN0b3I8RmxvYXRQ
b2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxv
YXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29u
c3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKiBpbXBsKCkgeyByZXR1cm4gbV9pbXBsLmdl
dCgpOyB9CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQg
cGxhdGZvcm1EZXN0cm95KCk7CisgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBt
X3N0YWNrOwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgcGxhdGZvcm1Jbml0KEhEQywg
Ym9vbCBoYXNBbHBoYSA9IGZhbHNlKTsKLSNlbmRpZgorICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJl
bmN5TGF5ZXJDb3VudCB7IDAgfTsKKyAgICBib29sIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQg
eyBmYWxzZSB9OworfTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHBsYXRmb3JtSW5p
dChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqLCBCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKKy8vIEZJWE1FOiBNb3ZlIHRvIGEgc2VwYXJh
dGUgZmlsZS4KK2NsYXNzIEdyYXBoaWNzQ29udGV4dE51bGwgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyA6
IHVpbnQ4X3QgeworICAgICAgICBOb25lLAorICAgICAgICBJbnZhbGlkYXRpbmdDb250cm9sVGlu
dHMsCisgICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMsCisgICAgICAg
IERldGVjdGluZ0NvbnRlbnRmdWxQYWludAorICAgIH07CiAKLSAgICB2b2lkIHNhdmVQbGF0Zm9y
bVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOworICAgIEdyYXBoaWNz
Q29udGV4dE51bGwoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDog
bV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQogCi0gICAg
dm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Citw
cml2YXRlOgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHNldFBsYXRm
b3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tl
U3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
ZmxvYXQpOworICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKyAgICBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zICE9IFBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6Tm9uZTsgfQorICAgIGJvb2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHM7IH0KKyAgICBi
b29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KKyAgICBib29sIGRldGVj
dGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVu
dGZ1bFBhaW50OyB9CiAKLSAgICB2b2lkIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
Jik7CisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KIAotICAgIHZv
aWQgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9y
bVNob3VsZFNtb290aEZvbnRzKGJvb2wpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1JbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKKyNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
IHsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhclBsYXRmb3JtU2hh
ZG93KCk7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZs
b2F0KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsg
fQogCi0gICAgdm9pZCBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSk7Ci0gICAgdm9pZCBlbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsKKyAgICBJbnRSZWN0IGNsaXBCb3Vu
ZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KIAotICAgIHZvaWQgZmlsbEVsbGlwc2VB
c1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNv
bnN0IEZsb2F0UmVjdCYpOworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJu
KCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Cisj
ZW5kaWYKIAotICAgIHZvaWQgcGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIHBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0ID0gMSkgZmluYWwgeyB9CisgICAg
dm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0K
KyAgICAvLyBGSVhNRTogSXMgaXQgb2sgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yaz8/CisgICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJv
a2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
ID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVK
b2luKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwg
eyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zv
cm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxl
KSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisg
ICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVk
ID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7
IH07IH0KKworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9t
U3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWdu
ZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENh
c2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50
SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9
CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5v
dGhpbmc7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsg
cmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBi
b29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgogCi0gICAgdm9pZCBwbGF0Zm9y
bUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
KyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWwgeyB9CisgICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2Uo
Y29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAg
IHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmlu
YWwgeyB9CiAKLSAgICBGbG9hdFJlY3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBDb2xvciYpOworICAg
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3Qg
RmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lk
dGhGb3JTdHJva2VXaWR0aChmbG9hdCkgY29uc3Q7Ci0gICAgZmxvYXQgZGFzaGVkTGluZVBhdHRl
cm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKLSAgICBmbG9hdCBkYXNoZWRMaW5l
UGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgs
IGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVy
TGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lk
dGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CisgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsIHsgfQogCi0gICAgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+IG1faW1wbDsKKyAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7
Ci0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkg
ZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKK3ByaXZh
dGU6CiAgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWdu
ZWQgbV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnRE
ZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHsKQEAgLTc0NCw4ICs4MzYsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXpl
OwogfTsKIAotCi0KIGNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0Nv
bnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRl
eHRJbXBsKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2I0NmRiNzRkMzU4ZTFlM2I3ZmYzYmQ2NTMzZWYz
NGJkMzg0NzlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRJbXBsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHcmFwaGljc0NvbnRleHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0Nv
bnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4
dEltcGwoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1
ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygp
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNl
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNv
bnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBzYXZlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25z
dCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKSA9IDA7Ci0jaWYgRU5BQkxF
KFZJREVPKQotICAgIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNh
blBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0ID0gMDsKLSNlbmRp
ZgotICAgIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSA9IDA7Ci0KLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHQm
IG1fZ3JhcGhpY3NDb250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDQ0MGY3MjUzNTgyY2M2
NDkzMTVmMjQ3M2IzOTAzMjJiMGE2NjIwODUuLjEzODBlN2VkOWZjOGYzNjQ4ZWYwNjcxOTM0OGRi
ZTc3MWNmOTk5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAKQEAgLTE4OCw4ICsxODgsOSBAQCBJbWFnZURyYXdSZXN1bHQgSW1hZ2U6OmRyYXdUaWxlZChH
cmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSB3YW50
IHRvIGtlZXAgdGhpcyBiZWhhdmlvciBkaWZmZXJlbmNlPz8/CiAgICAgLy8gV2hlbiB1c2luZyBh
Y2NlbGVyYXRlZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8gc3RyZXRjaCBhbiBpbWFn
ZSB0aGFuIHRvIHRpbGUgaXQuCi0gICAgaWYgKGN0eHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkg
eworICAgIGlmIChjdHh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCkgewogICAgICAgICBpZiAoc2l6ZSgpLndpZHRoKCkgPT0gMSAmJiBpbnRlcnNlY3Rpb24o
b25lVGlsZVJlY3QsIGRlc3RSZWN0KS5oZWlnaHQoKSA9PSBkZXN0UmVjdC5oZWlnaHQoKSkgewog
ICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVTcmNSZWN0OwogICAgICAgICAgICAgdmlzaWJs
ZVNyY1JlY3Quc2V0WCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
CmluZGV4IDRkM2Y0MzBjNjE3ZDEwMDE2ZWY1MzgwZmQ4OWE5NGNiMGJhZWE2YzMuLjE3NjQ3NDdk
NjE0MGNmMTE2YzljNjQyNmRkYzk3MWFjMmJlYjk4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtNzEsNyArNzEsNiBAQCBjbGFzcyBBZmZpbmVUcmFuc2Zv
cm07CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
IHN0cnVjdCBMZW5ndGg7CiAKQEAgLTgwLDcgKzc5LDYgQEAgY2xhc3MgSW1hZ2VPYnNlcnZlcjsK
IAogY2xhc3MgSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dElt
cGw7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggOGEzNTUyZmU4OWYy
ODU0MDlmMjU0NTg0OTEzZDVlNmYxZWNlYjAxMy4uN2QwM2RiNjJkNjZmYzFmODZiMjdjNjkyNzRm
Yjg3YjljYTlhMTFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAKQEAgLTE5OCw3ICsxOTgsOSBAQCBTaGFkb3dCbHVyOjpTaGFkb3dCbHVy
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICAsIG1fc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYgVVNFKENH
KQotICAgIGlmIChzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKSB7CisgICAgLy8gQ29yZSBH
cmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxy
ZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCisgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUg
dGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisg
ICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
KSB7CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0
ZS5zaGFkb3dCbHVyKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKHNoYWRvd0Js
dXIsIHNoYWRvd0JsdXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDc4Yzc5Y2Q3ZTg5ZTky
YzI2YzRmZTZjNDdkZTk1N2ZmZDhmZjk2YzQuLjQ0M2E1NmEyYjc0NWJlYmVkZGQ1ODE2N2FkNmIx
ZDMzMjJmYjBiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTc0MSw5ICsxNzQxLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1p
dFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xp
cChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGNvbnRleHQsICptX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkp
OwotICAgICAgICB9KTsKKyAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQs
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbi5jcHAKaW5kZXggM2I0NDhhZjA0ZmEyNTVlNGY4NDNlZjQyOWViZDc3YzlhMWQ4
NjhhYi4uNjg4MTIyMWIwNDU4ZGNjOTQ4NGYzNGY0MTY2M2RkZDc0ZTEyODc3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDb2xvclNl
cmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdESVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5o
IgpAQCAtODkwLDcgKzg5MCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0
UG9pbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQgeCwgQ0dGbG9hCiAgICAgRm9udENh
c2NhZGUgZm9udCA9IEZvbnRDYXNjYWRlKFdURk1vdmUoZGVzYyksIDAsIDApOwogICAgIGZvbnQu
dXBkYXRlKG51bGxwdHIpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNnKGNvbnRleHQpOworICAg
IEdyYXBoaWNzQ29udGV4dENHIGNnKGNvbnRleHQpOwogICAgIGNnLnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwogICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4odGV4dCksIEludFBvaW50
KHgsIHkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCmlu
ZGV4IGQzZjQ0OGFjYTkwMzBmNzdkNzhlNTdjNDJmMzA1MmQ2YTk4OTMxYzQuLmRiZDM2M2U2MTNj
ZWIwN2UwMzY2NzMzNTVkMDQ3ZWRhYWE1MmU1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lmIFVTRShDQSkKIAogI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIK
ICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpA
QCAtOTQsNyArOTQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dAogCiAgICAgUGxhdGZvcm1D
QUxheWVyOjpmbGlwQ29udGV4dChjb250ZXh0LCBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBo
aWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKIAogICAgIC8vIEl0J3MgaW1w
b3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBi
ZSBzaWduaWZpY2FudGx5CiAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUu
Zy4gdGlsZWQgbGF5ZXJzKQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OmRyYXdSZXBhaW50Q291bnRlcnMoQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENH
Q29uCiAgICAgZWxzZQogICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9yKENv
bG9yOjpyZWQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXRvcihncmFwaGljc0NvbnRleHQsIG93
bmVyKCksIGRyYXdDb3VudCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVy
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5jcHAKaW5kZXggYzVhNzNlOGQzYWU5YmI0OWE5NmJlMjdmNTMyN2Uw
NmMwNjIxNGZjMy4uYjUzYTMzN2JhNGNjZGNmMjNmNzg1NDkwNWIyNzYwN2VjOTBjMDY0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVk
QmFja2luZ0xheWVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAK
ICNpZiBVU0UoQ0EpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1
ZGUgIlRpbGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCkBAIC04Niw3
ICs4Niw3IEBAIHZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmRpc3BsYXlDYWxsYmFjayhD
QUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVmCiAgICAgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBjbGllbnQgPSBvd25lcigpLT5vd25lcigpOwogICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGNsaWVudC0+cGxhdGZv
cm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0Nv
bnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAg
ZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8v
IHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBjZjQ4Mzc2MDNlMGFiMTkwODg5NzVmMTBlNDJk
ZTc1YTEyOGIwNzU3Li5iYTU5NGFlOGNjMmE4MDJiNjU2MDYwZmIwZTNiYmEyMjE4Njk4NDI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAKICNpZiBVU0UoQ0FJUk8pCiAKQEAgLTM5LDcg
KzM5LDYgQEAKICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNh
aXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBA
IC01Nyw2MzMgKzU2LDM1NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29u
dGV4dCkKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9y
bUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQorICAgIDogbV9wbGF0Zm9ybUNvbnRleHQo
cGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCiB7Ci0gICAgaWYgKCFwbGF0
Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgbV9kYXRhLT5w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwotICAgIG1f
ZGF0YS0+c3luY0NvbnRleHQocGxhdGZvcm1Db250ZXh0LT5jcigpKTsKKyAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorICAgIDogbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWly
b0NvbnRleHQpKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKIHsKLSAgICBpZiAobV9kYXRhKSB7Ci0gICAgICAg
IG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0
cik7Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgfQorICAgIG1fcGxhdGZvcm1Db250ZXh0
LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKKyAgICBtX3ByaXZh
dGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwogfQogCi1BZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVT
Y2FsZSkgY29uc3QKK0dyYXBoaWNzQ29udGV4dENhaXJvOjp+R3JhcGhpY3NDb250ZXh0Q2Fpcm8o
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2
YXRlKG51bGxwdHIpOworfQogCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1w
bC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Citib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Cit7
CiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9
CiAKLVBsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0CitQbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJu
IG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3Jt
Q29udGV4dDsKKyAgICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBDYWlybzo6c2F2ZSgqcGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKICAgICBDYWly
bzo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd1Jl
Y3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnBsYXRmb3JtQ29u
dGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFs
cGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVz
ZWQgdG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hhZG93cy4KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChz
dHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMp
OwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNp
cmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25z
dCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxQYXRoKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUGF0aCgqcGxhdGZv
cm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Zmls
bFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBD
YWlybzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBDYWlybzo6RmlsbFNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQo
KSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7Cit9CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBH
cmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwor
ICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWly
bzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKCkpKTsKKyAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Cisg
ICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgp
KTsKKyAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9y
IHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1D
b250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBDYWlybzo6ZmlsbFJl
Y3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3Jt
Q29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQogCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewogICAgIENhaXJvOjpjbGlwKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsK
IH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVj
dCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xp
cEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNv
bnRleHQsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKK30K
IAordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CiAj
aWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWlu
dEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAg
ICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIHdpZHRoLCBjb2xvcik7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogI2lmIFBMQVRGT1JNKFdQ
RSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywg
cmVjdHMsIGNvbG9yKTsKICAgICBVTlVTRURfUEFSQU0od2lkdGgpOwogICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOwogICAgIHJldHVybjsKICNlbHNlCi0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCB3
aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxp
bmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24o
KSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlja25l
c3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29s
b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0
eWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBzdHlsZSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
cm91bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9k
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsK
LQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnRyYW5zbGF0
ZSgqcGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKQotewotICAgIC8vIENhaXJvIGNvbnRl
eHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNv
IHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCiB7Ci0gICAgLy8gQ2Fpcm8gY29udGV4dHMgY2FuJ3QgaG9sZCBzZXBhcmF0ZSBm
aWxsIGFuZCBzdHJva2UgY29sb3JzCi0gICAgLy8gc28gd2Ugc2V0IHRoZW0ganVzdCBiZWZvcmUg
d2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6
OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNz
KGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1f
cGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7CiAKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKCpw
bGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAgICAgaWYg
KHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5n
IHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBD
RyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhdXRv
JiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBtX3N0YXRl
LnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkgfTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqcGxhdGZvcm1Db250ZXh0
KCksIHN0cm9rZVN0eWxlKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JS
ZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFz
Q2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zv
cm0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oKnBsYXRm
b3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsKLSAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3Nv
Y2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgIC8vIFdlIGZsaXAg
dGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlz
Ci0gICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBvZmZzZXQud2lkdGgoKSwgLW9mZnNl
dC5oZWlnaHQoKSB9OwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxh
dGZvcm1TaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0
eSk7CiAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgp
LCBvcGFjaXR5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXll
cigqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9y
dHNUcmFuc3BhcmVuY3lMYXllcnMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0
cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwogICAgIENhaXJvOjpzdHJva2VSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
bGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
bGluZUNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGxpbmVDYXAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDYWlybzo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVDYXAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVz
LCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExp
bmVKb2luIGxpbmVKb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUpvaW4o
TGluZUpvaW4gbGluZUpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVK
b2luKGxpbmVKb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVKb2luKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgbGluZUpvaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBtaXRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQo
ZmxvYXQgbWl0ZXIpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBi
ZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KG1pdGVy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBtaXRl
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBi
bGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBjbGlwUGF0aChwYXRoLCB3aW5kUnVs
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5y
b3RhdGUocmFkaWFucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4dCgp
LCByYWRpYW5zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmNs
aXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3Vu
ZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmZpbGxSb3VuZGVk
UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3IuaXNWYWxpZCgpKQorICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhv
bGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1Q
YXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwotICAgIENhaXJvOjpkcmF3UGF0dGVy
bigqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworICAg
IENhaXJvOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRm
b3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQorUmVuZGVyaW5n
TW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlh
cygqcGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uUXVhbGl0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotfQor
ICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAg
ICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWly
b0dseXBocyhudW1HbHlwaHMpOworICAgIHsKKyAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQu
eSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Cisg
ICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0
IH07CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CisgICAgICAg
ICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOworICAgICAgICB9CisgICAgfQog
Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpKTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5w
bGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7CisgICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKworICAgIGlmICghZm9udC5hbGxvd3NB
bnRpYWxpYXNpbmcoKSkKKyAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2Rl
OjpOb1Ntb290aGluZzsKKworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBD
YWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAgICAgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJv
R2x5cGhzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAg
ICAgICAgZm9udFNtb290aGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyY2MxZWVjMDZkMzMzODk0ZWFkYjhiMWRl
NDY2ZDY3YmIxMDJhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC0wLDAgKzEsMTE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK3R5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDYWlybyBmaW5hbCA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBs
YXRmb3JtQ29udGV4dENhaXJvJik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCop
OworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBib29sIGhhc1Bs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBz
ZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBmaW5hbDsKKworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBs
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNt
b290aGluZ01vZGUpIGZpbmFsOworCisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9p
ZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIHRy
YW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5h
bDsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25z
dCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKKworI2lm
IE9TKFdJTkRPV1MpCisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNh
dGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9vd25lZFBsYXRmb3JtQ29u
dGV4dDsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTI2MWVmMzBlNjgzZGM5NThlN2YyYjllMTg0YjY1OTYyZjNmMzc5MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotCi0jaWYg
VVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAg
ICBbJnBsYXRmb3JtQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+
KGNvbnRleHQsIHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y3JlYXRlRmFjdG9yeShjYWlyb190KiBjYWlyb0NvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtjYWly
b0NvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBj
YWlyb0NvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0
SW1wbChjb250ZXh0KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQot
ICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
PihtX3BsYXRmb3JtQ29udGV4dCkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0Nv
bnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y2Fpcm9fdCogY2Fpcm9Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4
dENhaXJvPihjYWlyb0NvbnRleHQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjp+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCkKLXsKLSAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAg
ICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VT
dHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAo
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcg
dGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENH
IGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8m
IG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0
YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQg
PSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29t
cG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0
YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFu
dGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQot
ewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENhaXJvOjpzZXRMaW5lRGFz
aChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQotewotICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBt
aXRlckxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBhdXRv
IHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Ci0gICAgQ2Fpcm86OnJlc3Rv
cmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7
Ci0KLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29u
dGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNv
bnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29t
cG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9y
OwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgQ2Fpcm86OlNoYWRvd1N0
YXRlIHNoYWRvd1N0YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAg
ICAgQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3Is
IHNoYWRvd1N0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlv
dXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikK
LXsKLSAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgeyB9LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0
LCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlw
c2UocmVjdCk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAg
ICBDYWlybzo6c3Ryb2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIENhaXJvOjpzdHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAg
IHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3Qo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCi17Ci0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3Rvcjxj
YWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0
byB5T2Zmc2V0ID0gcG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ld
LCB4T2Zmc2V0LCB5T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ld
LndpZHRoKCk7Ci0gICAgICAgICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9
IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOwotICAgIGRvdWJsZSBzeW50aGV0aWNC
b2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBpZiAoIWZvbnQu
YWxsb3dzQW50aWFsaWFzaW5nKCkpCi0gICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3Ro
aW5nTW9kZTo6Tm9TbW9vdGhpbmc7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAg
ICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERy
YXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3Rh
dGUuc2hhZG93Q29sb3IsCi0gICAgICAgIGZvbnRTbW9vdGhpbmcpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3KGdyYXBo
aWNzQ29udGV4dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdl
KG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0
LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwg
c3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0o
c3BhY2luZyk7Ci0gICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFn
ZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBD
YWlybzo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5k
ZXJsaW5lcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0VsbGlw
c2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1Jpbmco
bV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQotewotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1D
b250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJlc3RvcmUoKQot
ewotICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAg
IENhaXJvOjp0cmFuc2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewot
ICAgIENhaXJvOjpyb3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKLXsKLSAgICBDYWlybzo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0
YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0o
bV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIENhaXJvOjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAg
ICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgQ2Fpcm86OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQot
ewotICAgIENhaXJvOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4
dCwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y2xpcEJvdW5kcygpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5k
cyhtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQotewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgZGVzdFJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGlj
c0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0j
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklY
TUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmExZWVlMzkwNzNhMjZlMDk3Yjk2Yzc0
NjUzZmE2MTZmOTI2NTIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRJbXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwotCi1jbGFz
cyBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0
SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRl
eHRDYWlybyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCopOwotCi0gICAg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4
dENhaXJvJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYs
IGNhaXJvX3QqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQot
ICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZv
cm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
dm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hh
ZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRp
b25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlk
ZTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29s
IGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRD
YWlybz4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYg
bV9wbGF0Zm9ybUNvbnRleHQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKaW5kZXggYzllNzA4MDE0NmM3ZjIzMjcyN2QxYTQyN2UxMWU2YmM4ZDA4MThmMi4uMDUyMTIy
MGQ2MjU1NDY5MzUyNmViNDg3NDA2MmIzMDQwOTZkYWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAj
aW5jbHVkZSAiQ29sb3JUcmFuc2ZlckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAKaW5kZXggM2JlNzU1NjllOTczYzJiMTY4OTlhNTA3NjI3NWY1MjNmYTgwNzFlYS4u
OWI1YzBhZDA3NDQ1MTg4MGRlZmRkM2M0ODkyZTRmNzNjMjg2NDJjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAj
aW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUg
PGNhaXJvLmg+CkBAIC01MSw3ICs1MSw3IEBAIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IFBhcmFtZXRlcnMmCiAKICAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdl
dCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fY29u
dGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2NvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENhaXJvPihtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAK
IEdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXRoQ2Fpcm8uY3BwCmluZGV4IDgxZDE1OGUyZGZmN2U1YmYwM2M3YjY1ZDAzNmRkYTg5OWYw
ZjkwMWYuLjJhMTllNDdhOWFhY2VjMjA5NmE2MGU5N2UzYjVjNDg3NDUzZGFhZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNw
cApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkNhaXJvVW5pcXVlUHRyLmgiCiAjaW5jbHVk
ZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWly
by5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIxLDcgKzQyMSw3IEBAIEZsb2F0UmVj
dCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIGlmIChz
dHJva2VTdHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ2MobV9wYXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5
bGVBcHBsaWVyKGdjKTsKICAgICB9CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIFBhdGg6OnN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVh
dGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDYWlybyBn
cmFwaGljc0NvbnRleHQobV9wYXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVy
KGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggZWYzYWMy
ZTEzNzFiOGUxYzkwN2RhMTI0MmE3NmNlNmU2MTQ3ODcwZS4uZmRiMWFlMDY1NzRiZGY4MTVjNjE2
NzBlMDZjYjY3N2EwNzIzODlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTUsMTcgKzU1LDEy
IEBAIHN0YXRpYyB2b2lkIHNldENHRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBDb2xvciYgY29sb3IpCiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VD
b2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENH
Q29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29s
b3IpKTsKLX0KLQogaW5saW5lIENHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dD
b250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0
KENHQ29udGV4dEdldENUTShjb250ZXh0KSwgQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250
ZXh0R2V0QmFzZUNUTShjb250ZXh0KSkpOwogfQogCi1zdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxp
dHkgY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVh
bGl0eSkKK3N0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb3JlSW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KQogewogICAgIHN3aXRjaCAocXVhbGl0
eSkgewogICAgIGNhc2Uga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ6CkBAIC04Miw2ICs3NywzNCBA
QCBzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29udmVydEludGVycG9sYXRpb25RdWFsaXR5
KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcQogICAgIHJldHVybiBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6RGVmYXVsdDsKIH0KIAorc3RhdGljIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgY2dJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KQoreworICAgIHN3aXRj
aCAocXVhbGl0eSkgeworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKKyAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJw
b2xhdGlvbk5vbmU7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAg
ICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkxvdzsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFs
aXR5OjpNZWRpdW06CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOworICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgIHJldHVybiBrQ0dJbnRl
cnBvbGF0aW9uSGlnaDsKKyAgICB9CisgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0
OworfQorCitzdGF0aWMgQ0dUZXh0RHJhd2luZ01vZGUgY2dUZXh0RHJhd2luZ01vZGUoVGV4dERy
YXdpbmdNb2RlRmxhZ3MgbW9kZSkKK3sKKyAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRl
eHREcmF3aW5nTW9kZTo6RmlsbCk7CisgICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRl
eHREcmF3aW5nTW9kZTo6U3Ryb2tlKTsKKyAgICBpZiAoZmlsbCAmJiBzdHJva2UpCisgICAgICAg
IHJldHVybiBrQ0dUZXh0RmlsbFN0cm9rZTsKKyAgICBpZiAoZmlsbCkKKyAgICAgICAgcmV0dXJu
IGtDR1RleHRGaWxsOworICAgIHJldHVybiBrQ0dUZXh0U3Ryb2tlOworfQorCiBzdGF0aWMgQ0dC
bGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgc3dpdGNoIChibGVuZE1vZGUpIHsK
QEAgLTE1NiwzNSArMTc5LDM5IEBAIHN0YXRpYyBDR0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9k
ZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNCiAgICAgcmV0dXJu
IGtDR0JsZW5kTW9kZU5vcm1hbDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNz
Q29udGV4dENHKENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmls
bENvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0g
ICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIG1f
c3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkp
OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBncmVhdCwgYmVjYXVzZSBpdCBzZXRzIGl0IGJh
Y2sgb24gdGhlIEdyYXBoaWNzQ29udGV4dCwgYnV0IG1heWJlIGl0IGRvZXNuJ3QgbWF0dGVyPwor
ICAgIHNldEZpbGxDb2xvcihmaWxsQ29sb3IoKSk7CisgICAgc2V0U3Ryb2tlQ29sb3Ioc3Ryb2tl
Q29sb3IoKSk7CisgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKKyAg
ICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb3JlSW50ZXJwb2xhdGlvblF1
YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGlj
c0NvbnRleHRDRzo6fkdyYXBoaWNzQ29udGV4dENHKCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwog
fQogCi1DR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgp
KTsKICAgICBBU1NFUlQobV9kYXRhLT5tX2NnQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+
bV9jZ0NvbnRleHQuZ2V0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZv
cm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQo
IXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKIAogICAgIC8vIE5vdGU6IERvIG5vdCB1c2Ug
dGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ug
d2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAgICAvLyBzYXZlIG9mIHRoZSBzZWNvbmRhcnkgY29u
dGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCkuCkBAIC0xOTIsMTAg
KzIxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiAgICAg
bV9kYXRhLT5zYXZlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NF
UlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKIAogICAgIC8vIE5vdGU6IERvIG5v
dCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2lu
Y2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAgICAvLyByZXN0b3JlIG9mIHRoZSBzZWNv
bmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCkuCkBA
IC0yMDQsMTAgKzIzMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFn
ZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFn
ZSA9IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAg
ICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMjk4
LDcgKzMyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvCiAKICAgICBhdXRvIG9sZENvbXBv
c2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgYXV0byBvbGRCbGVuZE1v
ZGUgPSBibGVuZE1vZGVPcGVyYXRpb24oKTsKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwor
ICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9w
dGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRo
ZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSk7CkBAIC0zMjUs
MTAgKzM1MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29u
c3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3YXNB
bnRpYWxpYXNlZCk7CiAjZW5kaWYKLSAgICAgICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRp
b24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CisgICAgICAgIHNldENvbXBv
c2l0ZU9wZXJhdGlvbihvbGRDb21wb3NpdGVPcGVyYXRvciwgb2xkQmxlbmRNb2RlKTsKICAgICB9
CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oSW1hZ2VzLCBzdHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4
dDo6ZHJhd05hdGl2ZUltYWdlICIgPDwgaW1hZ2UuZ2V0KCkgPDwgIiBzaXplICIgPDwgaW1hZ2VT
aXplIDw8ICIgaW50byAiIDw8IGRlc3RSZWN0IDw8ICIgdG9vayAiIDw8IChNb25vdG9uaWNUaW1l
Ojpub3coKSAtIHN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkgPDwgIm1zIik7CisgICAgTE9HX1dJ
VEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2
ZUltYWdlICIgPDwgaW1hZ2UuZ2V0KCkgPDwgIiBzaXplICIgPDwgaW1hZ2VTaXplIDw8ICIgaW50
byAiIDw8IGRlc3RSZWN0IDw8ICIgdG9vayAiIDw8IChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0
YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkgPDwgIm1zIik7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdQ
YXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCkBAIC0zMzks
NyArMzY0LDcgQEAgc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAt
MSk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1oZWlnaHQpOwogI2Vu
ZGlmCi0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250
ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2UpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LCBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVj
dCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2UpOwogfQogCiBz
dGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqIGluZm8pCkBAIC0zNDcsMTYg
KzM3MiwxOCBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqIGluZm8p
CiAgICAgY2FsbE9uTWFpblRocmVhZChbaW1hZ2UgPSBhZG9wdENGKHN0YXRpY19jYXN0PENHSW1h
Z2VSZWY+KGluZm8pKV0geyB9KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJu
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0lu
dmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUlt
YWdlLnBsYXRmb3JtSW1hZ2UoKTsKKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0
UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSArIGRlc3RS
ZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CkBA
IC00MjMsMTYgKzQ1MCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGCiB9CiAKIC8vIERyYXdz
IGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBwYXR0ZXJu
cyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJvYmFibHkgc2hvdWxkLgog
ICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwogCkBAIC00NTgsMTkgKzQ3NywxMSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVy
cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhp
Y2tuZXNzKCk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwb2ludDEueCgpICsgdGhpY2tu
ZXNzID09IHBvaW50Mi54KCkpOwogICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gaXNWZXJ0aWNhbExp
bmUgPyBwb2ludDIueSgpIC0gcG9pbnQxLnkoKSA6IHBvaW50Mi54KCkgLSBwb2ludDEueCgpOwpA
QCAtNTI2LDMxICs1MzcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHRydWUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7CiAg
ICAgZHJhd1BhdGgocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9r
ZVBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVU
cmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNTY1LDE2ICs1NjAs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBDR0Nv
bnRleHRTZXRTdHJva2VQYXR0ZXJuKGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAm
cGF0dGVybkFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRl
cm4oKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShn
ZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC02MTYsMTUgKzYwMywxMCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBDR1BhdAogICAgIHJldHVybiBzaG91bGRGaWxsIHx8IHNob3VsZFN0cm9r
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UGF0aChwYXRo
KTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CkBAIC02NTQsMTYgKzYzNiwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICB9
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0
YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtNzE4LDE1ICs2OTUsMTAgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCkBAIC03OTQsMTYgKzc2Niw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAjZW5kaWYK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CkBAIC04MzMsNyArNzk3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVy
bigpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
JiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdP
d25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093
blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYg
Q0cgc2hhZG93cy4KQEAgLTg0NiwyMyArODEwLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29u
dGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwogCiAgICAg
aWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4
dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29s
IGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVy
biBvZmYgQ0cgc2hhZG93cy4KQEAgLTg4MSwyMCArODM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
ICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRG
aWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3Ip
CiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJh
d093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3co
KSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRv
d0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hh
ZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChk
cmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05MjQs
MTYgKzg3NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIHNldENHRmlsbENv
bG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
CiAgICAgUGF0aCBwYXRoOwpAQCAtOTUxLDcgKzg5NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0CiAgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAogICAgIC8vIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKCkgYXNzdW1lcyB0aGF0IHRoZSBlZGdlcyBvZiByZWN0IGFyZSBjbGlwcGVkIG91dCwg
c28gd2Ugb25seSBjYXJlIGFib3V0IHNoYWRvd3MgY2FzdCBhcm91bmQgaW5zaWRlIHRoZSBob2xl
LgotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhh
c0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAg
ICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAg
Ly8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTk3MCw1MiArOTEzLDI4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0CiAgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRh
LT5jbGlwKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIEZJWE1FOiBVc2luZyBDR1JlY3RJ
bmZpbml0ZSBpcyBtdWNoIGZhc3RlciB0aGFuIGdldHRpbmcgdGhlIGNsaXAgYm91bmRpbmcgYm94
LiBIb3dldmVyLCBkdWUKICAgICAvLyB0byA8cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1Jl
Y3RJbmZpbml0ZSBjYW4ndCBiZSB1c2VkIHdpdGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0
CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJhbnNmb3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNs
YXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAg
ICAgLy8gd2UgY2Fubm90IHVzZSBpdCBpbiBmb3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4K
ICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2Fu
VXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAh
PSBrQ0dDb250ZXh0VHlwZVBERiAmJiAoIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgfHwgKCFjdG0u
YigpICYmICFjdG0uYygpKSk7CisgICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29u
dGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5i
KCkgJiYgIWN0bS5jKCkpKTsKICAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdElu
ZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxh
dGZvcm1Db250ZXh0KCkpLCByZWN0IH07CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dHMsIDIpOwogICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENHQ29udGV4dEFk
ZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0
Zm9ybUNvbnRleHQoKSkpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCkBAIC0xMDIzLDE2ICs5
NDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQog
ICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRo
LCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RaZXJvKTsKQEAgLTEwNDks
MjMgKzk2MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1J
bnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCiAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAg
IHNhdmUoKTsKIApAQCAtMTA3NSwxMiArOTc3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJl
Z2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogICAgIG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAg
IENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwpAQCAtMTA4OCwxMSArOTg3
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIo
KQogICAgIHJlc3RvcmUoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIHZvaWQg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKQEAgLTExMDAsNyArOTk0LDcgQEAg
c3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LAogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAgICBV
TlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpCisgICAgaWYgKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQ0dDb250ZXh0
RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkp
CkBAIC0xMTIxLDIxICsxMDE1LDIyIEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29y
a2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICNlbmRpZgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRT
aXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lk
IHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAob2Zmc2V0LmlzWmVy
bygpICYmICFibHVyKSB7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250
ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgCiAgICAgLy8gRklYTUU6IHdlIGNvdWxk
IGF2b2lkIHRoZSBzaGFkb3cgc2V0dXAgY29zdCB3aGVuIHdlIGtub3cgd2UnbGwgcmVuZGVyIHRo
ZSBzaGFkb3cgb3Vyc2VsdmVzLgogCiAgICAgQ0dGbG9hdCB4T2Zmc2V0ID0gb2Zmc2V0LndpZHRo
KCk7CiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0LmhlaWdodCgpOwogICAgIENHRmxvYXQg
Ymx1clJhZGl1cyA9IGJsdXI7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAotICAgIGlmICghbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykgewor
ICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpIHsKICAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0o
Y29udGV4dCk7CiAKICAgICAgICAgQ0dGbG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRv
QmFzZUNUTS5hICsgdXNlclRvQmFzZUNUTS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTE1Niw3
ICsxMDUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb24KICAgICAvLyBFeHRyZW1lICJibHVy
IiB2YWx1ZXMgY2FuIG1ha2UgdGV4dCBkcmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0
aW1lcywgc28gY2xhbXAKICAgICBibHVyUmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFy
cm93UHJlY2lzaW9uVG9DR0Zsb2F0KDEwMDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRX
b3JrYXJvdW5kSWZOZWVkZWQoKnRoaXMsIHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGFwcGx5U2hh
ZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9m
ZnNldCk7CiAKICAgICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3
ZSBzaG91bGQgdGhlcmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAg
LTExNjYsNTAgKzEwNjEsNTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb24KICAgICAgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9m
ZnNldCksIGJsdXJSYWRpdXMsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0
aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKLX0KKyAgICBhdXRv
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdp
ZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CiAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2Yg
dGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGltaXQobGltaXQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xv
cldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKSk7CiAK
LSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19
CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JD
aGFuZ2UpKQorICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3Ip
OwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCisgICAg
ICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFscGhhKTsKIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3Qocik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9k
ZUNoYW5nZSB9KSkKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsIHNlbGVj
dENHQmxlbmRNb2RlKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsK
IAotICAgIENHQ29udGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CisgICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFu
Z2UpKQorICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0
RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKSk7CisKKyAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCisgICAg
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290
aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChmbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eUNoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRl
eHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKQorICAgICAgICBzZXRDR1NoYWRvdygqdGhpcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQoZmxvYXQgbGlt
aXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IENHQ29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVX
aWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIENHQ29udGV4dENsZWFyUmVjdChw
bGF0Zm9ybUNvbnRleHQoKSwgcik7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRl
LnN0cm9rZUdyYWRpZW50KSB7CkBAIC0xMjY5LDE2ICsxMTY3LDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRM
aW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGNhcCkg
ewogICAgIGNhc2UgQnV0dENhcDoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwpAQCAtMTI5MiwxNiArMTE4Miw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQogICAgIH0KIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCkBAIC0xMzEyLDE2ICsxMTk0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAgIENH
Q29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoT2Zmc2V0LCBkYXNoZXMu
ZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBqb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9p
bihqb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAoam9pbikgewog
ICAgIGNhc2UgTWl0ZXJKb2luOgogICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7CkBAIC0xMzM1LDk0ICsxMjA5LDQzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwogICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7CiAgICAgbV9kYXRhLT5t
X3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnJvdGF0ZShhbmdsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRS
b3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKICAgICBtX2RhdGEtPnJvdGF0ZShh
bmdsZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZv
cm1Db250ZXh0KCksIHgsIHkpOwogICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwogICAgIG1f
ZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
b25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29u
dGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICBtX2RhdGEt
PmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNm
b3JtKTsKICAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi1BZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7
Ci0KICAgICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9y
IGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRoZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBv
c2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCiAg
ICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRlZSB0aGUgZGV2aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdl
IGNhbiB1c2UgdGhpcyBDRyBBUEkuCkBAIC0xNDMyLDE0ICsxMjU1LDggQEAgQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2Nh
bGUpIGNvbnN0CiAgICAgcmV0dXJuIENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7
CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorRmxvYXRSZWN0
IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsK
LQogICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2
aWNlIHNwYWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKICAgICAvLyBhZmZpbmUgdHJhbnNm
b3JtIG1hdHJpeCB0byBkZXZpY2Ugc3BhY2UgY2FuIG1lc3Mgd2l0aCB0aGlzIGNvbnZlcnNpb24g
aWYgd2UgaGF2ZSBhCiAgICAgLy8gcm90YXRpbmcgaW1hZ2UgbGlrZSB0aGUgaGFuZHMgb2YgdGhl
IHdvcmxkIGNsb2NrIHdpZGdldC4gV2UganVzdCBuZWVkIHRoZSBzY2FsZSwgc28KQEAgLTE0ODIs
MjcgKzEyOTksMTEgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICByZXR1cm4gRmxvYXRS
ZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSkKLXsKLSAgICBEYXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQoMCk7
Ci0gICAgd2lkdGhzLmFwcGVuZChyZWN0LndpZHRoKCkpOwotICAgIGRyYXdMaW5lc0ZvclRleHQo
cmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVM
aW5lcywgc3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAK
ICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgpLCB0aGlj
a25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAtMTU1NiwxNiArMTM1Nyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsCiAgICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRm
b3JtQ29udGV4dCgpLCBmaWxsQ29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGli
bGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUg
Zm9yIGRpc3BsYXkgbGlzdHMuCi0gICAgfQotCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxS
ZWYgPSBsaW5rLmNyZWF0ZUNGVVJMKCk7CiAgICAgaWYgKCF1cmxSZWYpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE1NzksMzYgKzEzNzIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiAgICAgQ0dQ
REZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1cmxSZWYuZ2V0KCksIENHUmVjdEFwcGx5
QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0KSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5IG1vZGUpCi17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2Fi
bGVkKCkpOwotCi0gICAgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5ID0ga0NHSW50ZXJw
b2xhdGlvbkRlZmF1bHQ7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25E
ZWZhdWx0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpE
b05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbk5vbmU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAg
ICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Mb3c7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IGtD
R0ludGVycG9sYXRpb25NZWRpdW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uSGln
aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25R
dWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAv
LyBTaG91bGQgYmUgY2FsbGVkIGZvciBDQSBDb250ZXh0LgogICAgIEFTU0VSVChtX2RhdGEpOwog
ICAgIGlmIChpc0xheWVyQ29udGV4dCkKQEAgLTE2MTcsMTI5ICsxMzgyLDI4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiAg
ICAgICAgIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJj0gfklzTGF5ZXJDR0NvbnRleHQ7CiB9CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Q0c6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEgJiYgKG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJc0xheWVyQ0dDb250ZXh0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNB
Y2NlbGVyYXRlZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIGZvciBDQSBDb250ZXh0
LgotICAgIEFTU0VSVChtX2RhdGEpOwogICAgIGlmIChpc0FjY2VsZXJhdGVkKQogICAgICAgICBt
X2RhdGEtPm1fY29udGV4dEZsYWdzIHw9IElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiAgICAgZWxz
ZQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0FjY2VsZXJhdGVkQ0dDb250
ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBj
b25zdAotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJlbmRlcmluZ01v
ZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLQotICAgIHJldHVybiBtX2RhdGEt
Pm1fY29udGV4dEZsYWdzICYgSXNBY2NlbGVyYXRlZENHQ29udGV4dDsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgCi0gICAgYm9vbCBmaWxsID0gbW9k
ZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOwotICAgIGJvb2wgc3Ryb2tlID0gbW9k
ZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7Ci0gICAgaWYgKGZpbGwgJiYgc3Ry
b2tlKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4
dEZpbGxTdHJva2UpOwotICAgIGVsc2UgaWYgKGZpbGwpCi0gICAgICAgIENHQ29udGV4dFNldFRl
eHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0RmlsbCk7Ci0gICAgZWxzZSBpZiAoc3Ryb2tl
KQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dFN0
cm9rZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
c2V0Q0dTdHJva2VDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNz
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgocGxhdGZvcm1Db250ZXh0KCksIHN0ZDo6bWF4KHRoaWNrbmVzcywgMC5mKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNldENHRmlsbENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4
dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91
bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMocGxhdGZvcm1Db250ZXh0KCksIGVu
YWJsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0
IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRB
bHBoYShwbGF0Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCitSZW5kZXJpbmdNb2RlIEdyYXBoaWNz
Q29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShwbGF0Zm9ybUNvbnRleHQoKSwgc2VsZWN0
Q0dCbGVuZE1vZGUoY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSkpOworICAgIHJldHVybiBt
X2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNBY2NlbGVyYXRlZENHQ29udGV4dCA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2
aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgLy8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2Ug
Q1RNIG9mIGEgSGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0
byBpdC4KICAgICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBj
YXVzZSBjZXJ0YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3VzIHJpbmdzLApAQCAtMTc0Nywx
MyArMTQxMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgQ0dDb250ZXh0U2V0QmFzZUNU
TShwbGF0Zm9ybUNvbnRleHQoKSwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRC
YXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpKSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxl
RmFjdG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBz
b2xpZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmls
bFBhdHRlcm4pIHsKICAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBAIC0xNzY0
LDEzICsxNDIzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0
KGNvbnRleHQsIGVsbGlwc2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1T
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0
IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQ
YXRoKGVsbGlwc2UpOwpAQCAtMTc4MSwxOCArMTQzNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBD
R0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0KGNvbnRleHQsIGVsbGlwc2UpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Q0c6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAg
IEZsb2F0UmVjdCByZWN0ID0gZGVzdFJlY3Q7CkBAIC0xODAyLDE1ICsxNDUxLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UmVjdCYKICAgICBDR1BERkNvbnRleHRTZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29udGV4dCwgbmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB0cmFuc2Zvcm1lZFJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQogICAgIENHUG9pbnQg
dHJhbnNmb3JtZWRQb2ludCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb3NpdGlvbiwg
Q0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKTsKICAgICBDR1BERkNvbnRleHRBZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29udGV4dCwgbmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB0cmFuc2Zvcm1l
ZFBvaW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCmluZGV4IDI1YTA4NjZlMmYzODY5ZTFlN2UxZjllNjYy
NmJlYzIwNWJiMGRjNzUuLjVlMjA2NzY5ZWJmZjhhZDkxMDI5MTkzNjIyY2ZkMWMyZWM0ZjI4OWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaApAQCAtNzIsNSArNzIsMTA4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3NhdmVBbmRSZXN0b3JlOwogfTsKIAorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyhDR0NvbnRleHRSZWYpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEdyYXBoaWNz
Q29udGV4dENHKEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJl
bW92ZWQuCisjZW5kaWYKKworICAgIH5HcmFwaGljc0NvbnRleHRDRygpOworCisgICAgYm9vbCBo
YXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQg
ZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisKKyAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBhcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisKKyAgICB2b2lkIHNldElzQ0FM
YXllckNvbnRleHQoYm9vbCkgZmluYWw7CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QgZmluYWw7CisKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKSBmaW5hbDsKKworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOworICAgIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7CisgICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworCisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9h
dFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmlu
YWw7CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisKKyAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKworICAgIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisKKyAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisK
KyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworCisgICAgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3Qg
ZmluYWw7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKK307CisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwCmluZGV4IGRkMzQxYjE0MjE2YzJlMmM5ZDQ2ZDJhYjA1YjlhYTUyZDdk
OTc0ZDIuLmJjYmZjZTA5MzI4MWI2MzJkYmM5OGIzZTI2MTIxN2VmNzNlMWQxZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dD
b250ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dENHPihjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgZGF0YSwgbnVtQnl0ZXMs
IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CiAgICAgICAgIGZhc3RGcmVl
KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGNlZDNhZGJhMmI0YzEyZjBlODIzYTA4OGQyNWZj
MTVhYTg4OWE0MjcuLmYzM2RjZTkxNmRlYjM2ZTliMjUyYTI1YjgyODRlZDVkMWE4YWIxZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAt
MzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAt
MjQ0LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1Q
YXRoKCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsK
KyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ry
b2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBib29sIGhpdFN1Y2Nlc3Mg
PSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9r
ZSk7CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVj
dChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2sKICAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAogICAgIGlmIChzdHJva2VT
dHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQxYTg5N2ZhYTNlNWRmZGFiMjNkZjgxMzQuLjA1YTM5
MTY1NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRkMDg4YzhkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMzAsNyArMzAsNyBA
QAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQzLDcg
KzQzLDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4
dFJlZiBjb250ZXh0KQogICAgIGlmICghcGxhdGZvcm1JbWFnZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rldmlj
ZVBpeGVscygKKyAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dENHKGNvbnRleHQpLnJv
dW5kVG9EZXZpY2VQaXhlbHMoCiAgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lk
dGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsKICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhc2NhZGVDb2NvYS5tbQppbmRleCBlMjlhZWNkZmJmZTY4MDA2N2ZjYmExOTM5ZmFlNTFlZGM4
NzkyZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3OGFiY2E4N2JlNDIyZmI1ODFjZjc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENv
Y29hLm1tCmluZGV4IDE0MjFlYjkwZDdhNDlkMWU0ODI0YjVhYzg5Njg4MTNhMzA1NDNmN2QuLjM4
OGFmY2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5NjdmMGU1MzU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dENvY29hLm1tCkBAIC0xMDYsNDggKzEwNiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0
aAogICAgIGRyYXdGb2N1c1JpbmcoY29udGV4dCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkK
KyAgICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNldCwg
Y29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29u
dGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3IpOwogfQog
CiAjaWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0
QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91
YmxlIHRpbWVPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyBib29sIGRyYXdGb2N1
c1JpbmdUb0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1
c1JpbmdQYXRoLCBkb3VibGUsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBVTlVTRURfUEFS
QU0odGltZU9mZnNldCk7CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENH
Q29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0aCk7CiAgICAgcmV0dXJuIGRyYXdG
b2N1c1JpbmdBdFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgo
KSwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSAvLyBGSVhNRTogaW1w
bGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4KKyAgICBpZiAocGF0aC5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNSaW5nVG9D
b250ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCB0aW1l
T2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCi0gICAg
ICAgIHJldHVybjsKLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQ
YXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoY29uc3QgYXV0
byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0
KCksIDAsIENHUmVjdChyZWN0KSk7CkBAIC0xNTcsMTYgKzE0Miw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91
YmxlIHRpbWVPCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+
IGZvY3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9y
IChhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0
aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNldCwgLW9mZnNldCkpOwpAQCAtMTk5
LDExICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xvckZvck1hcmtlckxpbmVTdHlsZShE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSBzdHlsZSwgYgogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBXZSB3YW50IHRvIGZpbmQgdGhlIG51bWJl
ciBvZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNvbHZpbmcgdGhlIGVxdWF0aW9uczoKICAgICAvLyBk
b3REaWFtZXRlciA9IGhlaWdodAogICAgIC8vIGRvdERpYW1ldGVyIC8gZG90R2FwID0gMTMuMjQ3
IC8gOS40NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbQppbmRleCBiZTM0MzA0YjJkMTA3MzU2MzFhYjhmYTkzOTc3ODRmZjBkY2U1
NjRjLi4yYWJjYzZmNDA0NjFmZTFlYmFjOTYyMDJlODVhYzVhNGJlZWNlZWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBA
IC0zNjksNyArMzY5LDcgQEAgR3JhcGhpY3NDb250ZXh0JiBJT1N1cmZhY2U6OmVuc3VyZUdyYXBo
aWNzQ29udGV4dCgpCiAgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4g
Km1fZ3JhcGhpY3NDb250ZXh0OwogCi0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOworICAgIG1fZ3JhcGhp
Y3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oZW5zdXJlUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4
dCh0cnVlKTsKIAogICAgIHJldHVybiAqbV9ncmFwaGljc0NvbnRleHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDIwZGFlZjRi
YjQxZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAwNGYzZjcuLjNlNTUxYjg1NzY2Njc0NDg1NTg1OWVj
OThiMWVjYTA2MzU5YzI5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5o
IgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogI2lmIFVTRShDT1JFX1RFWFQpCiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgpAQCAtNjgsNyArNjksOSBAQCBwdWJs
aWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZh
dGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVT
RShDT1JFX1RFWFQpCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJu
YWxDb250ZXh0KCk7CisjZW5kaWYKIAogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29u
dGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwpAQCAtOTEsNyArOTQsMTEgQEAgcHJp
dmF0ZToKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKLSAgICBHcmFwaGljc0NvbnRleHQgbV9p
bnRlcm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9URVhUKQorICAgIFVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OworI2VuZGlmCisKICAgICBjb25zdCBGb250
KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Nt
b290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFm
ZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApp
bmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzljZTU5OGI1Mjc3MDJjOGFhMzNkLi5jYWNmNzY0ZjVk
ZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkxYzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRl
eHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhCiAgICAgcmV0
dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotR3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNv
cmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK1VuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+
IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKIHsKICAgICBhdXRv
IGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykp
OwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgp
LCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFj
az4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcgKzg1LDcgQEAgR3JhcGhpY3NDb250ZXh0IERyYXdH
bHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAgICBDR0NvbnRleHREZWxl
Z2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWlu
dGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29u
dGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJbWFnZSwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRl
eHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0ltYWdlKSk7CiAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVsZWdhdGUoY29udGV4dERlbGVnYXRlLmdldCgpLCBr
Q0dDb250ZXh0VHlwZVVua25vd24sIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAogRHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1
Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtMTE5LDM0ICsxMjAsMzEgQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQog
ewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwogICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5n
cmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
cGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4p
Ci0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKICAg
ICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0
cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBp
ZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0
ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCpt
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAgfQogCi0gICAgbV9pbnRl
cm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOworICAgIG1faW50ZXJuYWxD
b250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CiAKLSAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmln
bm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChjb250ZXh0U3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbnRlcm5hbENv
bnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFs
U3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOworICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3Rh
dGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRT
aGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgY29udGV4dFN0YXRlLnNoYWRv
d1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0VGV4dERyYXdpbmdNb2Rl
KGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CiB9CiAKIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQm
IGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zMDIsNyArMzAwLDcg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgcmV0dXJuOwogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3NpdGlvbiA9IENHQ29udGV4dEdldFRleHRQb3NpdGlv
bihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYXV0byB0ZXh0UG9z
aXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi54KTsKICAgICBBU1NFUlQo
IXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpAQCAtMzIxLDcgKzMxOSw3IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0
YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91IHNldCB0aGVzZSB0d28gZXF1YWwgdG8gZWFjaCBv
dGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3UgZ2V0CiAgICAgLy8gQ1RNICogY3VycmVudFRleHRN
YXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRyaXgKICAgICAvLyBjdXJyZW50VGV4
dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5hbFRleHRNYXRyaXgpID0gWAotICAgIEFmZmluZVRy
YW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRl
cm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdXJy
ZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtRml4dXA7CiAgICAg
aWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXggPSBtX29yaWdpbmFsVGV4dE1hdHJp
eC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZpeHVwID0gY3VycmVudFRleHRNYXRyaXggKiBpbnZl
cnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDU0ZDg1NDcxMjNmODk0N2Q2ZjJmYWNk
N2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3NmZlOTEyZDY4MTAyMDc2MTAwMWNjMjRmNjg2ODg2
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5j
cHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgUmVjb3Jk
ZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250
ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVj
b3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0
ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVn
YXRlKQogewogfQogCkBAIC00NiwxMyArNDQsNiBAQCB2b2lkIERyYXdpbmdDb250ZXh0OjpzZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogICAg
IG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNldCgpOwogfQogCi1SZWNvcmRlciYgRHJhd2luZ0Nv
bnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBhdXRvKiBncmFwaGljc0NvbnRleHRJbXBsID0gY29u
dGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4oKmdyYXBoaWNzQ29udGV4dEltcGwpOwotfQotCiB2
b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0KQogewogICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmluZGV4IGQzN2MwNzM1YmVi
NTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRkZGVmODU3NTI4YzgyNzllNGYxZWZi
ZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBEcmF3aW5nQ29udGV4dCB7CiBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBSZWNv
cmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7CiAKKyAgICAvLyBGSVhNRTogRGVkdXBsaWNhdGUg
dGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRlciYgcmVjb3JkZXIoKSB7
IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkg
eyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0pOyB9CiAgICAgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0
IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7
IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVw
bGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3RlY3RlZDoKLSAgICBHcmFw
aGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVyIG1fY29udGV4dDsKICAgICBEaXNw
bGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbk1lbW9yeURpc3Bs
YXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApp
bmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJjMGEzLi5mMjIyZTIxODNh
MzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKIAogdm9pZCBE
cmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotI2lmIFVT
RShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKaW5kZXggYTFkNTdhMDY4NWYwMzM4ZjdkZGFmMjZlMDhhMjIyZWEzMDY0YTcwMS4u
ZGM2ZjBjOTYwYWNjZTMzNjg0MzM1ZDVmNTMyZDAwMmJmYTk3NTk3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAgICAg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7
Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkgKzMzMSw3IEBAIHZvaWQg
U2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dC
bHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotI2lmIFVTRShDRykK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotI2VuZGlm
IC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwog
ICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3LDEyIEBAIE9wdGlvbmFs
PFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAKICAgICAgICAg
c3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKIAotI2lmIFVT
RShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAg
ICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotICAgICAgICBpZiAoIXNo
YWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+
IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsK
KyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lS
YWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cpCisgICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRv
d1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggOWRiNWE1YTgx
MDFhOTlkZDVkYzZhZmMwMjBlM2Y1NmJkY2VmZjNjOS4uYzFlYWM1Mzk1YWJjODFjMjdiOTlmOTZl
NWVhMzI1YWRhNTU0ODFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlz
cGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IEdy
YXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxp
c3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogICAgICwgbV9k
ZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdH
bHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtNTAsOSAr
NTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQo
eyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAKLVJlY29yZGVyOjpSZWNv
cmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogR3JhcGhpY3NDb250ZXh0
SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQubV9kaXNwbGF5TGlzdCkK
K1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlz
cGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVnYXRlKQogICAgICwgbV9p
c05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIHBhcmVudC5t
X2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24oKSkKQEAgLTE2Niwx
MSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5kZXJpbmdNb2RlKCkgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclNo
YWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCiB2b2lkIFJlY29yZGVy
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBlbmQ8U2V0TGluZUNhcD4o
bGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDExIEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZERyYXdH
bHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCCiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1h
Z2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgLy8gRklY
TUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMgd2hhdCB1c2VkIHRvIGhhcHBlbi4KKyAgICBpZiAo
IWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Rpc3BsYXlMaXN0LmNhY2hlSW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdl
QnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5LDcgQEAgdm9pZCBSZWNvcmRlcjo6c2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5z
Zm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVEZXZpY2VTY2FsZS4KICAg
ICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwpAQCAtMjk4LDggKzI5Nyw5IEBAIHZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQogCi12
b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7CisgICAg
Ly8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHlsZSBub3QgdXNlZD8KICAgICBhcHBlbmQ8RHJhd0xp
bmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCkBAIC0zMjgsNiArMzI4LDE4IEBA
IHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihy
ZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29u
c3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBj
b25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lk
IFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYXBwZW5k
PEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUyLDkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgYXBwZW5kPENs
aXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3Vu
ZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgV1RGTG9n
QWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIERp
c3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgs
IDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgp
LmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC00NTIs
MzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAgIGFwcGVuZDxDbGlwVG9J
bWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikKK0dy
YXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IFJlY29yZGVyOjpjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+
JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4dCBuZXN0ZWRDb250ZXh0
KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgYXV0byBpbml0aWFsQ2xp
cCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CisgICAgYXV0
byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUo
KSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1hZ2VCdWZmZXIncyBp
bml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgICAgICBG
bG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxl
KCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZEludFNpemUoZGVzdGluYXRp
b24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlh
bENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0gICAgICAgIGluaXRpYWxD
VE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgaW5pdGlhbENU
TS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICAvLyBUaGUgaW5p
dGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgorICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5j
bHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhT
Y2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFu
ZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7CisgICAg
aW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGluaXRp
YWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29yZGVyKCp0aGlzLCBjb250
ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSkpOwot
ICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMsIEdyYXBoaWNzQ29udGV4
dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBhcHBlbmQ8QmVnaW5DbGlw
VG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlKTsKICAgICBkcmF3aW5n
RnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENsaXBUb0RyYXdpbmdDb21t
YW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBSZWNvcmRl
cjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJiBwbGF5ZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYgRU5BQkxFKFZJREVPKQog
dm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmll
cigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
ciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIEFTU0VSVChwbGF5
ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIs
IGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjcsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6
OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAgaWYgKGdldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CiAgICAgICAgIEZs
b2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3Zl
KHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50
aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTUsNiBAQCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50U3Rh
dGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOwotfQotCiB2b2lk
IFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewog
ICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuaAppbmRleCA3NjMzOWFiZThhNjA4MDRiYzcyY2MwOTFmZjRkMjFhZjE0Y2FlMDU0Li4wODUy
ZTkxYzM2NTZmNTI2NGYyMzZlNTBhZGIyZDE0ZGZlMjZiZGZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEaXNwbGF5
TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5j
bHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBG
b3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5n
T3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgUmVjb3JkZXIgOiBw
dWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFzcyBEZWxlZ2F0ZTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxl
Z2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNv
bnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3Jt
YXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CkBAIC03NywxNSAr
NzcsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBEcmF3R2x5cGhz
UmVjb3JkZXI7Ci0gICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOworICAgIFJlY29yZGVyKFJl
Y29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKTsKIAog
ICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhpcz8KKyAgICBib29s
IGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0OwogICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElz
Q0FMYXllckNvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0NBTGF5ZXJDb250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZvaWQgZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBvdmVycmlkZSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEx
NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogCi0jaWYgVVNFKENHKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJu
KCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyMCwxNCArMTI5LDIwIEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNl
dCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisjZW5kaWYKKwog
ICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwog
CkBAIC0xMzYsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92
ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIG92ZXJyaWRlOwogICAg
IHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTE0NSwxMiArMTYwLDEy
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJv
dW5kcygpIG92ZXJyaWRlOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdD
b21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWlu
dEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZTsKICNlbmRp
ZgogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKQEAg
LTE3Myw3ICsxODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAgICAgYXV0byBpdGVtID0gVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAg
ICAgICAgICAgaWYgKGF1dG8gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0
KCkpKQorICAgICAgICAgICAgaWYgKGF1dG8gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoKnRoaXMp
KQogICAgICAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoZXh0
ZW50RnJvbUxvY2FsQm91bmRzKCpyZWN0KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChhdXRvIHJl
Y3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQogICAgICAgICAgICAgICAgIG1fZGlzcGxheUxpc3Qu
YWRkRHJhd2luZ0l0ZW1FeHRlbnQoKnJlY3QpOwpAQCAtMTk1LDcgKzIxMCw2IEBAIHByaXZhdGU6
CiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKICAgICAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotICAg
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcEJvdW5kcygpIGNvbnN0OwogCiAgICAgc3RydWN0IENvbnRl
eHRTdGF0ZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KaW5kZXggNjViY2E2NzBmOTI4
NmQyNWExOTUxOTIxYjg1ZjBhMDVhMDE1MmQ1MS4uODlkODgyYzU3ZjQ3NjFlNTQ2ZGQ0MjQ3MDFm
MzNkMmZiMjAzMWYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKEFQUEtJVCkKIAor
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dC5oIgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNpbXBv
cnQgPHd0Zi9Mb2NrLmg+CkBAIC04NSw3ICs4Niw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1
aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCiAgICAg
ICAgIFJldGFpblB0cjxOU0JpdG1hcEltYWdlUmVwPiBvZmZzY3JlZW5SZXAgPSBhZG9wdE5TKFtb
TlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5pbCBwaXhl
bHNXaWRlOjEgcGl4ZWxzSGlnaDoxCiAgICAgICAgICAgICBiaXRzUGVyU2FtcGxlOjggc2FtcGxl
c1BlclBpeGVsOjQgaGFzQWxwaGE6WUVTIGlzUGxhbmFyOk5PIGNvbG9yU3BhY2VOYW1lOk5TRGV2
aWNlUkdCQ29sb3JTcGFjZSBieXRlc1BlclJvdzo0IGJpdHNQZXJQaXhlbDozMl0pOwogCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBiaXRtYXBDb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwLmdldCgpXS5DR0NvbnRl
eHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBiaXRtYXBDb250ZXh0KFtOU0dyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwLmdl
dCgpXS5DR0NvbnRleHQpOwogICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9j
YWxDb250ZXh0KGJpdG1hcENvbnRleHQpOwogCiAgICAgICAgIFtjb2xvciBkcmF3U3dhdGNoSW5S
ZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCmluZGV4IGNlN2FiZDdiNGU5NWVlYjM4OTZhZTVk
OWIzY2E0ZDFjZTBmZWI5ZWYuLjU1NDgwYjUyYjkxZTAyODYyZmYwYmZjMTMwNmRhODBkNjAzYzU0
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5
ZXIubW0KQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV2Vi
TGF5ZXIuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgpAQCAtNTEs
NyArNTEsNyBAQCAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7
CiAgICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxh
eWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllcikgewotICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4
dCk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6UmVwYWludFJlY3RMaXN0IHJl
Y3RzVG9QYWludCA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6Y29sbGVjdFJlY3RzVG9QYWlu
dChncmFwaGljc0NvbnRleHQsIGxheWVyLmdldCgpKTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyOjpkcmF3TGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGxheWVyLmdldCgp
LCByZWN0c1RvUGFpbnQsIHNlbGYuaXNSZW5kZXJpbmdJbkNvbnRleHQgPyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRTbmFwc2hvdHRpbmcgOiBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRO
b3JtYWwpOwogICAgIH0KQEAgLTEyOCw3ICsxMjgsNyBAQCAtICh2b2lkKWRyYXdJbkNvbnRleHQ6
KENHQ29udGV4dFJlZiljb250ZXh0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBh
dXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JM
YXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVyLT5vd25l
cigpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
Y29udGV4dCk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29u
dGV4dChjb250ZXh0KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRl
eHQodHJ1ZSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChsYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDM4NWRmNjE2ODI3
NmFiZmZmNTdmNzE1NDgzNDdkOWMwYjE5ZjcyNDUuLjBmZGQzNjAyOTNhODFhNDMyMjg5ZWI0ZmVk
OWQyNDA0Yzk0MTM2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCkBAIC03Miw5ICs3Miw4IEBAIGF1dG8gY3JlYXRlQ29t
bWFuZCgpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE9wZXJhdGlvbkRhdGE8
PiwgVD46OnZhCiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VD4oKTsKIH0KIAotQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmIGNvbW1hbmRMaXN0KQorICAgIDogbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKIHsKICAg
ICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgeyB9LCB7IH0sIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0
KCkgfSk7CiB9CkBAIC0xNTQsMTAgKzE1Myw2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwCiAg
ICAgfQogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKLXsK
LX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGlu
ZUNhcCkKIHsKICAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPExpbmVDYXA+IHsKQEAgLTI1MCw3ICsyNDUsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMjcwLDcgKzI2NSw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVj
dCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQpAQCAtMjkyLDcgKzI4Nyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAs
IHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKSkpOwogfQogCkBAIC0zMTYsNyArMzEx
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsKIH0KIApAQCAtMzQ2LDcgKzM0MSw3
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+
KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC0zNjcsNyArMzYyLDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9yKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsK
IH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQpAQCAtMzg2LDcgKzM4MSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApA
QCAtNDA4LDcgKzQwMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3Qs
IENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwog
fQogCkBAIC00MjgsNyArNDIzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00NDgsNyArNDQzLDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00NzAsNyArNDY1LDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QsIENhaXJvOjpTdHJva2VT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTUyMyw3
ICs1MTgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhz
PihDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAog
ICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKICAgICAgICAgUmVmUHRy
PGNhaXJvX3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwK
QEAgLTU1Myw3ICs1NDgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsbwogICAgIH07CiAKICAg
ICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1J
bWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9ucywg
c3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSksIHN0YXRlLmFscGhhLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTU5Myw3ICs1ODgsNyBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsK
IH0KIApAQCAtNjEzLDExICs2MDgsMTEgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlh
cykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKICAgICBzdHJ1Y3Qg
RHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CiAgICAg
ICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CkBAIC02MzMsNyArNjI4
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTY3MiwxNCArNjY3LDEwIEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsK
LX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKICAgICBzdHJ1Y3QgRHJhd0ZvY3VzUmluZyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFBhdGgsIGZsb2F0LCBDb2xvcj4gewpAQCAtOTAzLDcgKzg5NCw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQogICAgIHN0YXRlLmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCk7CiB9CiAK
LUFmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCitBZmZpbmVUcmFuc2Zvcm0gQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdAogewogICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpLmN0bTsKIH0KQEAgLTEwMzIs
NyArMTAyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgfQogfQogCi1JbnRSZWN0IENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVT
dGFjay5sYXN0KCk7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qoc3RhdGUuY3RtSW52ZXJz
ZS5tYXBSZWN0KHN0YXRlLmNsaXBCb3VuZHMpKTsKQEAgLTEwNzYsMTUgKzEwNjcsMTcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5n
T3BlcmF0aW9uPiYmIGNvbW1hbmQKICAgICBtX2NvbW1hbmRMaXN0LmFwcGVuZChXVEZNb3ZlKGNv
bW1hbmQpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5j
dGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1w
bGVtZW50ZWQuCisgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2Vz
czsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBw
bGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IE5v
dCBpbXBsZW1lbnRlZC4KKyAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShw
bGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKaW5kZXggNjU4OTNiMGIyYmMwNmJi
YjUwZDVjMDRhZDdiOTc2YjhiZmQ2ZjBiYy4uMDMyMzljNmNjYTgyYmRmNGQxN2M5YmI3ZTc3YTg1
Yjk0YzFmZjAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuaApAQCAtMjgsMjEgKzI4LDIwIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlvbi5oIgogCiBuYW1lc3BhY2Ug
Tmljb3NpYSB7CiAKLWNsYXNzIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBDYWlyb09wZXJhdGlvblJlY29y
ZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCB7CiBwdWJsaWM6Ci0g
ICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmLCBQYWlu
dGluZ09wZXJhdGlvbnMmKTsKKyAgICBDYWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3Bl
cmF0aW9ucyYpOwogCiBwcml2YXRlOgogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbnVsbHB0cjsgfQog
CiAgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldExp
bmVDYXAoV2ViQ29yZTo6TGluZUNhcCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7CkBAIC01Myw2ICs1Miw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6R3JhZGllbnQmKSBvdmVycmlkZTsKICAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiwgV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IFdlYkNvcmU6OkZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlIHsgQVNTRVJU
X05PVF9SRUFDSEVEKCk7IH0KICAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpCbGVu
ZE1vZGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUGF0aChjb25zdCBX
ZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CkBAIC03MCwxMCArNzAsOSBAQCBwcml2YXRlOgogCiAg
ICAgdm9pZCBkcmF3UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJD
b3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5l
c0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgV2ViQ29yZTo6U3Ryb2tlU3R5bGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBXZWJD
b3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBXZWJDb3JlOjpQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKQEAgLTg2LDcgKzg1LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNjYWxlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSYpIG92ZXJy
aWRlOwotICAgIFdlYkNvcmU6OkFmZmluZVRyYW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2
aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3Zl
cnJpZGU7CkBAIC05NSwxMiArOTQsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBPdXQoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFdlYkNv
cmU6OlBhdGgmLCBXZWJDb3JlOjpXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6SW50
UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6SW50UmVjdCBjbGlwQm91
bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpJbWFnZUJ1ZmZlciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIFdlYkNvcmU6OkRl
c3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFt
ZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEo
Y29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0
Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1YjhjMWQ4N2EyYzZjMzdjY2U4YWFmNTQu
LjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBjZmJkMDZhZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50
aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAKQEAgLTMyLDcg
KzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKICNpbmNsdWRlICJO
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29zaWFQYWludGlu
Z09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50aW5nQ29udGV4
dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmcoQnVmZmVyJiBidWZmZXIpCiAKICAgICBt
X2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jYWlyby5zdXJmYWNlLmdl
dCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQuZ2V0KCkpOwotICAgIG1fZ3JhcGhpY3ND
b250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSgqbV9wbGF0Zm9ybUNvbnRleHQp
KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIFBhaW50aW5nQ29udGV4dENh
aXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkKQEAgLTEwNCwxMSArMTA0LDcgQEAgdm9p
ZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OnJlcGxheShjb25zdCBQYWludGlu
Z09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGlu
Zzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVyYXRpb25zKQog
ewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJhdGlvbnMpOwot
ICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25zKTsKIH0KIAogUGFpbnRpbmdDb250ZXh0
Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGluZygpID0gZGVmYXVsdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
R1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJmNTc1ZDUyYzhiZGJkMWNlMjgyYjhlYmE3
ZDUwYmIuLjBmOWQ4NzI5ZTcxZGQ0MmU4MGU1OWVlYjM4YmE4MWMwNGJlY2YzZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
R1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIFVTRShDRykKIAogI2lu
Y2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAtNjcsMzIgKzY3
LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBDR0NvbnRleHRXaXRoSERDKEhE
QyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGlj
c0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKKyAg
ICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpCiB7
Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFo
ZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSk7CiAgICAgbV9k
YXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRhLT5tX2NnQ29udGV4dCkgewotICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUu
Ci0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICAgICAgc2V0
UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICB9CiB9CiAKIC8vIEZJWE1F
OiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dzQ29udGV4dCBhbmQgY3JlYXRlV2lu
ZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3VpdGFibGUgZm9yIGFsbCBjbGllbnRz
Pwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBj
b25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIGJv
b2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8fCBpc0luVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAhZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICgh
Y3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5k
b3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib28KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydEFs
cGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NHSW1hZ2VBbHBo
YU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7Ci0gICAgQ0dDb250ZXh0RHJh
d0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3QsIGltYWdlLmdldCgpKTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fY2dD
b250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CiAgICAgCiAgICAgLy8gRGVsZXRl
IGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhkYyk7CkBAIC0xMjQsMjEgKzExMSwxOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCog
aW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEo
aW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+c2l6ZSgp
LmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVyUm93KCksIHNSR0JDb2xvclNwYWNlUmVm
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwgZGF0
YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0g
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNp
emUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAorICAgIENHQ29udGV4dERyYXdJbWFn
ZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9jZ0NvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNp
emUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIC8vIEZJ
WE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRleHRNYWMubW0uCiAvLyBUaGUgY29k
ZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNwcCBhbmQgYmUgc2hhcmVkLgotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4wZjsKICAgICBvZmZzZXQgKz0gcmFkaXVz
OwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5pc1ZhbGlkKCkgPyBjYWNoZWRDR0Nv
bG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEgKzE0OCw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3R5bGUubW9kZSAhPSBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcgJiYgc3R5bGUubW9kZSAhPSBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
NDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVz
aCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRleHQuZ2V0KCkpOwogfQogCitHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENHOjpkZXByZWNhdGVkUHJp
dmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGE7Cit9CisKIH0KICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKaW5kZXggZjE0NDI1NzJjYzZkMWQ1NGJi
ZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjgyNGYzMWZjMjhmMmJmMWM2NTQzMWI5ZmM5OWRhNjc5
NWEwOWJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCkBAIC0yOCw3ICsyOCw3
IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJESUJQaXhlbERh
dGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlIDxjYWlyby13
aW4zMi5oPgpAQCAtMTI3LDkgKzEyNyw5IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRl
eHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3Qg
SW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNy
ZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5j
eUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFkZXByZWNhdGVk
UHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAg
aWYgKCFoZGMgfHwgIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7
CisgICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE3OCw0ICsxNzgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQogfQogI2VuZGlmCiAKK0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKaW5kZXggMjlhODJhODk3ODIyOWIwZjU4NzNhYmRm
ODJiZmFmODA2Y2YxNjU5OC4uZTNjNmY3YzYyNGFlNmY5OTU4MjczNGIwZjg4OWM4ZmYwNmExODZh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCkBAIC00NywxNyArNDcsMTcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBo
aWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIHBsYXRmb3JtSW5pdCho
ZGMsIGhhc0FscGhhKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERD
IGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29s
IGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dChIREMg
aGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wg
aGFzQWxwaGEpCiB7CiAgICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAgICBhdXRv
IHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwog
Ci0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVh
dGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKKyAgICBI
UkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3Jl
YXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAg
UkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdldCktPkJp
bmREQyhoZGMsICZyZWN0KTsKQEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0
LCBSRQogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCog
cGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRl
cmVyVHlwZSkKIHsKICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIHJl
bmRlcmVyVHlwZSk7CiB9CiAKLUlEMkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1G
YWN0b3J5KCkKK0lEMkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZh
Y3RvcnkoKQogewogICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51
bGxwdHI7CiAgICAgaWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKQEAgLTg5LDcgKzg5LDcgQEAgSUQy
RDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKQogICAgIHJldHVybiBk
aXJlY3QyREZhY3Rvcnk7CiB9CiAKLUlEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQorSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBzdGF0aWMgSUQyRDFSZW5k
ZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRyOwogICAgIGlmICghZGVmYXVs
dFJlbmRlclRhcmdldCkgewpAQCAtMTA0LDcgKzEwNCw3IEBAIElEMkQxUmVuZGVyVGFyZ2V0KiBH
cmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogICAgIHJldHVybiBkZWZhdWx0
UmVuZGVyVGFyZ2V0OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhE
QyBoZGMsIGJvb2wgaGFzQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0
Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBpZiAoIWhkYykKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTM2LDEyICsxMzYsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogICAgIC8vIEZJWE1FOiBtX3N0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHko
Q0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxh
dGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAg
ICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogewogICAgIGlmICghcGxh
dGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm47CkBAIC0xNTUsMTYgKzE1NSwxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBw
bGF0Zm9ybUNvbnRleHQsIEJpdAogICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50
ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6fkdy
YXBoaWNzQ29udGV4dERpcmVjdDJEKCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1QbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAorUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxl
ZCgpKTsKICAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKQEAgLTE5
NSwzMyArMTkyLDI4IEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y3Vy
cmVudEdsb2JhbEFscGhhKCkgY29uc3QKICAgICByZXR1cm4gbV9hbHBoYTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgRGlyZWN0MkQ6OnNhdmUoKnBsYXRmb3Jt
Q29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0
YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUoKQogewotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
KCk7CiAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IENPTVB0cjxJRDJEMUJp
dG1hcD4mIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJE
OjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgaW1hZ2VT
aXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRm
b3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGltYWdlU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5k
b3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRB
bHBoYUJsZW5kKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVsZWFzZVdpbmRvd3ND
b250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhh
QmxlbmQpCiB7CiAgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1f
aGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkg
ewotICAgICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgICAgICBEaXJlY3Qy
RDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjYyLDM0ICsyNTQsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dz
Q29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib28KICAgICA6OkRlbGV0
ZURDKGhkYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcChX
aW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2Us
IGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKKyAgICBEaXJlY3QyRDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwogfQogCi1H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCitHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6
IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVyZXJUeXBl
KHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBp
ZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCi1H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0
Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUg
cmVuZGVyaW5nVHlwZSkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRD4mJiBvd25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiAgICAgOiBtX293bmVkUGxh
dGZvcm1Db250ZXh0KFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQpKQogICAgICwgbV9wbGF0
Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlw
ZShyZW5kZXJpbmdUeXBlKQpAQCAtMjk3LDcgKzI5MCw3IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0
cjxQCiAgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBpZiAobV9yZW5kZXJlclR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCkBAIC0zMTAsOSArMzAzLDgg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKCkKICAgICAgICAgZW5kRHJhdygpOwogfQogCi1JRDJEMVNvbGlkQ29sb3JCcnVz
aCogR3JhcGhpY3NDb250ZXh0OjpicnVzaFdpdGhDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJ
RDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JX
aXRoR2xvYmFsQWxwaGEoY29sb3IpKS5nZXQoKTsKIH0KIApAQCAtMzcyLDczICszNjQsNjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZSkK
IHsKIH0KIAotRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxw
aGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0
CiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xv
YmFsQWxwaGEoKSk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRTdHJv
a2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29s
aWRTdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5t
X3NvbGlkU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4
dDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250
ZXh0KCktPm1fc29saWRGaWxsQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNz
Q29udGV4dDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVy
biBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlE
MkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CitJRDJE
MUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2guZ2V0
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpbkRyYXcoKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkRyYXcoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmVuZERyYXcoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZW5kRHJhdygpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZW5kRHJhdygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Zmx1c2goKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmx1c2goKQogewogICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0
ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlOwogICAgIERpcmVjdDJEOjpk
cmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGlsZUltYWdlKSwgSW50U2l6
ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwog
fQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yKTsKIH0KQEAgLTQ5MCw1MiArNDY5LDI5IEBAIEQyRDFfU1RST0tFX1NU
WUxFX1BST1BFUlRJRVMgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzdHJva2VTdHls
ZVByb3BlcnRpCiAgICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX3BsYXRm
b3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0
Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVKb2luLCBtX3Bs
YXRmb3JtQ29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7
CiB9CiAKLUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VT
dHlsZSgpIGNvbnN0CitJRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c3Ryb2tlU3R5bGUoKSBjb25zdAogewogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5zdHJva2VTdHlsZSgpOwogfQogCiAvLyBU
aGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9
PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0
KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpmaWxs
RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8v
IEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCkBAIC01NDMsMTEg
KzQ5OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxw
aGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5Rmls
bFBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVy
bigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2lu
ZG93cwogCkBAIC01NTUsMTc5ICs1MDgsMTA0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKCkKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNo
ID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0
aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRv
JiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpkcmF3UGF0aChj
b250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8
fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQg
PSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBh
dGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxh
dGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29udGV4dCwgcGF0aCwg
RGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJl
Y3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRv
JiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdChj
b250ZXh0LCByZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
KGNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgYXV0byBicnVz
aCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KTsKKyAgICBpZiAoIWJydXNoKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1w
bCk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LCBicnVzaC5nZXQoKSk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CisKKyAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0
b3IsIGJsZW5kTW9kZSk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZp
b3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250
ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIERpcmVjdDJEOjpGaWxsU291
cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNs
aXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQo
cGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0
aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJE
OjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotSW50
UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJv
dW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCkBAIC03MzUsMTggKzYxMywxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2lt
cGwpOwotCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNp
dHkpOwogICAgIHNhdmUoKTsKIAogICAgIG1fc3RhdGUuYWxwaGEgPSBvcGFjaXR5OwogCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwogfQogCkBAIC03NTQsMTE5
ICs2MjcsMTEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBEaXJlY3QyRDo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIAotICAgIEFTU0VSVCghbV9pbXBs
KTsKLQogICAgIG1fc3RhdGUuYWxwaGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpOwog
CiAgICAgcmVzdG9yZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKQorYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3VwcG9ydHNU
cmFuc3BhcmVuY3lMYXllcnMoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgICh2b2lkKW9m
ZnNldDsKLSAgICAodm9pZClibHVyOwotICAgICh2b2lkKWNvbG9yOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25l
c3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCisg
ICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250
ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKKyAgICAgICAg
ICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUg
b3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Cisg
ICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAg
ICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgo
KSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAgICAgICB9CisgICAgfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9r
ZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3R5bGUpOwotfQorICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCisgICAgICAgIERp
cmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBz
dGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3Vs
ZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxp
bWl0KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRl
LnN0cm9rZUNvbG9yID09IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29s
aWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOyAgICAKKyAgICB9
CisgICAgCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xv
cik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hX
aXRoQ29sb3IoZmlsbENvbG9yKCkpOwogICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgp
LCBsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkgeworICAgICAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0g
ZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9B
TlRJQUxJQVNfTU9ERV9BTElBU0VEOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB9
CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpBbHBoYUNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxw
aGEpOworICAgICAgICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKICAgICB9CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpjbGVhclJlY3QoKnBsYXRm
b3JtQ29udGV4dCgpLCByZWN0KTsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKSB7CisgICAgICAgIEQy
RDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9O
RUFSRVNUX05FSUdIQk9SOworCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQy
RDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToK
KyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05F
SUdIQk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkxvdzoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9E
RV9MSU5FQVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6TWVkaXVtOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX0NVQklDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29u
dGV4dCgpLCBxdWFsaXR5KTsKKyAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgRGlyZWN0MkQ6OnNl
dE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJE
OjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGNhcCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0
IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUo
KTsgKytpKQpAQCAtODc1LDM0MSArNzQyLDE3MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAg
ICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwog
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihqb2luKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OnNldExpbmVKb2luKCpwbGF0Zm9ybUNvbnRleHQoKSwgam9pbik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZp
bGxSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQogewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzY2FsZSgq
cGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
cm90YXRlKGFuZ2xlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0
KCksIGFuZ2xlKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9y
bUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjp0cmFuc2xhdGUoKnBsYXRmb3Jt
Q29udGV4dCgpLCB4LCB5KTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zv
cm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJh
bnNmb3JtKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0o
SW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRl
U2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJu
IG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkK
K0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAo
bV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3Qs
IHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBE
YXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQoMCk7Ci0gICAgd2lkdGhzLmFwcGVu
ZChyZWN0LndpZHRoKCkpOwotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCBy
ZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNv
bG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGlu
ZyBjb250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0
cy4KLSAgICB9Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25R
dWFsaXR5IG1vZGUpCi17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotCi0gICAg
RDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RF
X05FQVJFU1RfTkVJR0hCT1I7Ci0KLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJ
T05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAv
LyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxp
dHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29s
IGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxh
eWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29u
dGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVk
LgogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVk
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
Ym9vbCBpc0FjY2VsZXJhdGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1BsYXRmb3Jt
Q29udGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6
OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgKHZvaWQpbW9k
ZTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1f
c3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaCA9IGJydXNo
V2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgRGly
ZWN0MkQuCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNr
bmVzcyhmbG9hdCB0aGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzID09IHRoaWNrbmVzcyk7Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VUaGlj
a25lc3ModGhpY2tuZXNzKTsKLX0KKyAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9z
dGF0ZS5maWxsUGF0dGVybikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUg
dG8gZmlsbCBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisg
ICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7Ci0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0aENvbG9yKGZpbGxDb2xvcigpKTsKKyAgICBEaXJl
Y3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZp
bGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0
ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KKyAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEFTU0VSVCghbV9pbXBsKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCpwbGF0
Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKKyAgICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRm
b3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9r
ZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhp
bmcpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBVTlVTRURfUEFSQU0oZm9u
dFNtb290aGluZyk7CisgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGF1dG8geE9mZnNldCA9IHBv
aW50LngoKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOwor
ICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7CisgICAgVmVj
dG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMpOwogCi0gICAg
YXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9E
RV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQUxJQVNFRDsKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRT
bW9vdGhpbmdNb2RlKTsKLX0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhz
OyArK2kpIHsKKyAgICAgICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291
bnQoKSkKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGkgKyBmcm9tKTsKKyAgICAgICAgaWYgKCFhZHZhbmNlKQorICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBhbHBoYSk7Ci0gICAgbV9kYXRhLT5z
ZXRBbHBoYShhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZy
b20pOworICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwor
ICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7
CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdo
dCgpOworICAgIH0KIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBkb3VibGUgc3ludGhldGlj
Qm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwogCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUp
OworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBEaXJl
Y3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uo
c3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwg
Z3JhcGhpY3NDb250ZXh0KCkpLAorICAgICAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUp
LCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2
YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdN
b2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hh
ZG93Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorR3JhcGhpY3NDb250ZXh0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQogewotICAgIC8vIFRo
aXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQuCisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRl
ZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZp
bGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxs
IGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAg
ZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1
ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2Us
IG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNv
bG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byogY29udGV4dCA9ICZncmFw
aGljc0NvbnRleHQoKTsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKGNvbnRleHQpKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3Qm
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KLSAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0
MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJv
a2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwor
ICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCiB9CisjZW5kaWYKKwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYjcwYzNjMTczYzkxYTc2YmViZDJlOGU2ZGYyMTU1ZjFhMTU0YWMxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGly
ZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVj
dDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVG
YWN0b3J5KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAg
ICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRD4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3Rv
cnkoCi0gICAgICAgIFtyZW5kZXJUYXJnZXRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEPihjb250ZXh0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICB9KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9wbGF0
Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5n
ZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4ocmVuZGVy
VGFyZ2V0KSkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0
KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5j
Q29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6fkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKLX0KLQotYm9vbCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICZtX3BsYXRmb3JtQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAgICAgICAg
RGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ry
b2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAg
aWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFu
aW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5j
ZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBh
dXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQg
PSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zm
c2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9Owot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlh
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGVhclNoYWRvdygp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29u
dGV4dCwgbGluZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFz
aE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4obV9w
bGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBEaXJlY3Qy
RDo6c2V0TWl0ZXJMaW1pdChtX3BsYXRmb3JtQ29udGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6
OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBE
aXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byBicnVzaCA9IGdyYWRpZW50LmNyZWF0
ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIWJydXNo
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUp
OwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3Is
IERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBC
bGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRv
ciwgYmxlbmRNb2RlKTsKLQotICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShz
dGF0ZSk7Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCi0gICAgICAgIERpcmVjdDJEOjpmaWxs
Um91bmRlZFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7
Ci0gICAgZWxzZQotICAgICAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QucmVjdCgpLCBjb2xvciwgc2hhZG93U3RhdGUpOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAg
RGlyZWN0MkQ6OkZpbGxTb3VyY2UgZmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkp
OwotICAgIGZpbGxTb3VyY2UuYnJ1c2ggPSBtX3BsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xv
cihjb2xvcik7Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbFNvdXJjZSwgRGlyZWN0MkQ6
OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJE
OjpmaWxsUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uo
c3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBz
ZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lk
dGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRo
KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBn
cmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0
KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3Qy
RDo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3Ro
aW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21vb3RoaW5nKTsKLSAgICBpZiAoIWZvbnQu
cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZz
ZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5
cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOwot
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAg
ICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
aSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9tKTsKLSAg
ICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAg
Z2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAg
ICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAg
ICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6
RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291
cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0gICAgICAgIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhv
cml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50
ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdO
YXRpdmVJbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpkcmF3UGF0dGVybigoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLnBsYXRm
b3JtSW1hZ2UoKSkKLSAgICAgICAgRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250
ZXh0LCBXVEZNb3ZlKHN1cmZhY2UpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlj
a25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6
ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VT
dHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJs
aW5lcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSBzdHlsZSkKLXsKLSAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3Qy
RDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3Is
IHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXRoKGNv
bnN0IFBhdGgmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnNhdmUoKQotewotICAgIERpcmVjdDJEOjpzYXZlKG1fcGxhdGZvcm1Db250
ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJlc3RvcmUoKQot
ewotICAgIERpcmVjdDJEOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQot
ewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5S
YWRpYW5zKQotewotICAgIERpcmVjdDJEOjpyb3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xl
SW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBEaXJlY3QyRDo6c2NhbGUobV9wbGF0Zm9y
bUNvbnRleHQsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIERpcmVj
dDJEOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkK
LXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBEaXJlY3Qy
RDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgRGlyZWN0MkQ6OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0
aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcEJvdW5kcygpCi17Ci0gICAgcmV0dXJuIERpcmVj
dDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBidWZmZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBo
aWNzQ29udGV4dCgpOwotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoY29udGV4dCkpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0
OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0Rl
dmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0
JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYp
PiYmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUo
VklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90
IGltcGxlbWVudGVkLgotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViMDQ1MDUzMTcwM2ZiOTBlZWE3YjQyZjI0
NzRmNTkzNmJkM2JhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotY2xh
c3MgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29u
dGV4dEltcGwgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVy
VGFyZ2V0Kik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250
ZXh0JiwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLSAgICBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiwgSUQyRDFSZW5kZXJUYXJnZXQqKTsKLSAgICB2aXJ0
dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKTsKLQotICAgIGJvb2wgaGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRM
aW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRN
b2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3Ro
aW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIGJvb2wgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKChOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92
ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1l
ZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAg
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX293bmVkUGxhdGZvcm1Db250ZXh0
OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1Qy
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggMWQ4MDQyMGNmN2VjNmNkNzc1YTYyYmFlYTIy
Zjk5MDYwN2ViNGNiZC4uNmRiYmU5NjZkMzk2OTkyNTllNjVjNmY4NTBlZTZlN2MzNWNkZDkxYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKQEAgLTU2LDEyICs1NiwxMiBAQCBzdGF0aWMgdm9pZCBm
aWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCiAjaWYgUExBVEZPUk0oV0lOKQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoYm9vbCBpbmNs
dWRlKQogewotICAgIG1fZGF0YS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVk
ZTsKKyAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRX
aW5kb3dzID0gaW5jbHVkZTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnNob3VsZEluY2x1
ZGVDaGlsZFdpbmRvd3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPm1fc2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93czsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkt
Pm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93czsKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpXaW5k
b3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKEhEQyBoZGMsIGNvbnN0IEludFNpemUmIHNpemUpCkBA
IC05NSw3ICs5NSw3IEBAIEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcDo6fldpbmRvd3NC
aXRtYXAoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFw
PiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRvd3NCaXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6
ZSkKIHsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXaW5kb3dzQml0bWFwPihtX2RhdGEtPm1faGRj
LCBzaXplKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxXaW5kb3dzQml0bWFwPihkZXByZWNhdGVk
UHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMsIHNpemUpOwogfQogI2VuZGlmCiAKQEAgLTEwMyw3ICsx
MDMsNyBAQCBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYQogewogICAgIEhEQyBoZGMgPSBudWxscHRy
OwogICAgIGlmICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEtPm1faGRjOworICAgICAg
ICBoZGMgPSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiAgICAgLy8gRklYTUU6
IFNob3VsZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAg
ICAgaWYgKCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgaWYgKGRz
dFJlY3QuaXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzUsMTcgQEAgSERDIEdyYXBoaWNzQ29udGV4
dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0
QWxwaGEKICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAgICB9CiAKLSAgICBtX2Rh
dGEtPmZsdXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9o
ZGM7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZGVwcmVj
YXRlZFByaXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpoZGMoKSBjb25z
dAogewotICAgIGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7
CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuY3BwCmluZGV4IGE4ZWUzNWM1Mjc3ODEyNzNmNDdmYjVkMmY0YmNkZjg4YzQ0ZTA4
YzQuLmFkOTU1NGMwNTBhZWUyZTEwZWMxNTM1OWViOGI0ODVkMzUwY2RhNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtNzgsNyArNzgsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjcmVhdGUoYwogICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHREaXJlY3QyRD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIGlmICgh
Y29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAppbmRleCBmOGExMGQ1YzQz
NmU3MDYwODk4NzA3YmE4YjY1NDY0MWNlMmJkZjU0Li41MzM4ZmZjYzdiNTY1ZjQ4N2Q5ZTdjZmI4
ZjI2NGY3ZWExMjk2OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCiAg
ICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShibXBJbmZv
LmJtQml0cywgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0LAogICAgICAgICA4LCBi
bXBJbmZvLmJtV2lkdGhCeXRlcywgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSk7CiAgIAotICAg
IEdyYXBoaWNzQ29udGV4dCBnYyhjZ0NvbnRleHQuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4
dENHIGdjKGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0
bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAppbmRleCAyY2VjOTlk
YzcyOWZlNjVlMDg1NGVlZTcyZGZjNGVkN2FmMDk1MjNjLi5jOWViMDBjNDgyNDFmNWJjYmY1YzVl
MmQ4M2I5NDdjYjdjOTQ5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRl
IDxjYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CkBAIC03NSw3ICs3NSw3IEBAIGJv
b2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNp
emUqIHNpemUpCiAgICAgY2Fpcm9fdCogdGFyZ2V0UmVmID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsK
ICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
IGdjKEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSh0YXJnZXRSZWYpKTsK
KyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyh0YXJnZXRSZWYpOwogCiAgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CiAgICAgaWYgKHNpemUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3Bw
CmluZGV4IGQ5NjIwMzAwYWJjZWJhNDk0Y2E2NjE1MWQwMDFlNTJmMWM3ODk0NGIuLjkxMjlhMTdi
Nzc4YTI0ODBjZGYzYzBlYmZhMmQ2ZTcyNzFhNjA3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCkBAIC0yMzIsNyAr
MjMyLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJl
bmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0
Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0
KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRl
eHQpOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAgLTM0Miw3ICszNDIsNyBAQCBGbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkp
OwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQs
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7
CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250
ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKICAgICAgICAgc3Ryb2tlU3R5
bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
RHJhZ0ltYWdlSU9TLm1tCmluZGV4IDczNTkzM2YxNzIwODViOWU2NjkzYWQ0NGIyYWYxNjBiMzQw
YzRmOTkuLjM2MTYwMmU1N2IyNGZiMTZjYmUyYTdhOTlmNmU1YzgwYTMzOWZhYjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtOTQsNyArOTQsNyBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbgogCiAgICAgUmV0YWluUHRyPFVJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVyPiByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBVSUltYWdlICpp
bWFnZUNvcHkgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1h
Z2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VTaXplLmhlaWdodCk7CiAgICAgICAgIGNvbnRleHQu
c2NhbGUoeyBhZGp1c3RlZEltYWdlU2NhbGUsIC1hZGp1c3RlZEltYWdlU2NhbGUgfSk7CiAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQb2ludCgpLCB7IG9yaWVudGF0aW9u
IH0pOwpAQCAtMTM2LDcgKzEzNiw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JM
aW5rKEVsZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5nCiAKICAgICBh
dXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVy
SW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemVdKTsKICAgICBhdXRvIGltYWdl
ID0gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNv
bnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFu
c2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNj
YWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSg0KSksIENvbG9yOjp3
aGl0ZSk7CkBAIC0yMDQsNyArMjA0LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2EKIAogICAg
IGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVy
ZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgcmV0dXJu
IFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250
ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
cmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNv
bnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUg
Y29udGV4dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGFuZCBzdWdnZXN0cyB0
aGF0IHNvbWV3aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAgICAgIC8vIGRyYWcgaW5pdGlh
dGlvbiBmbG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5oZWlnaHQoKSk7CkBAIC0yMzgs
NyArMjM4LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib28KICAgICBhdXRvJiBpbWFnZSA9ICp0
ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKTsKICAgICBhdXRvIHJlbmRlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXpl
OmltYWdlLnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdldCgp
IGltYWdlV2l0aEFjdGlvbnM6WyZpbWFnZV0oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0
ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVu
ZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdl
KGltYWdlLCBGbG9hdFBvaW50KCkpOwogICAgIH1dOwogCkBAIC0yNTIsNyArMjUyLDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29u
c3QgRmxvYXRSZWN0JiBlbGVtZW4KIAogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjph
bGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VS
ZWN0LnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmltYWdlID0gW3JlbmRlciBpbWFnZVdpdGhBY3Rp
b25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyByZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyByZW5kZXJlckNvbnRl
eHQuQ0dDb250ZXh0IH07CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIENHUmVjdEdldEhl
aWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAg
ICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChzd2F0Y2gsIGNvbG9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKaW5kZXgg
MDlmYWVlZWU5ZWFjYjUwMzJmMWE3OWQ3M2JhMDE4YTliNjU1YmQyYi4uNWVjMzhlNjQxYmQ2ZWQw
M2FkMDUyNTYxZDA0YzljZGFmZGZiNDEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgorI2luY2x1
ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKaW5kZXggZDAyMmU3
ZTE5MWRhYzgxNjM2ZDUyOTUxZDQwZDUzYjg4NzNmNTUwOS4uNDQ1MDFhYjEzOWI4ZWVlZTkxNGNl
NmQ4Njc0MTdiMmU5ZWM5MjQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0RyYWdJbWFnZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdJbWFnZVdpbi5jcHAKQEAgLTE4Niw3ICsxODYsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yTGluayhFbGVtZW50JiwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgaW5MYWJlbCwg
VAogICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCiAgICAgOjpTZWxlY3RPYmplY3Qod29ya2lu
Z0RDLmdldCgpLCBpbWFnZS5nZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY29u
dGV4dFJlZik7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChjb250ZXh0UmVmKTsKICAg
ICAvLyBPbiBNYWMgYWxwaGEgaXMgezAuNywgMC43LCAwLjcsIDAuOH0sIGhvd2V2ZXIgd2UgY2Fu
J3QgY29udHJvbCBhbHBoYQogICAgIC8vIGZvciBkcmFnIGltYWdlcyBvbiB3aW4sIHNvIHdlIHVz
ZSAxCiAgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENvbG9yID0gU1JHQkE8dWludDhfdD4g
eyAxNDAsIDE0MCwgMTQwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29u
dGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggZGE5NTJiZjZiM2NmYTJmYjZjMDlhZjBkMmQ2
OWY0NjNkNzZhZWMyNi4uNGMwZjljOTRkNjNjZmYyZGRmMTllNGE3YWFjYjRhZTUxYmM4NjRlNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNr
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVj
a2VyLmNwcApAQCAtMzgsNyArMzgsNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1
YWxpZmllc0ZvckNvbnRlbnRmdWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFt
ZVZpZXcuc2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdM
YXllcnMpOwogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChHcmFwaGljc0NvbnRleHQ6OlBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKKyAgICBHcmFw
aGljc0NvbnRleHROdWxsIGNoZWNrZXJDb250ZXh0KEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50
SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFt
ZVZpZXcucGFpbnQoY2hlY2tlckNvbnRleHQsIGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3Vt
ZW50UmVjdCgpKTsKIAogICAgIGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRF
bnRpcmVDb250ZW50cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAppbmRleCA4ZWZmYzA5MjI2ZTNkOThlZGNmM2JkNGI4MTQwNWU5YjZi
MzYzM2Q1Li40N2I0Y2RkNDI3ZmQ2ZjgzZDA0YmFiODg1YjRhYWVkOGQ1MmMzOWI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAg
LTY5MCwxMCArNjkwLDcgQEAgc3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5k
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgYm94U2hh
ZG93ID0gYm94U2hhZG93LT5uZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KGJv
eFNoYWRvdy0+eCgpLCBib3hTaGFkb3ctPnkoKSk7Ci0gICAgaWYgKCFib3hTaGFkb3ctPmlzV2Vi
a2l0Qm94U2hhZG93KCkpCi0gICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
Ym94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94
U2hhZG93LT5jb2xvcigpKSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNo
YWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSkpOworICAgIGNvbnRleHQuc2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29sb3JCeUFwcGx5
aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6
RGVmYXVsdCk7CiB9CiAKIEludGVycG9sYXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVsT2JqZWN0
OjpjaG9vc2VJbnRlcnBvbGF0aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIElt
YWdlJiBpbWFnZSwgY29uc3Qgdm9pZCogbGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNpemUpCkBA
IC0yNDM5LDEwICsyNDM2LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hT
aGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAg
IEZsb2F0UG9pbnQgc25hcHBlZFNoYWRvd09yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRUb0Rldmlj
ZVBpeGVsKHNoYWRvd1JlY3RPcmlnaW4ueCgpLCBkZXZpY2VTY2FsZUZhY3RvciksIHJvdW5kVG9E
ZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAg
ICAgICAgICAgIEZsb2F0U2l6ZSBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gc25hcHBlZFNoYWRvd09y
aWdpbiAtIHBpeGVsU25hcHBlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAg
ICAgICBpZiAoc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpKQotICAgICAgICAgICAgICAgIGNv
bnRleHQuc2V0TGVnYWN5U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQu
c2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
OworICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAg
ICAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0
aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3NhcnkgdG8gY2xpcCBpdCBvdXQuIEhvd2V2
ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTI1NDMsMTEgKzI1MzcsNyBAQCB2b2lkIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNv
bnN0IExheW91dFJlYwogICAgICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQp
OwogICAgICAgICAgICAgc2hhZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgICAg
ICBpZiAoc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQuc2V0TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
cik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLQorICAgICAgICAgICAg
Y29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9y
LCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kg
OiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUocGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xl
UmVjdCwgZmlsbENvbG9yKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggZmI2MWU1NGU0YThlOTlhYzY2
OTRmN2MzNGQwZmVlOGYxZDAyNjk0Zi4uMDk4MmE0ZDUyMGE4ZjQxZmNiZDVkYjcxYmMwNjQ3NWRh
MWVjMzEyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKQEAgLTE3ODksNyArMTc4OSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1
cGRhdGVFdmVudFJlZ2lvbigpCiAgICAgfTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25G
b3JMYXllciA9IFsmXShHcmFwaGljc0xheWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChudWxscHRyKTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0TnVsbCBudWxsQ29udGV4dChHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlv
blJlYXNvbnM6Ok5vbmUpOwogICAgICAgICBFdmVudFJlZ2lvbiBldmVudFJlZ2lvbjsKICNpZiBF
TkFCTEUoRURJVEFCTEVfUkVHSU9OKQogICAgICAgICBpZiAocmVuZGVyZXIoKS5wYWdlKCkuc2hv
dWxkQnVpbGRFZGl0YWJsZVJlZ2lvbigpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQv
Y2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCmluZGV4IDljZWE1ZmEzNGM0YTZjMDg3ZmRl
MjhjMjUyYTMxZjE1NThkZTYxZmYuLjE2MTc3YzAwMDcxZWU4MjZlODA5NmYzZWRmOWI4MmJiOGM4
NTBmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJp
dG1hcENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVC
aXRtYXBDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1h
cEltYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb09wZXJhdGlvbnMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJv
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KIApAQCAtNjAsNyArNjAsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpCiB7CiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2UgPSBjcmVhdGVDYWly
b1N1cmZhY2UoKTsKICAgICBSZWZQdHI8Y2Fpcm9fdD4gYml0bWFwQ29udGV4dCA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGJpdG1h
cENvbnRleHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRD
YWlybz4oYml0bWFwQ29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpw
YWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJl
YWJsZUJpdG1hcENHLmNwcAppbmRleCAwNTBiMDQ5ZTg1YTAzNzU5MjhiMGQ2NDdmMWIwY2FjNGVl
MTFiYjYwLi43NGQyNDU3NTc5ZDM4MWZlZTEwZjNlYTU0MTY4YjhiOWQ1MGJmOTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCkBAIC0xMDcsNyAr
MTA3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShiaXRt
YXBDb250ZXh0LmdldCgpLCAwLCBtX3NpemUuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxl
Q1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDEsIC0xKTsKIAotICAgIHJldHVybiBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oYml0bWFwQ29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VV
bmlxdWU8R3JhcGhpY3NDb250ZXh0Q0c+KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lk
IFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmIHNvdXJjZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3Qy
RC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQu
Y3BwCmluZGV4IDA4ZjZmYjUyYzgwYzM3Y2VkZDE2ZmUwNzAyYTU0YmJiNTg4ZDdlZjMuLmNkMTU4
ZjBjYjY0NzZiZDI0OGY5N2MwMDY5NjU5YjRmMWJmNjRlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcApAQCAtMzQsNyAr
MzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRElCUGl4ZWxEYXRhLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXJlY3QyRE9wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRp
bGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxkMmQxXzEuaD4KQEAgLTEwNCw3ICsxMDQsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZUdyYXBoaWNzQ29udGV4dCgpCiAgICAgaWYgKCFzdXJmYWNlQ29udGV4dCkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShzdXJmYWNlQ29udGV4dC5n
ZXQoKSkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihz
dXJmYWNlQ29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJv
L0JhY2tpbmdTdG9yZUNhaXJvLmNwcAppbmRleCBkYzBhNzBiODgyNGFmZGM3ZWMzZGQxZjY5ZjRk
OWI1MTk0MjkyNGY2Li40Zjc4YjVlYjVjZGI1MWYyZWJmY2FmZjY0ZWNkMTliMWU2MzBhZDlmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWly
by5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTg0LDcgKzg0LDcg
QEAgdm9pZCBCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKFNoYXJlYWJsZUJpdG1hcCog
Yml0bWFwLCBjb25zdCBVcGRhdGVJbmZvJgogICAgIC8vIFBhaW50IGFsbCB1cGRhdGUgcmVjdHMu
CiAgICAgSW50UG9pbnQgdXBkYXRlUmVjdExvY2F0aW9uID0gdXBkYXRlSW5mby51cGRhdGVSZWN0
Qm91bmRzLmxvY2F0aW9uKCk7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNhaXJvQ29udGV4dCA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShtX2JhY2tlbmQtPnN1cmZhY2UoKSkpOwotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVG
YWN0b3J5KGNhaXJvQ29udGV4dC5nZXQoKSkpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdy
YXBoaWNzQ29udGV4dChjYWlyb0NvbnRleHQuZ2V0KCkpOwogCiAgICAgLy8gV2hlbiBtX3dlYlBh
Z2VQcm94eS5kcmF3c0JhY2tncm91bmQoKSBpcyBmYWxzZSwgYml0bWFwIGNvbnRhaW5zIHRyYW5z
cGFyZW50IHBhcnRzIGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgd2VicGFnZS4KICAgICAvLyBGb3Ig
c3VjaCBjYXNlLCBiaXRtYXAgbXVzdCBiZSBkcmF3biB1c2luZyBDb21wb3NpdGVPcGVyYXRvcjo6
Q29weSB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIHN1cmZhY2UuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KaW5kZXggZjE4YmE4ZjAxYjI2ZGUzZmQz
Y2RmYjAyODEyODVjZjBkNGE2NjY5Zi4uZDAzZTY0MzRiMWFiMmZiZDVlNTU0MzI5NjhiM2U5ZjU2
NTkyYmFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRp
bmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5tbQpAQCAtMzAsMTUgKzMwLDE2IEBACiAKICNpbXBvcnQgIkFQSURhdGEuaCIKICNpbXBvcnQg
IkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCiAjaW1wb3J0ICJQcmludElu
Zm8uaCIKICNpbXBvcnQgIlNoYXJlYWJsZUJpdG1hcC5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5
LmgiCiAjaW1wb3J0IDxRdWFydHovUXVhcnR6Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9Mb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmg+CiAjaW1wb3J0IDx3dGYv
UnVuTG9vcC5oPgogCisjaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgorCiBOU1N0cmluZyAqIGNv
bnN0IFdlYktpdE9yaWdpbmFsVG9wUHJpbnRpbmdNYXJnaW5LZXkgPSBAIldlYktpdE9yaWdpbmFs
VG9wTWFyZ2luIjsKIE5TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxCb3R0b21QcmludGlu
Z01hcmdpbktleSA9IEAiV2ViS2l0T3JpZ2luYWxCb3R0b21NYXJnaW4iOwogCkBAIC01NTUsNyAr
NTU2LDcgQEAgLSAodm9pZClfZHJhd1ByZXZpZXc6KE5TUmVjdCluc1JlY3QKIAogICAgIFJlZlB0
cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gcGFnZVByZXZpZXdJdGVyYXRvci0+
dmFsdWU7CiAKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKKyAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRyBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
IENHQ29udGV4dF0pOwogICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihjb250ZXh0KTsKIAogICAgIGJpdG1hcC0+cGFpbnQoY29udGV4dCwgX3dlYkZyYW1l
LT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCksIFdlYkNvcmU6OkludFBvaW50KG5zUmVjdC5v
cmlnaW4pLCBiaXRtYXAtPmJvdW5kcygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCmluZGV4IGFiZGFhNmViMmM1N2RlM2Vl
NjZjMmMzZmYxNjRhMzM0YjEyNDE1ZDkuLjkwYjQyNGFjZTI5ODM3ZDA1Yjk3MDZkMDA0ODVkOTVm
N2UxZTJkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5n
U3RvcmVEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
QmFja2luZ1N0b3JlQmFja2VuZERpcmVjdDJESW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ09N
UHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDNkMTFfMS5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBs
dWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW0KaW5kZXggZjIzNDhmODUyNGU5NjNmM2I4MjU4NGI0NWEyN2E4Mjc2YjQ1MGI3Yi4uYTVmMDMw
MGVhNGU2NjVhNDc2MDI2OTI2MzNlOGY5OWYzMTU4YzUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC0zNSw3ICszNSw2IEBA
CiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQREZBbm5vdGF0aW9uVGV4dFdpZGdldERl
dGFpbHMuaCIKICNpbXBvcnQgIlBERkNvbnRleHRNZW51LmgiCi0jaW1wb3J0ICJQREZLaXRTb2Z0
TGluay5oIgogI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyU1BJLmgiCiAjaW1wb3J0ICJQREZQ
bHVnaW5Bbm5vdGF0aW9uLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5QYXNzd29yZEZpZWxkLmgiCkBA
IC03Miw3ICs3MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgotI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEJvZHlFbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVu
dC5oPgpAQCAtMTA2LDYgKzEwNSw4IEBACiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2Eu
aD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAorI2ltcG9ydCAiUERGS2l0U29m
dExpbmsuaCIKKwogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQSVMpCiBAaW50ZXJmYWNlIFBE
RkRvY3VtZW50ICgpCiAtKGluc3RhbmNldHlwZSlpbml0V2l0aFByb3ZpZGVyOihDR0RhdGFQcm92
aWRlclJlZilkYXRhUHJvdmlkZXI7CkBAIC0xOTQ0LDcgKzE5NDUsNyBAQCB2b2lkIFBERlBsdWdp
bjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXllciAqbGF5ZXIsIENHQ29udGV4
dFJlZiBjb250ZQogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UgbG9jYWxBcHBlYXJh
bmNlKHBhZ2UtPnVzZURhcmtBcHBlYXJhbmNlKCkpOwogI2VuZGlmCiAKLSAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NB
TGF5ZXJDb250ZXh0KHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDE2MjUzYzg4NzA3MzA3NzgwMDBk
ODUzZDRkZGZkMzIyNzlkODE4OWUuLmY3YmRiOTU3MDRkYzQ1NjAyMzU5MjYzODFkZjYwNGYwMjgw
ZDAxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29h
L1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTQyLDYgKzQyLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUv
RXZlbnROYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0NvbnRyb2xsZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSFRNTE9MaXN0RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MVUxpc3RFbGVtZW50
Lmg+CkBAIC0zMTcsNyArMzE4LDcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gV2ViUGFnZTo6cGRm
U25hcHNob3RBdFNpemUoSW50UmVjdCByZWN0LCBJbnRTaXplIGJpdG1hcFNpemUKIAogICAgICAg
ICBDR1BERkNvbnRleHRCZWdpblBhZ2UocGRmQ29udGV4dC5nZXQoKSwgZGljdGlvbmFyeSk7CiAK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0
KCkgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0IHsgcGRmQ29u
dGV4dC5nZXQoKSB9OwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsK
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgwLCAtYml0bWFwU2l6ZS5oZWlnaHQo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3Jk
aW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCA4NzE2ZGY0OWJkMTkyZDAxMDUxMTZiNmJk
YjBhYjY5NjMxODc3YmI4Li5lOTk0NTdjNzQyMzIxYjUzZTFmNmVhNWRjOTBkZGVhODY1MjNlYjg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJl
YUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCkBAIC00Myw3ICs0Myw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgogCiAjaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaD4KICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDNkMTFfMS5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBiMTdhNzRhNDM2
YWUzZGU0ZmI1MmY4ZjU1M2NmODExNTgwN2QwOTA3Li4zZmVlN2Y1ODdkZWIzZDU0MmZjZmRlOTky
ZTk0NjUwODA1MGIyN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcApAQCAtMzcyLDYgKzM3MiwxMSBAQAogI2luY2x1ZGUgIldlYlByZWZlcmVuY2Vz
RGVmYXVsdFZhbHVlc0lPUy5oIgogI2VuZGlmCiAKKyNpZiBVU0UoQ0cpCisvLyBCdXQgcmVhbGx5
IHByb2JhYmx5IHdlIHNob3VsZCBtb3ZlIHRoZSBDRy1zcGVjaWZpYyBQREYgcGFpbnRpbmcgY29k
ZSBvdXQgb2YgV2ViUGFnZS5jcHAuCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRD
Ry5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTM4OCw3ICs1MzkzLDcgQEAgdm9pZCBXZWJQ
YWdlOjpkcmF3UGFnZXNUb1BERkltcGwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIGNvbnN0IFBy
aW50SW5mbyYgcHJpbnQKICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBwYWdlSW5mbyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7CiAgICAgICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQuZ2V0
KCksIHBhZ2VJbmZvLmdldCgpKTsKIAotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
dHgoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY3R4
KGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUoMSwg
LTEpKTsKICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1tX3ByaW50Q29udGV4dC0+
cGFnZVJlY3QocGFnZSkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIG1fcHJpbnRDb250ZXh0
LT5zcG9vbFBhZ2UoY3R4LCBwYWdlLCBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSkud2lk
dGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCBkZTFmMDZkZDhhZGE4ZmRmZmM1
YTA5ODczOWM0YWVhYjliYjMzYTg1Li4zOTliMWU4MGEzZDg0ZDFkMGQzMDA5NmFjNDQ2NTBhYzk4
ZjU4MTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
V2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRl
eHRDYWlyby5oPgpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgV2ViUHJpbnRPcGVyYXRpb25HdGs6
OnJlbmRlclBhZ2UoaW50IHBhZ2VOdW1iZXIpCiAgICAgcHJlcGFyZUNvbnRleHRUb0RyYXcoKTsK
IAogICAgIGRvdWJsZSBwYWdlV2lkdGggPSBndGtfcGFnZV9zZXR1cF9nZXRfcGFnZV93aWR0aCht
X3BhZ2VTZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCkgKiBtX3hEUEk7Ci0gICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9jYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQobV9jYWlyb0NvbnRleHQu
Z2V0KCkpOwogICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoZ3JhcGhpY3NDb250ZXh0LCBw
YWdlTnVtYmVyLCBwYWdlV2lkdGggLyBtX3NjYWxlKTsKIAogICAgIGNhaXJvX3Jlc3RvcmUobV9j
YWlyb0NvbnRleHQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU0MWM0YzA0ZjJkNzVkMDZiZWUwODBlYmNmZTY2
YjBhNDVmYmVmNi4uOTI4YWU3ZDUxZTNmMGI3ZDkxMDIwYzdkYTI4OGVkZTI0NWMzODU5NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
CkBAIC0zOSw3ICszOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HbHlwaFBhZ2UuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1BhZ2VDb25zb2xlQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29u
dGV4dC5oPgpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKHZvaWQpcHJpbnRUb0NHQ29udGV4dDooQ0dD
b250ZXh0UmVmKWNnQ29udGV4dCBwYWdlV2lkdGg6KGZsb2F0KXBhZ2VXaWR0aEluUGl4CiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHQoY2dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGlj
c0NvbnRleHQoY2dDb250ZXh0KTsKICAgICBQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNXaXRo
Qm91bmRhcmllcygqY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6ZShwYWdlV2lk
dGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCmluZGV4IDJiYTAw
NmRkM2U3YjJhZmM1MGVmZjI4NDUzMjBkOTY1MDViYTcxYmEuLjc4MzI1NjE5YzFhYzc3NDRlODhm
ZDQ5MjUzNmM5NTdhMDQyNDRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1w
b3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJhcy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgpAQCAtNzgsNyArNzgsNyBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9pbnQ6
KE5TUG9pbnQpcG9pbnQgZm9udDooTlNGb250ICopZm9udCB0ZXh0Q29sb3I6KE5TQ29sb3IgKgog
CiAgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdOwogICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gW25z
Q29udGV4dCBDR0NvbnRleHRdOwotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0IHsgY2dDb250ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29u
dGV4dCB7IGNnQ29udGV4dCB9OwogCiAgICAgICAgIC8vIFdlYkNvcmUgcmVxdWlyZXMgYSBmbGlw
cGVkIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGJvb2wgZmxpcHBlZCA9IFtuc0NvbnRleHQg
aXNGbGlwcGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3Bl
Y3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
Ykluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQppbmRleCBkMzk3M2UyOTQ0NTllY2Yx
ZGJkZWY0NDllZjJjZmQyY2FjYjhlZDM1Li45NTBhZThlMDBkMzBhNDUyMDlmOWFkZGEzYzJiMzNm
MTMxMDAyMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0
b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW1wb3J0ICJXZWJOb2RlSGlnaGxpZ2h0Vmlldy5oIgogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdo
dC5oIgogCi0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogCkBAIC05OCw3ICs5OCw3IEBA
IC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAKICAgICAgICAgQVNTRVJUKFtbTlNHcmFw
aGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwogCi0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENH
Q29udGV4dF0pOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOwogICAgICAgICBbX3dlYk5vZGVI
aWdobGlnaHQgaW5zcGVjdG9yQ29udHJvbGxlcl0tPmRyYXdIaWdobGlnaHQoY29udGV4dCk7CiAg
ICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZjM1ZDdi
ZDVhMjM1MWIyYjAxYjY4YmIxZTIxNmY3NDU3ZTQxOGE3MS4uOTViZGEzOTBjYTY5YmE2Yjk2MjBm
NTFiZWU2OTZiMjEyMzlhYjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCkBAIC04MSw3ICs4MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9h
ZGVyU3RhdGVNYWNoaW5lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxO
YW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtNjEzLDcgKzYxMyw3
IEBAIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c09ubHk6KEJPT0wpY29u
dGVudHNPbmx5CiAjZWxzZQogICAgIENHQ29udGV4dFJlZiBjdHggPSBXS0dldEN1cnJlbnRHcmFw
aGljc0NvbnRleHQoKTsKICNlbmRpZgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KGN0eCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChjdHgpOwog
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBj
b3JlKHNlbGYpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDdjNDM2MWEzYWNhZDEzMzQwMTgyNzg4MTNmYjNiNjA1Y2Q2ZjZlZjAuLjE3ZWQyZjRh
OWY4YmU4ZDYxMGZiMDQ5MzJiN2U5OGMzYjc2YjkxOTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wNS0yNCAg
VGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFs
aXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RU
ZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIxLTA1LTI0
ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJl
dmlld2VkLCByZXZlcnRpbmcgcjI3Nzk0MC4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKaW5kZXggMTJi
OTk2OWM2MzRlYjc0OTUyOGZjMTY4ZTE2NTM0ZWQ3ZjY0OGM4MC4uMzVmZGEzMjkxNzk0ZGUxYjE5
MWM4NTQ2NzA5ZGZjMzRiNzBlNjdhNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYWRp
ZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogCiBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSSB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ4LDcgKzQ5
LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBSZXBsYXlXaXRoTWlzc2luZ1Jlc291cmNlKQog
CiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFt
ZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4
LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5n
ZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkg
fTsKIAogICAgIGF1dG8gaW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gUmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwogCkBAIC0xMTIsNyArMTEzLDcgQEAgVEVTVChEaXNwbGF5
TGlzdFRlc3RzLCBPdXRPZkxpbmVJdGVtRGVjb2RpbmdGYWlsdXJlKQogCiAgICAgYXV0byBjb2xv
clNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
U1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdp
ZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdy
YXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIERpc3Bs
YXlMaXN0IG9yaWdpbmFsTGlzdDsKICAgICBXcml0aW5nQ2xpZW50IHdyaXRlcjsKQEAgLTE0Myw3
ICsxNDQsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIElubGluZUl0ZW1WYWxpZGF0aW9uRmFp
bHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRl
V2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRleHRXaWR0aCwgY29udGV4dEhl
aWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0Nv
bnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0
LmdldCgpIH07CiAKICAgICBhdXRvIHJ1blRlc3RXaXRoSW52YWxpZElkZW50aWZpZXIgPSBbJl0o
Rmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGlkZW50
aWZpZXIuaXNWYWxpZCgpKTsK
</data>
<flag name="commit-queue"
          id="450819"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429587</attachid>
            <date>2021-05-24 16:31:50 -0700</date>
            <delta_ts>2021-05-24 17:26:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524163149.patch</filename>
            <type>text/plain</type>
            <size>365782</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjIyMThjNGE5NzA0
ZDljMGJhNDM3MTM4Y2RiYjE1ZGRiOWY1My4uYzI4ZDk4ODc4MWUyZmIyYWIwMDkzYTRmOTY1ZjYx
M2YxMDhmMGY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0
b3AgdXNpbmcgVW5jaGVja2VkTG9jayBpbiBTaGFkb3dCbHVyJ3MgU2NyYXRjaEJ1ZmZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCA5YmQzNmQ3MTg3NGIzY2FiMjcxMjQwMjQzMmU3ZjNlNTk1N2Y1N2M1Li4yZjVkZjFl
NTE5NTEzNTk2OWNhZmUzOTdmNTAwYjQ4NjJmNDAwZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCk6CisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmll
dyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVE
aXJlY3QyRC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNv
bnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnJlbmRlclBhZ2UpOgor
CiAyMDIxLTA1LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Nzk0MC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwppbmRleCA1OWEyMzY0MmI1MDYyNjVlZmZlMzU0NWY0NjVhN2Y5MDc5ZTE5ZTQ3Li5k
MzE0MGQyZjhiOGEzNjk2NDA5MDA3ZGY0ZTcxMjZmNDZjNTkxNmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0Nv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJpbnRUb0NH
Q29udGV4dDpwYWdlV2lkdGg6cGFnZUhlaWdodDpdKToKKyAgICAgICAgKiBNaXNjL1dlYktpdE5T
U3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdBdFBvaW50OmZv
bnQ6dGV4dENvbG9yOl0pOgorICAgICAgICAqIFdlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodFZpZXcgZHJhd1JlY3Q6XSk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYXdS
ZWN0OmNvbnRlbnRzT25seTpdKToKKwogMjAyMS0wNS0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzc5
NDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAwOWJmMDI0MDc2NmM3OGE3OTA1NTlhMGY0MTU4NzZh
OGI2MGUyMzkzLi5lMDQ1OTgxYWZhZGRmZWU4NzJkZmRhZThmYjE1ZTljYmEyNzlkN2IyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEyMzgsNyArMTIzOCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1GVFcuY21ha2UKaW5kZXggNGNjMzkxOTkzMTU0NzNkOWFkMzE3MmI2YWFjMWI1OWJhOGJmMTkx
Yy4uNzExNDdhNGUyY2QxNWVlMDFiZjFjMDIxZWVjYjY0NTZiZGVjODAwOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1GVFcuY21ha2UKQEAgLTQzLDcgKzQzLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ2VuZXJpYy9LZXllZEVuY29kZXJHZW5lcmljLmNwcAogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dEltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNw
bGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAg
LTcxLDcgKzcwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNv
bldpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCkBAIC0xODksNyArMTg3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRl
VXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xs
ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVu
dC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA5N2NlNTQ3MzIxZGMzN2NiZDI1NzU4ZjRmYTYzOTBmNzQxMmRhMzBmLi5h
NWExYWZiMzVkYzk1OGJmNDUzOTVlMDU5MTBmMzUzNGIwYzY1ZjYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTk4Miw3ICsxOTgyLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dElt
cGwuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXJVcGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGZiNzRlZjJlNGM5MmExMTIzOGVjODhmYmEwZDlmMDM3
Y2Q1NTRhNmMuLmI0ZDkwOTRmM2ZjMjJmMGNjYWJjMDEzMGYzNThiOGFjZjJlOWFhNTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTg2MSw3ICs4NjEsNiBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyogTWVkaWFLZXlz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJG
NzMzMURCRkRDMEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQkyRDlCRjc0NzFE
QkZEQzQ5MDA3QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMwRjAwN0E3RDk5
IC8qIE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMxNEZGMUNCRjAw
QkEwRkY3IC8qIGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGluZWFyU1JHQi5p
Y2MgKi87IH07Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJ
bXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAw
MTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJEQUYzNDNEMUVBN0UwRjEw
MDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3Rh
bnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJGRTk3MDBDRkNCQUIgLyogTW9k
ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQzhE
Mzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21w
b3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5l
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYw
ODYsOCArNjA4NSw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xV
bmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RUQx
QkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBNZW51Q29jb2EubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUNDRDcwMDQ1QTUwNyAvKiBTZWFy
Y2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVDb2NvYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0NvbnRleHRJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjQwMUZBRDg4MTAwMDUz
MUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAzQzA3
MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5RDA3
MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzAwOCw4ICsyNzAwNSw2IEBACiAJCQkJ
N0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5o
ICovLAogCQkJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3Jh
cGhpY3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4
N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYx
MkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJB
MjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkw
MDUxRDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0zMjY5NSw3ICszMjY5MCw2
IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdMSU9T
dXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1MDAw
OUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJCTMx
OUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFnZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGlj
c0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBFNDIw
RjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rp
c3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nz
cy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDAwOTc5ZDAwOWI4NTU2M2U1
MjdmODI4MWZlNzJhOWQxNzk5MzBhZTMuLmQ0NjhmYmMwZjc2YWIwYjJkYjIyMmFkNjBhY2NkZTRj
NjY1ZGYyMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3Mv
RGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMTI5OCwxMCArMTI5OCw3IEBAIHZv
aWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYg
cGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93UmVjdE9yaWdpbiA9IGZp
bGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0OwogICAgICAgICBhdXRvIGFk
anVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFkanVzdGVkRmlsbFJlY3Qu
cmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRv
dygpKQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93
KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93
KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKKyAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgIC8vIElm
IHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93
ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQxMiwxMSArMTQwOSw3IEBAIHZvaWQgQm94
RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5nQ29udGV4dCYgcGFpbnRp
bmdDb250ZXh0LCBTaGFkCiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnRyYW5zbGF0
ZShleHRyYU9mZnNldCk7CiAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAot
ICAgICAgICBpZiAoc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWlu
dGluZ0NvbnRleHQuY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0KKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hhZG93Lmlz
V2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRp
dXNNb2RlOjpEZWZhdWx0KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmls
bENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDRmNDZmNjU5MDk1
OWExZTRjZGRjZGNjMzc1MjgwNTE2ZDQyY2ExZDEuLmU3YzAyODVmNzU1NDU0ODAzYjE0MGM5MjBi
ZDRiMmFmZGZlNjFmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0yNTIsNyArMjUyLDcg
QEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc0FjY2VsZXJhdGVkKCkgY29u
c3QKIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQogICAgIGF1dG8q
IGNvbnRleHQgPSBjYW52YXNCYXNlKCkuZXhpc3RpbmdEcmF3aW5nQ29udGV4dCgpOwotICAgIHJl
dHVybiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250ZXh0KCk7CisgICAgcmV0
dXJuIGNvbnRleHQgJiYgY29udGV4dC0+cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTExMjAs
NyArMTEyMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xpcEludGVy
bmFsKGNvbnN0IFBhdGgmIHBhdGgsIENhbnZhc0ZpbGxSdWxlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHJlYWxpemVTYXZlcygpOwotICAgIGMtPmNhbnZhc0NsaXAocGF0aCwgdG9XaW5kUnVsZSh3
aW5kaW5nUnVsZSkpOworICAgIGMtPmNsaXBQYXRoKHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1
bGUpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpiZWdpbkNvbXBv
c2l0ZUxheWVyKCkKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9h
CiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgY29udGV4dC0+c2F2ZSgp
OwogICAgICAgICBzYXZlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQtPnNldExlZ2FjeVNoYWRv
dyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAgICBjb250
ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogICAgIH0KICAgICBpZiAoc3RhdGUoKS5nbG9iYWxB
bHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEzNzksOSArMTM3OSw5IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlTaGFkb3coKQogICAgIGlm
IChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdpZHRoID0gc3RhdGUoKS5z
aGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0ID0gc3RhdGUoKS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Ip
OworICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUo
KS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCks
IDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0
U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5KTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzaG91bGREcmF3
U2hhZG93cygpIGNvbnN0CkBAIC0yMDMwLDcgKzIwMzAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRl
cm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVy
bjo6Y3JlYXRlKG5hdGl2ZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHJlcGVhdFgsIHJlcGVhdFks
IG9yaWdpbkNsZWFuKSB9OwogI2VuZGlmCiAKLSAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSAhZHJh
d2luZ0NvbnRleHQoKSB8fCBkcmF3aW5nQ29udGV4dCgpLT5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5n
Q29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSB2aWRlb0VsZW1lbnQuY3JlYXRlQnVmZmVyRm9yUGFp
bnRpbmcoc2l6ZSh2aWRlb0VsZW1lbnQpLCByZW5kZXJpbmdNb2RlLCBjb2xvclNwYWNlKCksIHBp
eGVsRm9ybWF0KCkpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwpAQCAtMjQ3Myw3ICsyNDczLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBmbG8KIAogICAg
ICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAgICAgICAgYy0+c2V0TGVn
YWN5U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAg
ICAgICAgICBjLT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0Nv
bG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogCiAgICAgICAgICAgICBpZiAoZmlsbCkK
ICAgICAgICAgICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAppbmRleCA2NTgzYzM2OWZkYTFjMDZkOTQzNzVjY2RjMjNmYzhiNzIy
MzBiZjVhLi4zMTcyZTdmNzlmNjBhMTQ4M2FmMDhmZjhmMjYzNmJmNzI5YTRjYzMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC00MTg3LDEyICs0MTg3LDEyIEBAIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVDb250cm9sVGludHMoKQogICAgICAgICBwYWdlLT5zZXRJc0NvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3RzKGlzQ3VycmVudGx5Q291bnRpbmdSZWxldmFudFJlcGFpbnRl
ZE9iamVjdCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0
aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHBhaW50SW52YWxp
ZGF0aW9uUmVhc29ucykKK3ZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0
aW9uKEdyYXBoaWNzQ29udGV4dE51bGw6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCiB7CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIGxh
eW91dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHBh
aW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgR3JhcGhpY3NDb250ZXh0TnVsbCBjb250ZXh0
KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IGNvbnN1bHQgcGFpbnRzRW50aXJlQ29udGVudHMoKS4KICAgICAg
ICAgcGFpbnRDb250ZW50cyhjb250ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoTGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCkpOwpAQCAtNDc0Miw3ICs0NzQyLDcgQEAgdm9pZCBGcmFtZVZpZXc6
OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKGZsb2F0ICpuZXdCb3R0b20sIGZsb2F0IG9sZFRv
cCwgZmxvYXQKIAogICAgIH0KICAgICAvLyBVc2UgYSBjb250ZXh0IHdpdGggcGFpbnRpbmcgZGlz
YWJsZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIEdyYXBoaWNzQ29udGV4dE51bGwgY29u
dGV4dChHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUp
OwogICAgIHJlbmRlclZpZXctPnNldFRydW5jYXRlZEF0KHN0YXRpY19jYXN0PGludD4oZmxvb3Jm
KG9sZEJvdHRvbSkpKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCgwLCBzdGF0aWNfY2FzdDxpbnQ+
KGZsb29yZihvbGRUb3ApKSwgcmVuZGVyVmlldy0+bGF5b3V0T3ZlcmZsb3dSZWN0KCkubWF4WCgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpKTsKICAgICByZW5k
ZXJWaWV3LT5zZXRQcmludFJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmlu
ZGV4IDllZDFjNzIzZTk5YzJhMmNhNjE5Y2M4ODVlZTJhY2E1NjY2ZjlhMGYuLjgwZDM2ZjJjZjdj
MTdhMTM0ZDljYTQ4NWUzNzM0NThlOWNiNDgyZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApA
QCAtNjY2LDkgKzY2Niw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0TnVsbDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0TnVsbDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggODk0YjVj
Y2U0MjExZGIxZGZlMmQ0NmNhZjBmNjVjNDQyMWE1MWE0ZC4uZGE4Mzc3OWZmY2UwNmM5NWI5Njkx
ZGU1ZDk0NmRjYmYxZjQwZTM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKQEAgLTgyLDExICs4MSw2IEBAIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGlj
c0NvbnRleHRTdGF0ZSgpCiAgICAgLCBzaG91bGRTbW9vdGhGb250cyh0cnVlKQogICAgICwgc2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKHRydWUpCiAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhmYWxzZSkKLSNpZiBVU0UoQ0cpCi0gICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3Rs
eSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAz
NDQyPiksCi0gICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBiZWhhdmlv
ciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzKGZhbHNlKQotI2VuZGlmCiAgICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkK
IHsKIH0KQEAgLTE2MCwxMCArMTU0LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFu
Z2U6OmFjY3VtdWxhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHCiAgICAg
fQogCiAgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBEZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cy4KICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dP
ZmZzZXQ7CiAgICAgICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7CiAg
ICAgICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICAgICAg
bV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9
CiAKICAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkpCkBAIC0yMjksMTQgKzIyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0ln
bm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwogCi0gICAgaWYgKG1f
Y2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
IHsKLSNpZiBVU0UoQ0cpCi0gICAgICAgIGlmIChtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRp
dXMpCi0gICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX3N0YXRlLnNoYWRvd09m
ZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICAgICAg
ZWxzZQotI2VuZGlmCi0gICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRv
d09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICB9
CisgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
YWRvd0NoYW5nZSkpCisgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zm
c2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hh
ZG93UmFkaXVzTW9kZSk7CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKICAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VUaGlja25lc3MobV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwpAQCAtMzAyLDkgKzI5
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ct
Ymx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hh
ZG93LW9mZnNldCIsIG1fc3RhdGUuc2hhZG93T2Zmc2V0KTsKLSNpZiBVU0UoQ0cpCi0gICAgICAg
IHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cyk7Ci0jZW5kaWYKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBA
IC0zNjEsNTUgKzM0NywxOSBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYgc3RhdGVDaAogICAgIHJldHVybiB0
czsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKLSAgICA6IG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zKHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKLXsKLX0KLQotR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0KQotewotICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KGNvbnN0IEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5JiBmYWN0b3J5RnVuY3Rpb24pCi0gICAgOiBtX2ltcGwoZmFj
dG9yeUZ1bmN0aW9uKCp0aGlzKSkKLXsKLX0KLQogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3ND
b250ZXh0KCkKIHsKICAgICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCgh
bV90cmFuc3BhcmVuY3lDb3VudCk7Ci0gICAgcGxhdGZvcm1EZXN0cm95KCk7Ci19Ci0KLWJvb2wg
R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmhhc1BsYXRmb3JtQ29udGV4dCgpOwotICAg
IHJldHVybiAhIW1fZGF0YTsKKyAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRl
KTsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zYXZlKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAg
IExPR19FUlJPUigiRVJST1Igdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBp
cyBlbXB0eSIpOwogICAgICAgICByZXR1cm47CkBAIC00MjIsMjAgKzM3MiwxMCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpCiAgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1t
ZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBidXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5
LgogICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkKICAgICAgICAgbV9zdGFjay5jbGVhcigpOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJlc3RvcmUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBzYXZl
KCk7CiAKICAgICBzZXRTdHJva2VDb2xvcihzaGFkb3dDb2xvcik7CkBAIC00NTEsNjcgKzM5MSwy
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0g
ICAgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPSB0aGlja25lc3M7Ci0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIG1f
c3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9r
ZVN0eWxlKHN0eWxlKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7
CiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hh
bmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9h
dFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1f
c3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJs
dXI7Ci0gICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBt
X3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBz
ZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBD
b2xvciYgY29sb3IsIFNoYWRvd1JhZGl1c01vZGUgcmFkaXVzTW9kZSkKIHsKICAgICBtX3N0YXRl
LnNoYWRvd09mZnNldCA9IG9mZnNldDsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwog
ICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0
ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0
Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIsIGNvbG9yKTsKKyAgICBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUgPSByYWRpdXNNb2RlOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJTaGFkb3coKQpAQCAtNTE5LDE1ICs0MTMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJTaGFkb3coKQogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CiAgICAg
bV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsKICAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3Io
KTsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gZmFs
c2U7Ci0jZW5kaWYKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclNo
YWRvdygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFyUGxhdGZvcm1TaGFkb3co
KTsKKyAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZh
dWx0OworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwgQ29sb3ImIGNvbG9yKSBjb25zdApAQCAtNTQ0LDY2ICs0
MzEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuZmlsbEdy
YWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zQ2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEFu
dGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykKLXsKLSAgICBtX3N0YXRlLnNob3VsZEFudGlh
bGlhcyA9IHNob3VsZEFudGlhbGlhczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50
aWFsaWFzQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3Jt
U2hvdWxkQW50aWFsaWFzKHNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKQotewotICAg
IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsKLSAgICAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAKLSAgICBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKHNob3Vs
ZFNtb290aEZvbnRzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLXsKLSAg
ICBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHNDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KQotewotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7Ci0KLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlD
aGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1JbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIHVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4m
JiBwYXR0ZXJuKQpAQCAtNjExLDggKzQzOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5zdHJva2VD
b2xvciA9IHsgfTsKICAgICBtX3N0YXRlLnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02MjAs
OCArNDQ3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0
ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5maWxsQ29sb3IgPSB7IH07CiAgICAgbV9zdGF0
ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZN
b3ZlKHBhdHRlcm4pOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAg
ICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5D
aGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUmVm
PEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZUdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pCkBAIC02MzAsMTUgKzQ1Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFm
ZmluZVRyCiAgICAgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwog
ICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IHN0cm9rZUdyYWRpZW50
U3BhY2VUcmFuc2Zvcm07CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBtX3N0YXRl
LmZpbGxSdWxlID0gZmlsbFJ1bGU7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2Up
OworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKQpAQCAtNjQ3LDY0ICs0NjUsMzkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0
IEFmZmluZVRyYW4KICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQp
OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRT
cGFjZVRyYW5zZm9ybTsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOyAvLyBGSVhNRTogYWxzbyBmaWxsIHBh
dHRlcm4/CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxHcmFkaWVudENoYW5nZSk7CisgICAgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5iZWdpblRyYW5zcGFyZW5jeUxh
eWVyKG9wYWNpdHkpOwotICAgIGVsc2UKLSAgICAgICAgYmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5j
eUxheWVyKG9wYWNpdHkpOwotICAgICsrbV90cmFuc3BhcmVuY3lDb3VudDsKKyAgICArK21fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPmVuZFRy
YW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgZWxzZQotICAgICAgICBlbmRQbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKCk7Ci0gICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKTsKLSAgICAt
LW1fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3Vu
dCA+IDApOworICAgIC0tbV90cmFuc3BhcmVuY3lMYXllckNvdW50OwogfQogCiBGbG9hdFNpemUg
R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0
aW9uYWw8dW5zaWduZWQ+IHRvKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybiBGbG9hdFNpemUoKTsKLQogICAgIC8vIERpc3BsYXkgbGlzdCByZWNvcmRpbmcg
Zm9yIHRleHQgY29udGVudCBpcyBkb25lIGF0IGdseXBocyBsZXZlbC4gU2VlIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0dseXBocy4KICAgICByZXR1cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBw
b2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5j
ZXMsIG51bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIEZvbnRDYXNjYWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlw
aHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRv
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGZvbnQuZHJhd0VtcGhhc2lzTWFya3MoKnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRv
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgQmlkaVJlc29sdmVyPFRleHRSdW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlk
aVJlc29sdmVyOwogICAgIGJpZGlSZXNvbHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhydW4uZGly
ZWN0aW9uKCksIHJ1bi5kaXJlY3Rpb25hbE92ZXJyaWRlKCkpKTsKICAgICBiaWRpUmVzb2x2ZXIu
c2V0UG9zaXRpb25JZ25vcmluZ05lc3RlZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigmcnVuLCAw
KSk7CkBAIC03MzQsMTkgKzUyNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRl
eHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICBiaWRp
UnVucy5jbGVhcigpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdOYXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9u
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1JbWFnZShpbWFn
ZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwotfQotCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIGltYWdlUGFpbnRpbmdPcHRpb25zKQogewogICAgIHJldHVybiBkcmF3SW1hZ2Uo
aW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5hdGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzYw
LDE4ICs1NDAsMTIgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdl
KEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW4KIAogSW1hZ2VEcmF3UmVzdWx0
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0
aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRo
aXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRy
YXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCiBJbWFnZURyYXdS
ZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3Qg
RmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Nj
b3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBp
bWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFj
aW5nLCBvcHRpb25zKTsKIH0KQEAgLTc3OSw5ICs1NTMsNiBAQCBJbWFnZURyYXdSZXN1bHQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVj
dCYgZAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3Qm
IHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsCiAgICAgSW1hZ2U6OlRp
bGVSdWxlIGhSdWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBpZiAoaFJ1bGUgPT0g
SW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewogICAg
ICAgICAvLyBKdXN0IGRvIGEgc2NhbGUuCiAgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2Us
IGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwpAQCAtODAzLDE0ICs1NzQsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwgJiYgbV9pbXBsLT5jYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2UpKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBv
cHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0
aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0
aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KQEAgLTgzMywzNiArNTk2LDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiBpbWFnZSwgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5k
cmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAg
ICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlz
LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwogICAgIEltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2UpLCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5kcmF3UGF0dGVybihpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybVBhdHRlcm4oaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNw
YWNpbmcsIG9wdGlvbnMpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRS
ZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRk
Um91bmRlZFJlY3QocmVjdCk7CiAgICAgY2xpcFBhdGgocGF0aCk7CkBAIC04NzAsOSArNjExLDYg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CiAg
ICAgICAgIGNsaXBPdXQocmVjdC5yZWN0KCkpOwogICAgICAgICByZXR1cm47CkBAIC04ODUsMTQg
KzYyMyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKGRyYXdpbmdGdW5jdGlvbikpOwotICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0Nv
bW1hbmRzUmVzdWx0OjpTdWNjZXNzOwotICAgIH0KLQogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihkZXN0aW5hdGlvbi5zaXplKCksIGNv
bG9yU3BhY2UsICp0aGlzKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpGYWlsZWRUb0NyZWF0ZUltYWdlQnVmZmVyOwpA
QCAtOTA0LDYxICs2MzQsMjIgQEAgR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWEKIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsaXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhp
cywgZGVzdGluYXRpb25SZWN0KTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
ICYmICFVU0UoQ0FJUk8pCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNv
bnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsK
IH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRl
eHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUg
PSBtb2RlOwotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShtb2RlKTsKLX0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChy
ZWN0LCBncmFkaWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBncmFkaWVudC5m
aWxsKCp0aGlzLCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
ZmlsbFJlY3QocmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0
ZU9wZXJhdGlvbigpOwogICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsK
ICAgICBmaWxsUmVjdChyZWN0LCBjb2xvcik7CkBAIC05NjcsMjggKzY1OCwxNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIENvbXBvcwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJvdW5kZWRS
ZWN0KHJlY3QsIGNvbG9yLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBwbGF0Zm9ybUZpbGxS
b3VuZGVkUmVjdChyZWN0LCBjb2xvcik7CisgICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVj
dCwgY29sb3IpOwogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0
aW9uKCkpOwogICAgIH0gZWxzZQogICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3Is
IGNvbXBvc2l0ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwogfQogCi0jaWYgIVVTRShDRykgJiYg
IVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlSTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKQEAgLTEwMDgsNzAgKzY4
NywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSbwogICAgIHNldEZpbGxSdWxlKG9sZEZpbGxS
dWxlKTsKICAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KLSNlbmRpZgotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9zdGF0ZS5h
bHBoYSA9IGFscGhhOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQWxwaGEoYWxwaGEpOwotfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBtX3N0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwogICAgIG1fc3RhdGUuYmxl
bmRNb2RlID0gYmxlbmRNb2RlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0
aW9uQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VN
YXNrKQotewotICAgIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFz
azsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7Ci19Ci0KLSNp
ZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVz
ZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCi17Ci0gICAgbV9zdGF0ZS51
c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlVzZURhcmtBcHBlYXJhbmNlQ2hhbmdlKTsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYg
IVVTRShESVJFQ1QyRCkKLS8vIEltcGxlbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIGdvIHB1c2gg
dGhlIGRyYXdpbmcgbW9kZSBpbnRvIHlvdXIgbmF0aXZlIGNvbnRleHQgaW1tZWRpYXRlbHkuCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0FJUk8pICYmICFVU0UoRElS
RUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJv
a2VTdHlsZSkKLXsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKTsKIH0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykg
JiYgIVVTRShESVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3Vs
ZFNtb290aEZvbnRzKGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0Uo
RElSRUNUMkQpICYmICFVU0UoQ0FJUk8pCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVy
YXRlZENvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBl
blN0eWxlKQogewpAQCAtMTEwMiwyNCArNzI0LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFk
anVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIK
ICAgICB9CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLSNl
bmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBzY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotfQotICAgIAog
RmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIEFm
ZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0
ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKQEAgLTExMzMsMjQgKzczNywxMCBAQCBGbG9hdFNpemUg
R3JhcGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29ucwogICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNy
Y1JlY3Quc2l6ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5maWxsRWxsaXBzZShlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHBsYXRmb3JtRmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGVsbGlwc2UpOworICAgIGZpbGxQ
YXRoKHBhdGgpOworICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCkBAIC0xMTY3
LDIzICs3NTcsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLSNp
ZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxs
aXBzZSk7CisgICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0
KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJs
aW5lcywgc3R5bGUpOwogfQotI2VuZGlmCiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNv
bXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBw
cmludGluZykKIHsKQEAgLTEyMTgsMjAgKzc5NSw2IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxv
CiAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRo
aWNrbmVzcykpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKLXsKLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhz
dGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5zdHJva2VUaGlja25lc3MpOwot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0g
ICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdGF0ZS5zdHJva2VDb2xvcik7Ci0gICAgc2V0UGxh
dGZvcm1GaWxsQ29sb3Ioc3RhdGUuZmlsbENvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKHN0YXRlLnN0cm9rZVN0eWxlKTsKLSAgICBzZXRQbGF0Zm9ybUFscGhhKHN0YXRlLmFscGhh
KTsKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhz
dGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
c3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRh
c2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25z
dAogewogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTI4Mywz
NiArODQ2LDE1IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxp
bmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQx
LCBwb2ludDIgfTsKIH0KIAotI2lmICFVU0UoQ0cpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcm
LCBjb25zdCBGbG9hdFJlY3QmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVz
dGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKQotewotfQot
Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1wbC0+Y2FuUGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
cikpIHsKLSAgICAgICAgbV9pbXBsLT5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5h
dGlvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBwbGF5ZXIucGxheWVyUHJpdmF0
ZSgpLT5wYWludEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQog
I2VuZGlmCiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0TnVsbDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK3sKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBjNzhh
ZjdlMjVkZGI1NDE0M2NlYjU5YTExZmZmYzIzYWFhMzQ3MTY3Li44NGEyMTcwM2JjYzAxMjliZWI0
ZjYyNjFlMjI2N2MwMWFjNTBjYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkltYWdlLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdl
UGFpbnRpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRl
cm4uaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9u
Lmg+CkBAIC04Niw3ICs4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRy
YW5zZm9ybTsKIGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFJlY3Q7CkBAIC0xMTAsNiArMTEwLDEz
IEBAIGVudW0gY2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CiB9OwogdXNpbmcgVGV4
dERyYXdpbmdNb2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKIAorLy8gTGVn
YWN5IHNoYWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJv
eC1zaGFkb3cuCisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4K
K2VudW0gY2xhc3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAg
TGVnYWN5Cit9OworCiBlbnVtIFN0cm9rZVN0eWxlIHsKICAgICBOb1N0cm9rZSwKICAgICBTb2xp
ZFN0cm9rZSwKQEAgLTIxOSwxNCArMjI2LDEyIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSB7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVP
cGVyYXRvcjo6U291cmNlT3ZlciB9OwogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1v
ZGU6Ok5vcm1hbCB9OwogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkgeyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFNoYWRvd1Jh
ZGl1c01vZGUgc2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsK
IAogICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICBib29sIHNob3VsZFNtb290aEZv
bnRzIDogMTsKICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7CiAgICAg
Ym9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0jaWYgVVNFKENHKQotICAgIGJvb2wg
c2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA6IDE7Ci0jZW5kaWYKICAgICBib29sIGRyYXdMdW1pbmFu
Y2VNYXNrIDogMTsKICNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGJvb2wgdXNl
RGFya0FwcGVhcmFuY2UgOiAxOwpAQCAtMjU0LDI3ICsyNTksMTUgQEAgc3RydWN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xh
c3MgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0Nv
bnRleHQpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKLSAgICAKLSAg
ICB1c2luZyBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSA9IFdURjo6RnVuY3Rpb248c3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+KEdyYXBoaWNzQ29udGV4dCYpPjsKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkmKTsKK3B1YmxpYzogICAKIAotICAgIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgCi0gICAgZW51bSBj
bGFzcyBQYWludEludmFsaWRhdGlvblJlYXNvbnMgOiB1aW50OF90IHsKLSAgICAgICAgTm9uZSwK
LSAgICAgICAgSW52YWxpZGF0aW5nQ29udHJvbFRpbnRzLAotICAgICAgICBJbnZhbGlkYXRpbmdJ
bWFnZXNXaXRoQXN5bmNEZWNvZGVzLAotICAgICAgICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQK
LSAgICB9OwotICAgIEdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFVTRShESVJFQ1Qy
RCkKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRAogICAgIGVudW0gY2xhc3MgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgOiB1aW50OF90
IHsKICAgICAgICAgQ1BVTWVtb3J5LAogICAgICAgICBHUFVNZW1vcnkKQEAgLTI4MiwyNTAgKzI3
NSwyNzEgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCosIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKICNlbmRp
ZgogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250
ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCog
cGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgYm9vbCBw
YWludGluZ0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YSAmJiAhbV9pbXBsOyB9Ci0g
ICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7
IH0KLSAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIG1f
cGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52
YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9Ci0gICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9Ci0gICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJl
dHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludGlu
Z0Rpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVy
Zm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rl
cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0Nv
bnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgLy8gQ29udGV4dCBTdGF0
ZQorCisgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzID0gdGhpY2tuZXNzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQogICAgIGZsb2F0IHN0
cm9rZVRoaWNrbmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9
CiAKLSAgICB2b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKKyAgICB2b2lkIHNldFN0
cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHls
ZTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxl
Q2hhbmdlKTsgfQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VTdHlsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJv
a2VDb2xvcihjb25zdCBDb2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tl
UGF0dGVybihSZWY8UGF0dGVybj4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJv
a2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKLSAgICB2b2lk
IHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50
KiBzdHJva2VHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQu
Z2V0KCk7IH0KIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgIHZvaWQgc2V0
RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFu
Z2UpOyB9CiAgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZp
bGxSdWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLmZpbGxDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4m
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4m
Jik7CiAgICAgUGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZp
bGxQYXR0ZXJuLmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFk
aWVudChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAg
IEdyYWRpZW50KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFk
aWVudC5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29s
KTsKKyAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdu
b3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJv
b2wpOworICAgIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7
IG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQog
ICAgIGJvb2wgc2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRB
bnRpYWxpYXM7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9u
dHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290
aEZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsg
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZv
bnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnNob3VsZFNtb290aEZvbnRzOyB9CiAKICAgICAvLyBOb3JtYWxseSBDRyBlbmFi
bGVzIHN1YnBpeGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3Jt
YW5jZSBvZiBhbGlnbmluZyBnbHlwaHMuCiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRv
IGRpc2FibGUgdG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhz
LgotICAgIHZvaWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wpOworICAgIHZv
aWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHM7IH0KIAotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB1cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5n
ZSk7IH0KKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CiAK
LSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpOwotICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIHZvaWQgZHJhd1BhdGgoY29u
c3QgUGF0aCYpOworICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBo
YSA9IGFscGhhOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxw
aGFDaGFuZ2UpOyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFs
cGhhOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KKworICAgIHZvaWQgc2V0RHJh
d0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0YXRlLmRyYXdMdW1p
bmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0KKyAgICBib29sIGRy
YXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFz
azsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3Mg
bW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7IHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOyB9CisgICAg
VGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCBibHVyLCBjb25zdCBDb2xvciYsIFNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3co
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYs
IENvbG9yJikgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KGJvb2wpOworICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhhc1NoYWRv
dygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dC
bHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQuaGVpZ2h0KCkpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1
cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorCisjaWYgSEFW
RShPU19EQVJLX01PREVfU1VQUE9SVCkKKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJv
b2wgdXNlRGFya0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURh
cmtBcHBlYXJhbmNlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VXNlRGFya0FwcGVhcmFuY2VDaGFuZ2UpOyB9CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KICNlbmRpZgotICAg
IGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlc3RvcmUoKTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUo
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncykgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogICAgIAogICAg
IHVuc2lnbmVkIHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAK
KyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNl
IHJlYWxseSBiZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxs
UGF0dGVybigpID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGlu
c3RlYWQgb2YgYSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIC8vIEZJWE1FOiBD
YW4gdGhpcyBiZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3Ig
anVzdCBiZSByZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7IH0KKworICAgIC8vIFBpeGVsIFNuYXBwaW5nCisKKyAgICBlbnVtIFJvdW5kaW5n
TW9kZSB7CisgICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGlt
ZW5zaW9ucworICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVz
KEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9r
ZVN0eWxlKTsKKworICAgIC8vIEJhc2ljIFNoYXBlcworCiAgICAgLy8gVGhlc2UgZHJhdyBtZXRo
b2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAvLyBGSVhNRTogLi4u
ZXhjZXB0IGRyYXdSZWN0KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tl
cwogICAgIC8vIHVzaW5nIGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3Jk
ZXJzIChvZiB0aGUgY29ycmVjdAogICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdm9pZCBkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKTsKLSAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcyA9IDEpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpOwogCi0gICAgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9yJiBzaGFkb3dD
b2xvcik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9
CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNl
KSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50Jik7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xv
ciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0g
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENv
bG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGluZVdpZHRoKTsKKyAg
ICAvLyBGSVhNRTogV2h5IGFyZW4ndCB0aGVzZSBwYXJ0IG9mIHRoZSBzdGF0ZT8KKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1l
ZGlhCiAKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdl
JiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRp
b246OkZyb21JbWFnZSB9KTsKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdl
IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdl
KEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUs
IEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworCisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJh
d1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRp
b24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZh
Y3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1h
Z2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJl
ZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdD
b25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBj
b25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5OyB9CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKKyNlbmRpZgogCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAgICAvLyBDbGlwcGluZwogCi0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOworCisg
ICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBlbnVtIGNs
YXNzIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRU
b0NyZWF0ZUltYWdlQnVmZmVyIH07Ci0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwogICAgIAot
ICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRUZXh0RHJhd2lu
Z01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwotICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRl
eHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9
Ci0KLSNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0Fw
cGVhcmFuY2UoYm9vbCk7Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KLSNlbmRpZgotCi0gICAgRmxvYXRTaXpl
IGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpu
dWxsb3B0KTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVm
ZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9t
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlv
bmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQo
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZv
bnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQ
YWludElmRm9udE5vdFJlYWR5KTsKLQotICAgIHZvaWQgYnVpbGRlclN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKIAotICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91
bmRBbGxTaWRlcywKLSAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGlu
Z01vZGUgPSBSb3VuZEFsbFNpZGVzKTsKKyAgICAvLyBUZXh0CiAKLSAgICBGbG9hdFJlY3QgY29t
cHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
Zyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9r
ZSk7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZs
b2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21v
b3RoaW5nTW9kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNp
c01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJp
bmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8
dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
Rm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRy
YW5zcGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAw
KSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQg
RmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYs
IGJvb2wgcHJpbnRpbmcpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZh
bHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNo
YWRvdyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFk
b3cuCi0gICAgLy8gSXQgaGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0g
ICAgdm9pZCBzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImKTsKKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwg
ZmxvYXQmLCBDb2xvciYpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCkgY29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+
IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlz
aWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxl
KCk7IH0KLSAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFk
b3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRo
KCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVy
cmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUu
c2hhZG93Qmx1cjsgfQorICAgIC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0g
MDsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0
aW9uPyBPciBlbHNld2hlcmU/CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3Im
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0
aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYK
IAotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4o
TGluZUpvaW4pOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNl
dEFscGhhKGZsb2F0KTsKLSAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
YWxwaGE7IH0KKyAgICAvLyBUcmFuc2Zvcm1zCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRN
b2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KLSAgICBCbGVuZE1v
ZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7
IH0KLQotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCk7Ci0gICAgYm9vbCBkcmF3
THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7
IH0KLQotICAgIC8vIFRoaXMgY2xpcCBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgYnkgPGNhbnZhcz4g
Y29kZS4gSXQgYWxsb3dzCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIHRvIGhhbmRsZSBjbGlwcGlu
ZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNpbmNlCi0gICAgLy8gdGhlIGRpc2NpcGxpbmUg
aXMgZGlmZmVyZW50LgotICAgIHZvaWQgY2FudmFzQ2xpcChjb25zdCBQYXRoJiwgV2luZFJ1bGUg
PSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKLQot
ICAgIHZvaWQgc2NhbGUoZmxvYXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsK
LSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsK
LSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShm
bG9hdCBzKSB7IHNjYWxlKHsgcywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUlu
UmFkaWFucykgPSAwOwogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkg
eyB0cmFuc2xhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJh
bnNsYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZv
aWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIHZv
aWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRS
ZWN0Jik7Ci0gICAgdm9pZCBhZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBGbG9hdFBvaW50Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAg
IGVudW0gSW5jbHVkZURldmljZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwg
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJs
eUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdCA9IDA7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2Fs
ZSBmYWN0b3IgdG8gdGhlIGNvbnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAg
ICAgLy8gYWN0aW5nIGFzIGEgYmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25t
ZW50LgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCk7Ci0gICAgdm9pZCBwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAg
IEZsb2F0U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rv
ckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBmYWN0b3IpIHsgc2NhbGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0
U2l6ZSBzY2FsZUZhY3RvcigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBz
Y2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0
ZWN0ZWQoKSB7IG1fY29udGVuZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNv
bnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0
ZWN0ZWQ7IH0KKyAgICAvLyBMaW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbik7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
ZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9
CisgICAgdmlydHVhbCB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBj
b25zdCBGbG9hdFBvaW50JikgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5h
bExpbmtzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFp
bnQgRGV0ZWN0aW9uCisKKyAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBt
X2NvbnRlbnRmdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFp
bnREZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0K
KworICAgIC8vIEZJWE1FOiBOb3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFu
ZCBzaG91bGQgYmUgbW92ZWQgZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdl
dFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsg
Ly8gVGhlIHBhc3NlZCBpbiByZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21w
b3NpdGluZyBpbnNpZGUgdHJhbnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5k
b3dzQ29udGV4dChIREMsIGNvbnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsg
Ly8gVGhlIHBhc3NlZCBpbiBIREMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0
V2luZG93c0NvbnRleHQuCiAgICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikK
LSAgICBHcmFwaGljc0NvbnRleHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhN
RTogVG8gYmUgcmVtb3ZlZC4KIAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7
IHdlIG5lZWQgYSBkaWZmZXJlbnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0
d2VlbiBXaW5kb3dzIENHIGFuZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KSBjb25zdCA9IDA7CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUs
IGNoaWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAg
Ly8gcmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVu
LiBEZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzgsMTIgQEAgcHVibGlj
OgogI2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBi
ZSByZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lz
dGVtRmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdl
dCogZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3Rl
bUZhY3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJU
YXJnZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9p
ZCBiZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29u
c3QgQ29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAg
ICB2b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBz
b2xpZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNzcgKzU5OSwxNTUgQEAgcHVibGljOgog
I2VuZGlmIC8vIFBMQVRGT1JNKFdJTikKICNlbmRpZiAvLyBPUyhXSU5ET1dTKQogCi0gICAgc3Rh
dGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9h
dFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRS
ZWN0Jik7CiAKLSAgICBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0OworICAgIEZs
b2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0
IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcsIENvbG9yJik7CisKKyAgICBmbG9hdCBkYXNoZWRM
aW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChmbG9hdCkgY29uc3Q7CisgICAgZmxvYXQgZGFz
aGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKKyAgICBmbG9h
dCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBw
YXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKKyAgICBWZWN0b3I8RmxvYXRQ
b2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxv
YXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29u
c3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKiBpbXBsKCkgeyByZXR1cm4gbV9pbXBsLmdl
dCgpOyB9CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKIAogcHJpdmF0ZToKLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQg
cGxhdGZvcm1EZXN0cm95KCk7CisgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBt
X3N0YWNrOwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIHZvaWQgcGxhdGZvcm1Jbml0KEhEQywg
Ym9vbCBoYXNBbHBoYSA9IGZhbHNlKTsKLSNlbmRpZgorICAgIHVuc2lnbmVkIG1fdHJhbnNwYXJl
bmN5TGF5ZXJDb3VudCB7IDAgfTsKKyAgICBib29sIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQg
eyBmYWxzZSB9OworfTsKIAotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHBsYXRmb3JtSW5p
dChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7
Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqLCBCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKKy8vIEZJWE1FOiBNb3ZlIHRvIGEgc2VwYXJh
dGUgZmlsZS4KK2NsYXNzIEdyYXBoaWNzQ29udGV4dE51bGwgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyA6
IHVpbnQ4X3QgeworICAgICAgICBOb25lLAorICAgICAgICBJbnZhbGlkYXRpbmdDb250cm9sVGlu
dHMsCisgICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMsCisgICAgICAg
IERldGVjdGluZ0NvbnRlbnRmdWxQYWludAorICAgIH07CiAKLSAgICB2b2lkIHNhdmVQbGF0Zm9y
bVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOworICAgIEdyYXBoaWNz
Q29udGV4dE51bGwoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDog
bV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQogCi0gICAg
dm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Citw
cml2YXRlOgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxh
eWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHNldFBsYXRm
b3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tl
U3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
ZmxvYXQpOworICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKyAgICBib29sIHBlcmZvcm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zICE9IFBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6Tm9uZTsgfQorICAgIGJvb2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHM7IH0KKyAgICBi
b29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KKyAgICBib29sIGRldGVj
dGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVu
dGZ1bFBhaW50OyB9CiAKLSAgICB2b2lkIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
Jik7CisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KIAotICAgIHZv
aWQgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9y
bVNob3VsZFNtb290aEZvbnRzKGJvb2wpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1JbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KTsKKyNpZiBVU0UoQ0cpIHx8IFVT
RShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
IHsgfQorI2VuZGlmCiAKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhclBsYXRmb3JtU2hh
ZG93KCk7CisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIGZpbmFsIHsgfQogCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZs
b2F0KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsIHsg
fQogCi0gICAgdm9pZCBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSk7Ci0gICAgdm9pZCBlbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgc3RhdGlj
IGJvb2wgc3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKTsKKyAgICBJbnRSZWN0IGNsaXBCb3Vu
ZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KIAotICAgIHZvaWQgZmlsbEVsbGlwc2VB
c1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNv
bnN0IEZsb2F0UmVjdCYpOworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJu
KCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Cisj
ZW5kaWYKIAotICAgIHZvaWQgcGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsK
LSAgICB2b2lkIHBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0ID0gMSkgZmluYWwgeyB9CisgICAg
dm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbCB7IH0K
KyAgICAvLyBGSVhNRTogSXMgaXQgb2sgdGhhdCB0aGlzIGRvZXNuJ3Qgd29yaz8/CisgICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJv
a2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
ID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVK
b2luKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQor
ICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwg
eyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zv
cm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxl
KSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisg
ICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYs
IGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3Qg
Rm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVk
ID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7
IH07IH0KKworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9h
dFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9t
U3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWdu
ZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25z
dCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENh
c2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50
SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpG
cm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9
CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50
YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5v
dGhpbmc7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsg
cmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQor
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBi
b29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgogCi0gICAgdm9pZCBwbGF0Zm9y
bUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
KyAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWwgeyB9CisgICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKIAotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2Uo
Y29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworICAg
IHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmlu
YWwgeyB9CiAKLSAgICBGbG9hdFJlY3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBDb2xvciYpOworICAg
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3Qg
RmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CiAKLSAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lk
dGhGb3JTdHJva2VXaWR0aChmbG9hdCkgY29uc3Q7Ci0gICAgZmxvYXQgZGFzaGVkTGluZVBhdHRl
cm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKLSAgICBmbG9hdCBkYXNoZWRMaW5l
UGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgs
IGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKLSAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVy
TGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lk
dGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBvaW50MikgY29uc3Q7CisgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsIHsgfQogCi0gICAgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+IG1faW1wbDsKKyAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KIAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7
Ci0gICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkg
ZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKK3ByaXZh
dGU6CiAgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWdu
ZWQgbV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnRE
ZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVy
IHsKQEAgLTc0NCw4ICs4MzYsNiBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXpl
OwogfTsKIAotCi0KIGNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0Nv
bnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRl
eHRJbXBsKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2I0NmRiNzRkMzU4ZTFlM2I3ZmYzYmQ2NTMzZWYz
NGJkMzg0NzlmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0Nv
bnRleHRJbXBsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShHcmFwaGljc0NvbnRleHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0Nv
bnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4
dEltcGwoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1
ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygp
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNl
dCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
YW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNv
bnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBzYXZlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAg
dmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25z
dCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKSA9IDA7Ci0jaWYgRU5BQkxF
KFZJREVPKQotICAgIHZpcnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNh
blBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0ID0gMDsKLSNlbmRp
ZgotICAgIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9
IDA7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSA9IDA7Ci0KLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHQm
IG1fZ3JhcGhpY3NDb250ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDQ0MGY3MjUzNTgyY2M2
NDkzMTVmMjQ3M2IzOTAzMjJiMGE2NjIwODUuLjEzODBlN2VkOWZjOGYzNjQ4ZWYwNjcxOTM0OGRi
ZTc3MWNmOTk5M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAKQEAgLTE4OCw4ICsxODgsOSBAQCBJbWFnZURyYXdSZXN1bHQgSW1hZ2U6OmRyYXdUaWxlZChH
cmFwaGljc0NvbnRleHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgIH0KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gRklYTUU6IERvIHdlIHJlYWxseSB3YW50
IHRvIGtlZXAgdGhpcyBiZWhhdmlvciBkaWZmZXJlbmNlPz8/CiAgICAgLy8gV2hlbiB1c2luZyBh
Y2NlbGVyYXRlZCBkcmF3aW5nIG9uIGlPUywgaXQncyBmYXN0ZXIgdG8gc3RyZXRjaCBhbiBpbWFn
ZSB0aGFuIHRvIHRpbGUgaXQuCi0gICAgaWYgKGN0eHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkg
eworICAgIGlmIChjdHh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCkgewogICAgICAgICBpZiAoc2l6ZSgpLndpZHRoKCkgPT0gMSAmJiBpbnRlcnNlY3Rpb24o
b25lVGlsZVJlY3QsIGRlc3RSZWN0KS5oZWlnaHQoKSA9PSBkZXN0UmVjdC5oZWlnaHQoKSkgewog
ICAgICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVTcmNSZWN0OwogICAgICAgICAgICAgdmlzaWJs
ZVNyY1JlY3Quc2V0WCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
CmluZGV4IDRkM2Y0MzBjNjE3ZDEwMDE2ZWY1MzgwZmQ4OWE5NGNiMGJhZWE2YzMuLjE3NjQ3NDdk
NjE0MGNmMTE2YzljNjQyNmRkYzk3MWFjMmJlYjk4MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtNzEsNyArNzEsNiBAQCBjbGFzcyBBZmZpbmVUcmFuc2Zv
cm07CiBjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRTaXplOwogY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsK
IHN0cnVjdCBMZW5ndGg7CiAKQEAgLTgwLDcgKzc5LDYgQEAgY2xhc3MgSW1hZ2VPYnNlcnZlcjsK
IAogY2xhc3MgSW1hZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZT4gewogICAgIGZyaWVuZCBj
bGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dElt
cGw7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SW1hZ2UoKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggOGEzNTUyZmU4OWYy
ODU0MDlmMjU0NTg0OTEzZDVlNmYxZWNlYjAxMy4uN2QwM2RiNjJkNjZmYzFmODZiMjdjNjkyNzRm
Yjg3YjljYTlhMTFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAKQEAgLTE5OCw3ICsxOTgsOSBAQCBTaGFkb3dCbHVyOjpTaGFkb3dCbHVy
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKICAgICAsIG1fc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCiB7CiAjaWYgVVNFKENH
KQotICAgIGlmIChzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKSB7CisgICAgLy8gQ29yZSBH
cmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCByYWRpdXMgPiA4cHggKDxy
ZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCisgICAgLy8gYnV0IHdlIG5lZWQgdG8gcHJlc2VydmUg
dGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCisg
ICAgaWYgKHN0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
KSB7CiAgICAgICAgIGZsb2F0IHNoYWRvd0JsdXIgPSByYWRpdXNUb0xlZ2FjeVJhZGl1cyhzdGF0
ZS5zaGFkb3dCbHVyKTsKICAgICAgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKHNoYWRvd0Js
dXIsIHNoYWRvd0JsdXIpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4IDc4Yzc5Y2Q3ZTg5ZTky
YzI2YzRmZTZjNDdkZTk1N2ZmZDhmZjk2YzQuLjQ0M2E1NmEyYjc0NWJlYmVkZGQ1ODE2N2FkNmIx
ZDMzMjJmYjBiOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMTc0MSw5ICsxNzQxLDcgQEAgdm9pZCBH
cmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMoQ29tbWl0U3RhdGUmIGNvbW1p
dFN0YXRlLCBjb25zdCBUcmEKICAgICAgICAgCiAgICAgICAgIEZsb2F0UmVjdCBpbml0aWFsQ2xp
cChib3VuZHNPcmlnaW4oKSwgc2l6ZSgpKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGNvbnRleHQsICptX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkp
OwotICAgICAgICB9KTsKKyAgICAgICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIGNvbnRleHQoKm1f
ZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVU
cmFuc2Zvcm0oKSk7CiAgICAgICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQs
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbi5jcHAKaW5kZXggM2I0NDhhZjA0ZmEyNTVlNGY4NDNlZjQyOWViZDc3YzlhMWQ4
NjhhYi4uNjg4MTIyMWIwNDU4ZGNjOTQ4NGYzNGY0MTY2M2RkZDc0ZTEyODc3YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXll
cldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJDb2xvclNl
cmlhbGl6YXRpb24uaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdESVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5o
IgpAQCAtODkwLDcgKzg5MCw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0
UG9pbnQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHRmxvYXQgeCwgQ0dGbG9hCiAgICAgRm9udENh
c2NhZGUgZm9udCA9IEZvbnRDYXNjYWRlKFdURk1vdmUoZGVzYyksIDAsIDApOwogICAgIGZvbnQu
dXBkYXRlKG51bGxwdHIpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNnKGNvbnRleHQpOworICAg
IEdyYXBoaWNzQ29udGV4dENHIGNnKGNvbnRleHQpOwogICAgIGNnLnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwogICAgIGNnLmRyYXdUZXh0KGZvbnQsIFRleHRSdW4odGV4dCksIEludFBvaW50
KHgsIHkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCmlu
ZGV4IGQzZjQ0OGFjYTkwMzBmNzdkNzhlNTdjNDJmMzA1MmQ2YTk4OTMxYzQuLmRiZDM2M2U2MTNj
ZWIwN2UwMzY2NzMzNTVkMDQ3ZWRhYWE1MmU1MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FM
YXllcldpbkludGVybmFsLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lmIFVTRShDQSkKIAogI2lu
Y2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIK
ICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpA
QCAtOTQsNyArOTQsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dAogCiAgICAgUGxhdGZvcm1D
QUxheWVyOjpmbGlwQ29udGV4dChjb250ZXh0LCBsYXllckJvdW5kcy5zaXplLmhlaWdodCk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBo
aWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKIAogICAgIC8vIEl0J3MgaW1w
b3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250ZXh0LCBiZWNhdXNlIGl0IG1heSBi
ZSBzaWduaWZpY2FudGx5CiAgICAgLy8gc21hbGxlciB0aGFuIHRoZSBsYXllciBib3VuZHMgKGUu
Zy4gdGlsZWQgbGF5ZXJzKQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWw6OmRyYXdSZXBhaW50Q291bnRlcnMoQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENH
Q29uCiAgICAgZWxzZQogICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBjYWNoZWRDR0NvbG9yKENv
bG9yOjpyZWQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAg
UGxhdGZvcm1DQUxheWVyOjpkcmF3UmVwYWludEluZGljYXRvcihncmFwaGljc0NvbnRleHQsIG93
bmVyKCksIGRyYXdDb3VudCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVy
V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxl
ZEJhY2tpbmdMYXllcldpbi5jcHAKaW5kZXggYzVhNzNlOGQzYWU5YmI0OWE5NmJlMjdmNTMyN2Uw
NmMwNjIxNGZjMy4uYjUzYTMzN2JhNGNjZGNmMjNmNzg1NDkwNWIyNzYwN2VjOTBjMDY0YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVk
QmFja2luZ0xheWVyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAK
ICNpZiBVU0UoQ0EpCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1
ZGUgIlRpbGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCkBAIC04Niw3
ICs4Niw3IEBAIHZvaWQgV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmRpc3BsYXlDYWxsYmFjayhD
QUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0UmVmCiAgICAgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBjbGllbnQgPSBvd25lcigpLT5vd25lcigpOwogICAgIEdyYXBoaWNzTGF5ZXI6OkNvbXBv
c2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9IGNsaWVudC0+cGxhdGZv
cm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0Nv
bnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAg
ZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8v
IHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRleCBjZjQ4Mzc2MDNlMGFiMTkwODg5NzVmMTBlNDJk
ZTc1YTEyOGIwNzU3Li5iYTU5NGFlOGNjMmE4MDJiNjU2MDYwZmIwZTNiYmEyMjE4Njk4NDI3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAgKi8KIAog
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAKICNpZiBVU0UoQ0FJUk8pCiAKQEAgLTM5LDcg
KzM5LDYgQEAKICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNh
aXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCkBA
IC01Nyw2MzMgKzU2LDM1NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29u
dGV4dCkKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9y
bUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQorICAgIDogbV9wbGF0Zm9ybUNvbnRleHQo
cGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCiB7Ci0gICAgaWYgKCFwbGF0
Zm9ybUNvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKnBsYXRmb3JtQ29udGV4dCk7Ci0gICAgbV9kYXRhLT5w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwotICAgIG1f
ZGF0YS0+c3luY0NvbnRleHQocGxhdGZvcm1Db250ZXh0LT5jcigpKTsKKyAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorICAgIDogbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWly
b0NvbnRleHQpKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKIHsKLSAgICBpZiAobV9kYXRhKSB7Ci0gICAgICAg
IG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0
cik7Ci0gICAgICAgIGRlbGV0ZSBtX2RhdGE7Ci0gICAgfQorICAgIG1fcGxhdGZvcm1Db250ZXh0
LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKKyAgICBtX3ByaXZh
dGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwogfQogCi1BZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVT
Y2FsZSkgY29uc3QKK0dyYXBoaWNzQ29udGV4dENhaXJvOjp+R3JhcGhpY3NDb250ZXh0Q2Fpcm8o
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2
YXRlKG51bGxwdHIpOworfQogCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1w
bC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Citib29sIEdyYXBoaWNzQ29udGV4dENhaXJvOjpoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0Cit7
CiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9
CiAKLVBsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0CitQbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJu
IG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3Jt
Q29udGV4dDsKKyAgICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWly
bzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBDYWlybzo6c2F2ZSgqcGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKICAgICBDYWly
bzo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd1Jl
Y3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnBsYXRmb3JtQ29u
dGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVj
dCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFs
cGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVz
ZWQgdG8gZHJhdyBib3JkZXJzLCBzbyB3ZSBzaG91bGQgbm90IGRyYXcgc2hhZG93cy4KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChz
dHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMp
OwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNp
cmNsZXMgdXNlZCBpbiBsaXN0cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25z
dCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxQYXRoKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUGF0aCgqcGxhdGZv
cm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Zmls
bFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBD
YWlybzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBDYWlybzo6RmlsbFNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47CisgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQo
KSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7Cit9CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBH
cmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwor
ICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgaWYgKCFwYXR0ZXJuKQogICAgICAgICByZXR1
cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWly
bzo6ZmlsbFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKCkpKTsKKyAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Cisg
ICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgp
KTsKKyAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9y
IHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1D
b250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBDYWlybzo6ZmlsbFJl
Y3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3Jt
Q29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQogCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewogICAgIENhaXJvOjpjbGlwKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsK
IH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVj
dCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xp
cEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBp
ZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNv
bnRleHQsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKK30K
IAordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CiAj
aWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWlu
dEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAg
ICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNl
dCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIHdpZHRoLCBjb2xvcik7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogI2lmIFBMQVRGT1JNKFdQ
RSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywg
cmVjdHMsIGNvbG9yKTsKICAgICBVTlVTRURfUEFSQU0od2lkdGgpOwogICAgIFVOVVNFRF9QQVJB
TShvZmZzZXQpOwogICAgIHJldHVybjsKICNlbHNlCi0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCB3
aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxp
bmVzLCBTdHJva2VTdHlsZSkKIHsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24o
KSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKHdpZHRocy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlja25l
c3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29s
b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKHJlY3QsIHN0
eWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBzdHlsZSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
cm91bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9k
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsK
LQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnRyYW5zbGF0
ZSgqcGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKQotewotICAgIC8vIENhaXJvIGNvbnRl
eHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNv
IHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCiB7Ci0gICAgLy8gQ2Fpcm8gY29udGV4dHMgY2FuJ3QgaG9sZCBzZXBhcmF0ZSBm
aWxsIGFuZCBzdHJva2UgY29sb3JzCi0gICAgLy8gc28gd2Ugc2V0IHRoZW0ganVzdCBiZWZvcmUg
d2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6
OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNz
KGZsb2F0IHN0cm9rZVRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVN0eWxlQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1f
cGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7CiAKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKCpw
bGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAgICAgaWYg
KHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5n
IHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBD
RyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhdXRv
JiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBtX3N0YXRl
LnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkgfTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqcGxhdGZvcm1Db250ZXh0
KCksIHN0cm9rZVN0eWxlKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JS
ZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFz
Q2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zv
cm0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0oKnBsYXRm
b3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
IHsKLSAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3Nv
Y2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgIC8vIFdlIGZsaXAg
dGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlz
Ci0gICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBvZmZzZXQud2lkdGgoKSwgLW9mZnNl
dC5oZWlnaHQoKSB9OwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxh
dGZvcm1TaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0
eSk7CiAgICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgp
LCBvcGFjaXR5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXll
cigqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9y
dHNUcmFuc3BhcmVuY3lMYXllcnMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0
cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwogICAgIENhaXJvOjpzdHJva2VSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
bGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
bGluZUNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGxpbmVDYXAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDYWlybzo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVDYXAp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVz
LCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExp
bmVKb2luIGxpbmVKb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUpvaW4o
TGluZUpvaW4gbGluZUpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVK
b2luKGxpbmVKb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVKb2luKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgbGluZUpvaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBtaXRlcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldE1pdGVyTGltaXQo
ZmxvYXQgbWl0ZXIpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBi
ZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KG1pdGVy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgQ2Fpcm86OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBtaXRl
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KQot
ewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENv
bXBvc2l0ZU9wZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBi
bGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSB3aW5kUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBjbGlwUGF0aChwYXRoLCB3aW5kUnVs
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnJvdGF0ZShmbG9hdCByYWRpYW5zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5y
b3RhdGUocmFkaWFucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4dCgp
LCByYWRpYW5zKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmNs
aXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3Vu
ZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmZpbGxSb3VuZGVk
UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3IuaXNWYWxpZCgpKQorICAgIGlm
ICghY29sb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhv
bGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1Q
YXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwotICAgIENhaXJvOjpkcmF3UGF0dGVy
bigqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRl
c3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworICAg
IENhaXJvOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRm
b3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQorUmVuZGVyaW5n
TW9kZSBHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlh
cygqcGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7CisgICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRl
cnBvbGF0aW9uUXVhbGl0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQogewotfQor
ICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCisgICAgICAgIHJldHVybjsKIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAg
ICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3RvcjxjYWlyb19nbHlwaF90PiBjYWly
b0dseXBocyhudW1HbHlwaHMpOworICAgIHsKKyAgICAgICAgYXV0byB5T2Zmc2V0ID0gcG9pbnQu
eSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Cisg
ICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5T2Zmc2V0
IH07CisgICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7CisgICAgICAg
ICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOworICAgICAgICB9CisgICAgfQog
Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpKTsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5w
bGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7CisgICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZz
ZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKKworICAgIGlmICghZm9udC5hbGxvd3NB
bnRpYWxpYXNpbmcoKSkKKyAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2Rl
OjpOb1Ntb290aGluZzsKKworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBD
YWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKKyAgICAgICAgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJv
R2x5cGhzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKKyAg
ICAgICAgZm9udFNtb290aGluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyY2MxZWVjMDZkMzMzODk0ZWFkYjhiMWRl
NDY2ZDY3YmIxMDJhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCkBAIC0wLDAgKzEsMTE3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK3R5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDYWlybyBmaW5hbCA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBs
YXRmb3JtQ29udGV4dENhaXJvJik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCop
OworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBib29sIGhhc1Bs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncyk7CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9p
ZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBz
ZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBmaW5hbDsKKworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOwor
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSkgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBs
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJikgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3R2x5
cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNt
b290aGluZ01vZGUpIGZpbmFsOworCisgICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworCisgICAgdm9p
ZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIHRy
YW5zbGF0ZShmbG9hdCwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgcm90YXRlKGZsb2F0KSBmaW5h
bDsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25z
dCBQYXRoJiwgV2luZFJ1bGUpIGZpbmFsOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUo
KSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKKworI2lm
IE9TKFdJTkRPV1MpCisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNh
dGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9vd25lZFBsYXRmb3JtQ29u
dGV4dDsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTI2MWVmMzBlNjgzZGM5NThlN2YyYjllMTg0YjY1OTYyZjNmMzc5MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotCi0jaWYg
VVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAg
ICBbJnBsYXRmb3JtQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+
KGNvbnRleHQsIHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y3JlYXRlRmFjdG9yeShjYWlyb190KiBjYWlyb0NvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtjYWly
b0NvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBj
YWlyb0NvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0
SW1wbChjb250ZXh0KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQot
ICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
PihtX3BsYXRmb3JtQ29udGV4dCkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0Nv
bnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y2Fpcm9fdCogY2Fpcm9Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4
dENhaXJvPihjYWlyb0NvbnRleHQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjp+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCkKLXsKLSAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwot
fQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAg
ICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VT
dHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAo
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcg
dGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENH
IGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8m
IG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0
YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQg
PSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29t
cG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0
YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFu
dGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQot
ewotICAgIENhaXJvOjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENhaXJvOjpzZXRMaW5lRGFz
aChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewot
ICAgIENhaXJvOjpzZXRMaW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRl
ckxpbWl0KQotewotICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBt
aXRlckxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBhdXRv
IHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pOwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Ci0gICAgQ2Fpcm86OnJlc3Rv
cmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7
Ci0KLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29u
dGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNv
bnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29t
cG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9y
OwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgQ2Fpcm86OlNoYWRvd1N0
YXRlIHNoYWRvd1N0YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAg
ICAgQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3Is
IHNoYWRvd1N0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlv
dXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikK
LXsKLSAgICBDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgeyB9LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0
LCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlw
c2UocmVjdCk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdp
ZHRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAg
ICBDYWlybzo6c3Ryb2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIENhaXJvOjpzdHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ry
b2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAg
IHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3Qo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBo
KiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCi17Ci0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3Rvcjxj
YWlyb19nbHlwaF90PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0
byB5T2Zmc2V0ID0gcG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bUdseXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ld
LCB4T2Zmc2V0LCB5T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ld
LndpZHRoKCk7Ci0gICAgICAgICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9
IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOwotICAgIGRvdWJsZSBzeW50aGV0aWNC
b2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBpZiAoIWZvbnQu
YWxsb3dzQW50aWFsaWFzaW5nKCkpCi0gICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3Ro
aW5nTW9kZTo6Tm9TbW9vdGhpbmc7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAg
ICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERy
YXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3Rh
dGUuc2hhZG93Q29sb3IsCi0gICAgICAgIGZvbnRTbW9vdGhpbmcpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3KGdyYXBo
aWNzQ29udGV4dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdl
KG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0
LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwg
c3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0o
c3BhY2luZyk7Ci0gICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFn
ZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBD
YWlybzo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5k
ZXJsaW5lcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKLXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0VsbGlw
c2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1Jpbmco
bV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQot
ewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OnNhdmUoKQotewotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1D
b250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJlc3RvcmUoKQot
ewotICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAg
IENhaXJvOjp0cmFuc2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewot
ICAgIENhaXJvOjpyb3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKLXsKLSAgICBDYWlybzo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0
YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0o
bV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIENhaXJvOjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAg
ICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgQ2Fpcm86OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQot
ewotICAgIENhaXJvOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4
dCwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y2xpcEJvdW5kcygpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5k
cyhtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQotewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgZGVzdFJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGlj
c0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0j
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklY
TUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmExZWVlMzkwNzNhMjZlMDk3Yjk2Yzc0
NjUzZmE2MTZmOTI2NTIyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAo
QykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRJbXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwotCi1jbGFz
cyBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0
SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRl
eHRDYWlybyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCopOwotCi0gICAg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4
dENhaXJvJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYs
IGNhaXJvX3QqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQot
ICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZv
cm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
dm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hh
ZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRN
aXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRp
b25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlk
ZTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29s
IGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92
ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRD
YWlybz4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYg
bV9wbGF0Zm9ybUNvbnRleHQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKaW5kZXggYzllNzA4MDE0NmM3ZjIzMjcyN2QxYTQyN2UxMWU2YmM4ZDA4MThmMi4uMDUyMTIy
MGQ2MjU1NDY5MzUyNmViNDg3NDA2MmIzMDQwOTZkYWE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAj
aW5jbHVkZSAiQ29sb3JUcmFuc2ZlckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAKaW5kZXggM2JlNzU1NjllOTczYzJiMTY4OTlhNTA3NjI3NWY1MjNmYTgwNzFlYS4u
OWI1YzBhZDA3NDQ1MTg4MGRlZmRkM2M0ODkyZTRmNzNjMjg2NDJjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAj
aW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUg
PGNhaXJvLmg+CkBAIC01MSw3ICs1MSw3IEBAIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IFBhcmFtZXRlcnMmCiAKICAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdl
dCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fY29u
dGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2NvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENhaXJvPihtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAK
IEdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QYXRoQ2Fpcm8uY3BwCmluZGV4IDgxZDE1OGUyZGZmN2U1YmYwM2M3YjY1ZDAzNmRkYTg5OWYw
ZjkwMWYuLjJhMTllNDdhOWFhY2VjMjA5NmE2MGU5N2UzYjVjNDg3NDUzZGFhZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNw
cApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkNhaXJvVW5pcXVlUHRyLmgiCiAjaW5jbHVk
ZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWly
by5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIxLDcgKzQyMSw3IEBAIEZsb2F0UmVj
dCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIGlmIChz
dHJva2VTdHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ2MobV9wYXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5
bGVBcHBsaWVyKGdjKTsKICAgICB9CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIFBhdGg6OnN0
cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVh
dGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDYWlybyBn
cmFwaGljc0NvbnRleHQobV9wYXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVy
KGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggZWYzYWMy
ZTEzNzFiOGUxYzkwN2RhMTI0MmE3NmNlNmU2MTQ3ODcwZS4uZmRiMWFlMDY1NzRiZGY4MTVjNjE2
NzBlMDZjYjY3N2EwNzIzODlhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTUsMTcgKzU1LDEy
IEBAIHN0YXRpYyB2b2lkIHNldENHRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBDb2xvciYgY29sb3IpCiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRl
eHQsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VD
b2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENH
Q29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29s
b3IpKTsKLX0KLQogaW5saW5lIENHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dD
b250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0
KENHQ29udGV4dEdldENUTShjb250ZXh0KSwgQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250
ZXh0R2V0QmFzZUNUTShjb250ZXh0KSkpOwogfQogCi1zdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxp
dHkgY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVh
bGl0eSkKK3N0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb3JlSW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KQogewogICAgIHN3aXRjaCAocXVhbGl0
eSkgewogICAgIGNhc2Uga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ6CkBAIC04Miw2ICs3NywzNCBA
QCBzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29udmVydEludGVycG9sYXRpb25RdWFsaXR5
KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcQogICAgIHJldHVybiBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6RGVmYXVsdDsKIH0KIAorc3RhdGljIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgY2dJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KQoreworICAgIHN3aXRj
aCAocXVhbGl0eSkgeworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKKyAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJw
b2xhdGlvbk5vbmU7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAg
ICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkxvdzsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFs
aXR5OjpNZWRpdW06CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOworICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgIHJldHVybiBrQ0dJbnRl
cnBvbGF0aW9uSGlnaDsKKyAgICB9CisgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0
OworfQorCitzdGF0aWMgQ0dUZXh0RHJhd2luZ01vZGUgY2dUZXh0RHJhd2luZ01vZGUoVGV4dERy
YXdpbmdNb2RlRmxhZ3MgbW9kZSkKK3sKKyAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRl
eHREcmF3aW5nTW9kZTo6RmlsbCk7CisgICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRl
eHREcmF3aW5nTW9kZTo6U3Ryb2tlKTsKKyAgICBpZiAoZmlsbCAmJiBzdHJva2UpCisgICAgICAg
IHJldHVybiBrQ0dUZXh0RmlsbFN0cm9rZTsKKyAgICBpZiAoZmlsbCkKKyAgICAgICAgcmV0dXJu
IGtDR1RleHRGaWxsOworICAgIHJldHVybiBrQ0dUZXh0U3Ryb2tlOworfQorCiBzdGF0aWMgQ0dC
bGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgc3dpdGNoIChibGVuZE1vZGUpIHsK
QEAgLTE1NiwzNSArMTc5LDM5IEBAIHN0YXRpYyBDR0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9k
ZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNCiAgICAgcmV0dXJu
IGtDR0JsZW5kTW9kZU5vcm1hbDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNz
Q29udGV4dENHKENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3Rh
cnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmls
bENvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0g
ICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIG1f
c3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkp
OworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5vdCBncmVhdCwgYmVjYXVzZSBpdCBzZXRzIGl0IGJh
Y2sgb24gdGhlIEdyYXBoaWNzQ29udGV4dCwgYnV0IG1heWJlIGl0IGRvZXNuJ3QgbWF0dGVyPwor
ICAgIHNldEZpbGxDb2xvcihmaWxsQ29sb3IoKSk7CisgICAgc2V0U3Ryb2tlQ29sb3Ioc3Ryb2tl
Q29sb3IoKSk7CisgICAgc2V0U3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKKyAg
ICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb3JlSW50ZXJwb2xhdGlvblF1
YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGlj
c0NvbnRleHRDRzo6fkdyYXBoaWNzQ29udGV4dENHKCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwog
fQogCi1DR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgp
KTsKICAgICBBU1NFUlQobV9kYXRhLT5tX2NnQ29udGV4dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+
bV9jZ0NvbnRleHQuZ2V0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZv
cm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQo
IXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKIAogICAgIC8vIE5vdGU6IERvIG5vdCB1c2Ug
dGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ug
d2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAgICAvLyBzYXZlIG9mIHRoZSBzZWNvbmRhcnkgY29u
dGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCkuCkBAIC0xOTIsMTAg
KzIxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiAgICAg
bV9kYXRhLT5zYXZlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NF
UlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKIAogICAgIC8vIE5vdGU6IERvIG5v
dCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2lu
Y2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAgICAvLyByZXN0b3JlIG9mIHRoZSBzZWNv
bmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCkuCkBA
IC0yMDQsMTAgKzIzMCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFn
ZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFn
ZSA9IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAg
ICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMjk4
LDcgKzMyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvCiAKICAgICBhdXRvIG9sZENvbXBv
c2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgYXV0byBvbGRCbGVuZE1v
ZGUgPSBibGVuZE1vZGVPcGVyYXRpb24oKTsKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwor
ICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9w
dGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRo
ZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIGFkanVzdGVkRGVzdFJlY3QueCgpLCBhZGp1c3RlZERlc3RSZWN0LnkoKSk7CkBAIC0zMjUs
MTAgKzM1MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29u
c3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3YXNB
bnRpYWxpYXNlZCk7CiAjZW5kaWYKLSAgICAgICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRp
b24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CisgICAgICAgIHNldENvbXBv
c2l0ZU9wZXJhdGlvbihvbGRDb21wb3NpdGVPcGVyYXRvciwgb2xkQmxlbmRNb2RlKTsKICAgICB9
CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oSW1hZ2VzLCBzdHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4
dDo6ZHJhd05hdGl2ZUltYWdlICIgPDwgaW1hZ2UuZ2V0KCkgPDwgIiBzaXplICIgPDwgaW1hZ2VT
aXplIDw8ICIgaW50byAiIDw8IGRlc3RSZWN0IDw8ICIgdG9vayAiIDw8IChNb25vdG9uaWNUaW1l
Ojpub3coKSAtIHN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkgPDwgIm1zIik7CisgICAgTE9HX1dJ
VEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2
ZUltYWdlICIgPDwgaW1hZ2UuZ2V0KCkgPDwgIiBzaXplICIgPDwgaW1hZ2VTaXplIDw8ICIgaW50
byAiIDw8IGRlc3RSZWN0IDw8ICIgdG9vayAiIDw8IChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0
YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkgPDwgIm1zIik7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdQ
YXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCkBAIC0zMzks
NyArMzY0LDcgQEAgc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAt
MSk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1oZWlnaHQpOwogI2Vu
ZGlmCi0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250
ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgo
aW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2UpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LCBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVj
dCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2UpOwogfQogCiBz
dGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqIGluZm8pCkBAIC0zNDcsMTYg
KzM3MiwxOCBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqIGluZm8p
CiAgICAgY2FsbE9uTWFpblRocmVhZChbaW1hZ2UgPSBhZG9wdENGKHN0YXRpY19jYXN0PENHSW1h
Z2VSZWY+KGluZm8pKV0geyB9KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0
Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1Bh
dHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJu
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0lu
dmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUlt
YWdlLnBsYXRmb3JtSW1hZ2UoKTsKKwogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0
UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBv
cHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5j
b21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSArIGRlc3RS
ZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CkBA
IC00MjMsMTYgKzQ1MCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGCiB9CiAKIC8vIERyYXdz
IGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIC8vIEZJWE1FOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBwYXR0ZXJu
cyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJvYmFibHkgc2hvdWxkLgog
ICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwogCkBAIC00NTgsMTkgKzQ3NywxMSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVy
cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQy
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhp
Y2tuZXNzKCk7CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwb2ludDEueCgpICsgdGhpY2tu
ZXNzID09IHBvaW50Mi54KCkpOwogICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gaXNWZXJ0aWNhbExp
bmUgPyBwb2ludDIueSgpIC0gcG9pbnQxLnkoKSA6IHBvaW50Mi54KCkgLSBwb2ludDEueCgpOwpA
QCAtNTI2LDMxICs1MzcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHRydWUpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7CiAg
ICAgZHJhd1BhdGgocGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9r
ZVBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVU
cmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNTY1LDE2ICs1NjAs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBDR0Nv
bnRleHRTZXRTdHJva2VQYXR0ZXJuKGNnQ29udGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAm
cGF0dGVybkFscGhhKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRl
cm4oKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShn
ZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC02MTYsMTUgKzYwMywxMCBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmIHN0YXRlLCBDR1BhdAogICAgIHJldHVybiBzaG91bGRGaWxsIHx8IHNob3VsZFN0cm9r
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UGF0aChwYXRo
KTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CkBAIC02NTQsMTYgKzYzNiwxMSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICB9
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0
YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtNzE4LDE1ICs2OTUsMTAgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCkBAIC03OTQsMTYgKzc2Niw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAjZW5kaWYK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CkBAIC04MzMsNyArNzk3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVy
bigpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
JiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdP
d25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093
blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYg
Q0cgc2hhZG93cy4KQEAgLTg0NiwyMyArODEwLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29u
dGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwogCiAgICAg
aWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4
dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29s
IGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwg
ZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVy
biBvZmYgQ0cgc2hhZG93cy4KQEAgLTg4MSwyMCArODM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
ICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRG
aWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3Ip
CiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJh
d093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3co
KSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRv
d0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hh
ZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChk
cmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05MjQs
MTYgKzg3NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zCiAgICAgICAgIHNldENHRmlsbENv
bG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
CiAgICAgUGF0aCBwYXRoOwpAQCAtOTUxLDcgKzg5NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0CiAgICAgc2V0RmlsbENvbG9yKGNvbG9yKTsKIAogICAgIC8vIGZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKCkgYXNzdW1lcyB0aGF0IHRoZSBlZGdlcyBvZiByZWN0IGFyZSBjbGlwcGVkIG91dCwg
c28gd2Ugb25seSBjYXJlIGFib3V0IHNoYWRvd3MgY2FzdCBhcm91bmQgaW5zaWRlIHRoZSBob2xl
LgotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhh
c0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAg
ICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAg
Ly8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTk3MCw1MiArOTEzLDI4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0CiAgICAgc2V0RmlsbENvbG9yKG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRh
LT5jbGlwKHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIEZJWE1FOiBVc2luZyBDR1JlY3RJ
bmZpbml0ZSBpcyBtdWNoIGZhc3RlciB0aGFuIGdldHRpbmcgdGhlIGNsaXAgYm91bmRpbmcgYm94
LiBIb3dldmVyLCBkdWUKICAgICAvLyB0byA8cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1Jl
Y3RJbmZpbml0ZSBjYW4ndCBiZSB1c2VkIHdpdGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0
CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJhbnNmb3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNs
YXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1ZSB0byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAg
ICAgLy8gd2UgY2Fubm90IHVzZSBpdCBpbiBmb3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4K
ICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2Fu
VXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAh
PSBrQ0dDb250ZXh0VHlwZVBERiAmJiAoIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgfHwgKCFjdG0u
YigpICYmICFjdG0uYygpKSk7CisgICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29u
dGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5i
KCkgJiYgIWN0bS5jKCkpKTsKICAgICBDR1JlY3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdElu
ZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxh
dGZvcm1Db250ZXh0KCkpLCByZWN0IH07CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dHMsIDIpOwogICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENHQ29udGV4dEFk
ZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0
Zm9ybUNvbnRleHQoKSkpOwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpCkBAIC0xMDIzLDE2ICs5
NDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQog
ICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRo
LCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBDR1JlY3RaZXJvKTsKQEAgLTEwNDks
MjMgKzk2MCwxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1J
bnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCiAgICAgcmV0dXJuIGVuY2xvc2lu
Z0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAg
IHNhdmUoKTsKIApAQCAtMTA3NSwxMiArOTc3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJl
Z2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogICAgIG1fZGF0YS0+
bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAg
IENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwpAQCAtMTA4OCwxMSArOTg3
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIo
KQogICAgIHJlc3RvcmUoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIHZvaWQg
YXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKQEAgLTExMDAsNyArOTk0LDcgQEAg
c3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LAogICAgIFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAgICBV
TlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxzZQotICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpCisgICAgaWYgKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoQ0dDb250ZXh0
RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNldHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkp
CkBAIC0xMTIxLDIxICsxMDE1LDIyIEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29y
a2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICNlbmRpZgog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRT
aXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lk
IHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAob2Zmc2V0LmlzWmVy
bygpICYmICFibHVyKSB7CisgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250
ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgCiAgICAgLy8gRklYTUU6IHdlIGNvdWxk
IGF2b2lkIHRoZSBzaGFkb3cgc2V0dXAgY29zdCB3aGVuIHdlIGtub3cgd2UnbGwgcmVuZGVyIHRo
ZSBzaGFkb3cgb3Vyc2VsdmVzLgogCiAgICAgQ0dGbG9hdCB4T2Zmc2V0ID0gb2Zmc2V0LndpZHRo
KCk7CiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0gb2Zmc2V0LmhlaWdodCgpOwogICAgIENHRmxvYXQg
Ymx1clJhZGl1cyA9IGJsdXI7Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKIAotICAgIGlmICghbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykgewor
ICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpIHsKICAg
ICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0o
Y29udGV4dCk7CiAKICAgICAgICAgQ0dGbG9hdCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRv
QmFzZUNUTS5hICsgdXNlclRvQmFzZUNUTS5iICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTE1Niw3
ICsxMDUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb24KICAgICAvLyBFeHRyZW1lICJibHVy
IiB2YWx1ZXMgY2FuIG1ha2UgdGV4dCBkcmF3aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0
aW1lcywgc28gY2xhbXAKICAgICBibHVyUmFkaXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFy
cm93UHJlY2lzaW9uVG9DR0Zsb2F0KDEwMDAuMCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRX
b3JrYXJvdW5kSWZOZWVkZWQoKnRoaXMsIHhPZmZzZXQsIHlPZmZzZXQpOworICAgIGFwcGx5U2hh
ZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9m
ZnNldCk7CiAKICAgICAvLyBDaGVjayBmb3IgYW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFu
cyB0aGF0IHRoZSBjb2xvciB3YXMgbm90IHNldCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3
ZSBzaG91bGQgdGhlcmVmb3JlIGp1c3QgdXNlIHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAg
LTExNjYsNTAgKzEwNjEsNTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb24KICAgICAgICAgQ0dD
b250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9m
ZnNldCksIGJsdXJSYWRpdXMsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0
aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBDR1NpemVaZXJvLCAwLCAwKTsKLX0KKyAgICBhdXRv
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdp
ZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CiAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2Yg
dGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGltaXQobGltaXQpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xv
cldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKSk7CiAK
LSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19
CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JD
aGFuZ2UpKQorICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3Ip
OwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCisgICAg
ICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIHN0YXRlLmFscGhhKTsKIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3Qocik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9k
ZUNoYW5nZSB9KSkKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsIHNlbGVj
dENHQmxlbmRNb2RlKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsK
IAotICAgIENHQ29udGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CisgICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFu
Z2UpKQorICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0
RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKSk7CisKKyAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCisgICAg
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290
aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3VsZFNtb290aEZvbnRzKTsKKworICAgIGlmIChmbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eUNoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRl
eHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpKQorICAgICAgICBzZXRDR1NoYWRvdygqdGhpcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldE1pdGVyTGltaXQoZmxvYXQgbGlt
aXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IENHQ29udGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVX
aWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQoreworICAgIENHQ29udGV4dENsZWFyUmVjdChw
bGF0Zm9ybUNvbnRleHQoKSwgcik7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRl
LnN0cm9rZUdyYWRpZW50KSB7CkBAIC0xMjY5LDE2ICsxMTY3LDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
CiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRM
aW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGNhcCkg
ewogICAgIGNhc2UgQnV0dENhcDoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwpAQCAtMTI5MiwxNiArMTE4Miw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQogICAgIH0KIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAgZmxvYXQg
bGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgp
OyArK2kpCkBAIC0xMzEyLDE2ICsxMTk0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAgIENH
Q29udGV4dFNldExpbmVEYXNoKHBsYXRmb3JtQ29udGV4dCgpLCBkYXNoT2Zmc2V0LCBkYXNoZXMu
ZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBqb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9p
bihqb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAoam9pbikgewog
ICAgIGNhc2UgTWl0ZXJKb2luOgogICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7CkBAIC0xMzM1LDk0ICsxMjA5LDQzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogICAgIH0KIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFNjYWxlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwogICAgIG1fZGF0YS0+c2NhbGUoc2l6ZSk7CiAgICAgbV9kYXRhLT5t
X3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnJvdGF0ZShhbmdsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRS
b3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKICAgICBtX2RhdGEtPnJvdGF0ZShh
bmdsZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4LCBm
bG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZv
cm1Db250ZXh0KCksIHgsIHkpOwogICAgIG1fZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwogICAgIG1f
ZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
b25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29u
dGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICBtX2RhdGEt
PmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENHQ29udGV4dFNldENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNm
b3JtKTsKICAgICBtX2RhdGEtPnNldENUTSh0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi1BZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7
Ci0KICAgICAvLyBUaGUgQ1RNIHVzdWFsbHkgaW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9y
IGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRoZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBv
c2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCiAg
ICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRlZSB0aGUgZGV2aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdl
IGNhbiB1c2UgdGhpcyBDRyBBUEkuCkBAIC0xNDMyLDE0ICsxMjU1LDggQEAgQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2Nh
bGUpIGNvbnN0CiAgICAgcmV0dXJuIENHQ29udGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7
CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorRmxvYXRSZWN0
IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsK
LQogICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gganVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2
aWNlIHNwYWNlLiBUaGUgcm90YXRpb24gcGFydCBvZiB0aGUKICAgICAvLyBhZmZpbmUgdHJhbnNm
b3JtIG1hdHJpeCB0byBkZXZpY2Ugc3BhY2UgY2FuIG1lc3Mgd2l0aCB0aGlzIGNvbnZlcnNpb24g
aWYgd2UgaGF2ZSBhCiAgICAgLy8gcm90YXRpbmcgaW1hZ2UgbGlrZSB0aGUgaGFuZHMgb2YgdGhl
IHdvcmxkIGNsb2NrIHdpZGdldC4gV2UganVzdCBuZWVkIHRoZSBzY2FsZSwgc28KQEAgLTE0ODIs
MjcgKzEyOTksMTEgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW8KICAgICByZXR1cm4gRmxvYXRS
ZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSkKLXsKLSAgICBEYXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQoMCk7
Ci0gICAgd2lkdGhzLmFwcGVuZChyZWN0LndpZHRoKCkpOwotICAgIGRyYXdMaW5lc0ZvclRleHQo
cmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVM
aW5lcywgc3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENvbG9yIGxvY2FsU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAK
ICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdN
b2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQsIEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgpLCB0aGlj
a25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ryb2tlQ29sb3IpOwpAQCAtMTU1NiwxNiArMTM1Nyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsCiAgICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRm
b3JtQ29udGV4dCgpLCBmaWxsQ29sb3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3
YXlzKCJHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGli
bGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUg
Zm9yIGRpc3BsYXkgbGlzdHMuCi0gICAgfQotCiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxS
ZWYgPSBsaW5rLmNyZWF0ZUNGVVJMKCk7CiAgICAgaWYgKCF1cmxSZWYpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE1NzksMzYgKzEzNzIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiAgICAgQ0dQ
REZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250ZXh0LCB1cmxSZWYuZ2V0KCksIENHUmVjdEFwcGx5
QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0KSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5IG1vZGUpCi17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2Fi
bGVkKCkpOwotCi0gICAgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5ID0ga0NHSW50ZXJw
b2xhdGlvbkRlZmF1bHQ7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25E
ZWZhdWx0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpE
b05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbk5vbmU7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAg
ICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Mb3c7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IGtD
R0ludGVycG9sYXRpb25NZWRpdW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uSGln
aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25R
dWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAv
LyBTaG91bGQgYmUgY2FsbGVkIGZvciBDQSBDb250ZXh0LgogICAgIEFTU0VSVChtX2RhdGEpOwog
ICAgIGlmIChpc0xheWVyQ29udGV4dCkKQEAgLTE2MTcsMTI5ICsxMzgyLDI4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiAg
ICAgICAgIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJj0gfklzTGF5ZXJDR0NvbnRleHQ7CiB9CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Q0c6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2RhdGEgJiYgKG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJc0xheWVyQ0dDb250ZXh0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNB
Y2NlbGVyYXRlZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIGZvciBDQSBDb250ZXh0
LgotICAgIEFTU0VSVChtX2RhdGEpOwogICAgIGlmIChpc0FjY2VsZXJhdGVkKQogICAgICAgICBt
X2RhdGEtPm1fY29udGV4dEZsYWdzIHw9IElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiAgICAgZWxz
ZQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0FjY2VsZXJhdGVkQ0dDb250
ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBj
b25zdAotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJlbmRlcmluZ01v
ZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLQotICAgIHJldHVybiBtX2RhdGEt
Pm1fY29udGV4dEZsYWdzICYgSXNBY2NlbGVyYXRlZENHQ29udGV4dDsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgCi0gICAgYm9vbCBmaWxsID0gbW9k
ZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOwotICAgIGJvb2wgc3Ryb2tlID0gbW9k
ZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7Ci0gICAgaWYgKGZpbGwgJiYgc3Ry
b2tlKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4
dEZpbGxTdHJva2UpOwotICAgIGVsc2UgaWYgKGZpbGwpCi0gICAgICAgIENHQ29udGV4dFNldFRl
eHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0RmlsbCk7Ci0gICAgZWxzZSBpZiAoc3Ryb2tl
KQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dFN0
cm9rZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
c2V0Q0dTdHJva2VDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNz
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lV2lk
dGgocGxhdGZvcm1Db250ZXh0KCksIHN0ZDo6bWF4KHRoaWNrbmVzcywgMC5mKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNldENHRmlsbENvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4
dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91
bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
Ci0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMocGxhdGZvcm1Db250ZXh0KCksIGVu
YWJsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0
IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRB
bHBoYShwbGF0Zm9ybUNvbnRleHQoKSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCitSZW5kZXJpbmdNb2RlIEdyYXBoaWNz
Q29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShwbGF0Zm9ybUNvbnRleHQoKSwgc2VsZWN0
Q0dCbGVuZE1vZGUoY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSkpOworICAgIHJldHVybiBt
X2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNBY2NlbGVyYXRlZENHQ29udGV4dCA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2
aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgLy8gQ29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2Ug
Q1RNIG9mIGEgSGlEUEkgY29udGV4dCB0byBoYXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0
byBpdC4KICAgICAvLyBGYWlsaW5nIHRvIGNoYW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBj
YXVzZSBjZXJ0YWluIENHIGZlYXR1cmVzLCBzdWNoIGFzIGZvY3VzIHJpbmdzLApAQCAtMTc0Nywx
MyArMTQxMSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgQ0dDb250ZXh0U2V0QmFzZUNU
TShwbGF0Zm9ybUNvbnRleHQoKSwgQ0dBZmZpbmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRC
YXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpKSwgZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxl
RmFjdG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBz
b2xpZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmls
bFBhdHRlcm4pIHsKICAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBAIC0xNzY0
LDEzICsxNDIzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0
KGNvbnRleHQsIGVsbGlwc2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1T
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICAvLyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0
IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRp
ZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQ
YXRoKGVsbGlwc2UpOwpAQCAtMTc4MSwxOCArMTQzNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBD
R0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0KGNvbnRleHQsIGVsbGlwc2UpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Q0c6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAg
IEZsb2F0UmVjdCByZWN0ID0gZGVzdFJlY3Q7CkBAIC0xODAyLDE1ICsxNDUxLDkgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UmVjdCYKICAgICBDR1BERkNvbnRleHRTZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29udGV4dCwgbmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB0cmFuc2Zvcm1lZFJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQogICAgIENHUG9pbnQg
dHJhbnNmb3JtZWRQb2ludCA9IENHUG9pbnRBcHBseUFmZmluZVRyYW5zZm9ybShwb3NpdGlvbiwg
Q0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKTsKICAgICBDR1BERkNvbnRleHRBZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29udGV4dCwgbmFtZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCB0cmFuc2Zvcm1l
ZFBvaW50KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCmluZGV4IDI1YTA4NjZlMmYzODY5ZTFlN2UxZjllNjYy
NmJlYzIwNWJiMGRjNzUuLjVlMjA2NzY5ZWJmZjhhZDkxMDI5MTkzNjIyY2ZkMWMyZWM0ZjI4OWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaApAQCAtNzIsNSArNzIsMTA4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3NhdmVBbmRSZXN0b3JlOwogfTsKIAorY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyhDR0NvbnRleHRSZWYpOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEdyYXBoaWNz
Q29udGV4dENHKEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJl
bW92ZWQuCisjZW5kaWYKKworICAgIH5HcmFwaGljc0NvbnRleHRDRygpOworCisgICAgYm9vbCBo
YXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250
ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJl
c3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVy
bigpIGZpbmFsOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQg
ZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisKKyAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBhcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgZmluYWw7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgZmluYWw7CisKKyAgICB2b2lkIHNldElzQ0FM
YXllckNvbnRleHQoYm9vbCkgZmluYWw7CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QgZmluYWw7CisKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFs
OworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxl
OjpFdmVuT2RkKSBmaW5hbDsKKworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOworICAgIHZvaWQgc2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgZmluYWw7CisgICAgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworCisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9h
dFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmlu
YWw7CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisKKyAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKworICAgIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisKKyAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOworI2VuZGlmCisKKyAg
ICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVz
cywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGlu
ZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisK
KyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworCisgICAgYm9v
bCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3Qg
ZmluYWw7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKK307CisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwCmluZGV4IGRkMzQxYjE0MjE2YzJlMmM5ZDQ2ZDJhYjA1YjlhYTUyZDdk
OTc0ZDIuLmJjYmZjZTA5MzI4MWI2MzJkYmM5OGIzZTI2MTIxN2VmNzNlMWQxZDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dD
b250ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dENHPihjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgZGF0YSwgbnVtQnl0ZXMs
IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CiAgICAgICAgIGZhc3RGcmVl
KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGNlZDNhZGJhMmI0YzEyZjBlODIzYTA4OGQyNWZj
MTVhYTg4OWE0MjcuLmYzM2RjZTkxNmRlYjM2ZTliMjUyYTI1YjgyODRlZDVkMWE4YWIxZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAt
MzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAt
MjQ0LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgQ0dDb250ZXh0QmVn
aW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1Q
YXRoKCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsK
KyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ry
b2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBib29sIGhpdFN1Y2Nlc3Mg
PSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9r
ZSk7CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVj
dChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2sKICAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAogICAgIGlmIChzdHJva2VT
dHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChj
b250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQxYTg5N2ZhYTNlNWRmZGFiMjNkZjgxMzQuLjA1YTM5
MTY1NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRkMDg4YzhkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMzAsNyArMzAsNyBA
QAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQzLDcg
KzQzLDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4
dFJlZiBjb250ZXh0KQogICAgIGlmICghcGxhdGZvcm1JbWFnZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0Rldmlj
ZVBpeGVscygKKyAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dENHKGNvbnRleHQpLnJv
dW5kVG9EZXZpY2VQaXhlbHMoCiAgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lk
dGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsKICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9u
dENhc2NhZGVDb2NvYS5tbQppbmRleCBlMjlhZWNkZmJmZTY4MDA2N2ZjYmExOTM5ZmFlNTFlZGM4
NzkyZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3OGFiY2E4N2JlNDIyZmI1ODFjZjc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1w
b3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENv
Y29hLm1tCmluZGV4IDE0MjFlYjkwZDdhNDlkMWU0ODI0YjVhYzg5Njg4MTNhMzA1NDNmN2QuLjM4
OGFmY2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5NjdmMGU1MzU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dENvY29hLm1tCkBAIC0xMDYsNDggKzEwNiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0
aAogICAgIGRyYXdGb2N1c1JpbmcoY29udGV4dCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkK
KyAgICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNldCwg
Y29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29u
dGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3IpOwogfQog
CiAjaWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0
QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91
YmxlIHRpbWVPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyBib29sIGRyYXdGb2N1
c1JpbmdUb0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1
c1JpbmdQYXRoLCBkb3VibGUsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBVTlVTRURfUEFS
QU0odGltZU9mZnNldCk7CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENH
Q29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0aCk7CiAgICAgcmV0dXJuIGRyYXdG
b2N1c1JpbmdBdFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgo
KSwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlz
TnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSAvLyBGSVhNRTogaW1w
bGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4KKyAgICBpZiAocGF0aC5pc051bGwo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNSaW5nVG9D
b250ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCB0aW1l
T2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCi0gICAg
ICAgIHJldHVybjsKLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQ
YXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoY29uc3QgYXV0
byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0
KCksIDAsIENHUmVjdChyZWN0KSk7CkBAIC0xNTcsMTYgKzE0Miw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91
YmxlIHRpbWVPCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+
IGZvY3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9y
IChhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0
aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNldCwgLW9mZnNldCkpOwpAQCAtMTk5
LDExICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xvckZvck1hcmtlckxpbmVTdHlsZShE
b2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSBzdHlsZSwgYgogICAgIH0KIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBXZSB3YW50IHRvIGZpbmQgdGhlIG51bWJl
ciBvZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNvbHZpbmcgdGhlIGVxdWF0aW9uczoKICAgICAvLyBk
b3REaWFtZXRlciA9IGhlaWdodAogICAgIC8vIGRvdERpYW1ldGVyIC8gZG90R2FwID0gMTMuMjQ3
IC8gOS40NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbQppbmRleCBiZTM0MzA0YjJkMTA3MzU2MzFhYjhmYTkzOTc3ODRmZjBkY2U1
NjRjLi4yYWJjYzZmNDA0NjFmZTFlYmFjOTYyMDJlODVhYzVhNGJlZWNlZWY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBA
IC0zNjksNyArMzY5LDcgQEAgR3JhcGhpY3NDb250ZXh0JiBJT1N1cmZhY2U6OmVuc3VyZUdyYXBo
aWNzQ29udGV4dCgpCiAgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4g
Km1fZ3JhcGhpY3NDb250ZXh0OwogCi0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOworICAgIG1fZ3JhcGhp
Y3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oZW5zdXJlUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4
dCh0cnVlKTsKIAogICAgIHJldHVybiAqbV9ncmFwaGljc0NvbnRleHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDIwZGFlZjRi
YjQxZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAwNGYzZjcuLjNlNTUxYjg1NzY2Njc0NDg1NTg1OWVj
OThiMWVjYTA2MzU5YzI5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5o
IgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogI2lmIFVTRShDT1JFX1RFWFQpCiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgpAQCAtNjgsNyArNjksOSBAQCBwdWJs
aWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZh
dGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVT
RShDT1JFX1RFWFQpCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJu
YWxDb250ZXh0KCk7CisjZW5kaWYKIAogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29u
dGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwpAQCAtOTEsNyArOTQsMTEgQEAgcHJp
dmF0ZToKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKLSAgICBHcmFwaGljc0NvbnRleHQgbV9p
bnRlcm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9URVhUKQorICAgIFVuaXF1ZVJlZjxHcmFw
aGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OworI2VuZGlmCisKICAgICBjb25zdCBGb250
KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Nt
b290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFm
ZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlw
aHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApp
bmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzljZTU5OGI1Mjc3MDJjOGFhMzNkLi5jYWNmNzY0ZjVk
ZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkxYzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVj
b3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRl
eHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhCiAgICAgcmV0
dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotR3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNv
cmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK1VuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+
IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKIHsKICAgICBhdXRv
IGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykp
OwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgp
LCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFj
az4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcgKzg1LDcgQEAgR3JhcGhpY3NDb250ZXh0IERyYXdH
bHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAgICBDR0NvbnRleHREZWxl
Z2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWlu
dGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29u
dGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJbWFnZSwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRl
eHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0ltYWdlKSk7CiAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVsZWdhdGUoY29udGV4dERlbGVnYXRlLmdldCgpLCBr
Q0dDb250ZXh0VHlwZVVua25vd24sIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAogRHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1
Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtMTE5LDM0ICsxMjAsMzEgQEAgdm9p
ZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUlu
dGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQog
ewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwogICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZp
bGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgbV9pbnRl
cm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5n
cmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3Jt
KTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
cGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4p
Ci0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKICAg
ICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQo
KSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0
cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBp
ZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgqbV9v
cmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tl
U3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VS
VChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0
ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCpt
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAgfQogCi0gICAgbV9pbnRl
cm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOworICAgIG1faW50ZXJuYWxD
b250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CiAKLSAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmln
bm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChjb250ZXh0U3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbnRlcm5hbENv
bnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFs
U3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOworICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3Rh
dGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRT
aGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgY29udGV4dFN0YXRlLnNoYWRv
d1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0VGV4dERyYXdpbmdNb2Rl
KGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CiB9CiAKIHZv
aWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQm
IGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zMDIsNyArMzAwLDcg
QEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdT
dGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgcmV0dXJuOwogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3NpdGlvbiA9IENHQ29udGV4dEdldFRleHRQb3NpdGlv
bihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYXV0byB0ZXh0UG9z
aXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi54KTsKICAgICBBU1NFUlQo
IXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpAQCAtMzIxLDcgKzMxOSw3IEBAIHZvaWQgRHJhd0ds
eXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0
YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91IHNldCB0aGVzZSB0d28gZXF1YWwgdG8gZWFjaCBv
dGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3UgZ2V0CiAgICAgLy8gQ1RNICogY3VycmVudFRleHRN
YXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRyaXgKICAgICAvLyBjdXJyZW50VGV4
dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5hbFRleHRNYXRyaXgpID0gWAotICAgIEFmZmluZVRy
YW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRl
cm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdXJy
ZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtRml4dXA7CiAgICAg
aWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXggPSBtX29yaWdpbmFsVGV4dE1hdHJp
eC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZpeHVwID0gY3VycmVudFRleHRNYXRyaXggKiBpbnZl
cnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDU0ZDg1NDcxMjNmODk0N2Q2ZjJmYWNk
N2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3NmZlOTEyZDY4MTAyMDc2MTAwMWNjMjRmNjg2ODg2
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5j
cHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgUmVjb3Jk
ZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250
ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVj
b3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0
ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVn
YXRlKQogewogfQogCkBAIC00NiwxMyArNDQsNiBAQCB2b2lkIERyYXdpbmdDb250ZXh0OjpzZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogICAg
IG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNldCgpOwogfQogCi1SZWNvcmRlciYgRHJhd2luZ0Nv
bnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBhdXRvKiBncmFwaGljc0NvbnRleHRJbXBsID0gY29u
dGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4oKmdyYXBoaWNzQ29udGV4dEltcGwpOwotfQotCiB2
b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0KQogewogICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmluZGV4IGQzN2MwNzM1YmVi
NTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRkZGVmODU3NTI4YzgyNzllNGYxZWZi
ZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBEcmF3aW5nQ29udGV4dCB7CiBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBSZWNv
cmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7CiAKKyAgICAvLyBGSVhNRTogRGVkdXBsaWNhdGUg
dGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRlciYgcmVjb3JkZXIoKSB7
IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkg
eyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0pOyB9CiAgICAgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0
IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7
IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVw
bGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3RlY3RlZDoKLSAgICBHcmFw
aGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVyIG1fY29udGV4dDsKICAgICBEaXNw
bGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbk1lbW9yeURpc3Bs
YXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApp
bmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJjMGEzLi5mMjIyZTIxODNh
MzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKIAogdm9pZCBE
cmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotI2lmIFVT
RShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmgKaW5kZXggYTFkNTdhMDY4NWYwMzM4ZjdkZGFmMjZlMDhhMjIyZWEzMDY0YTcwMS4u
ZGM2ZjBjOTYwYWNjZTMzNjg0MzM1ZDVmNTMyZDAwMmJmYTk3NTk3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRl
bXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1YmxpYzoKICAgICBSZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAgICAg
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7
Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5j
b2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25h
bDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkgKzMzMSw3IEBAIHZvaWQg
U2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVy
IDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dC
bHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotI2lmIFVTRShDRykK
LSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotI2VuZGlm
IC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwog
ICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3LDEyIEBAIE9wdGlvbmFs
PFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAKICAgICAgICAg
c3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKIAotI2lmIFVT
RShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAg
ICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotICAgICAgICBpZiAoIXNo
YWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+
IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsK
KyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lS
YWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cpCisgICAg
ICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRv
d1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggOWRiNWE1YTgx
MDFhOTlkZDVkYzZhZmMwMjBlM2Y1NmJkY2VmZjNjOS4uYzFlYWM1Mzk1YWJjODFjMjdiOTlmOTZl
NWVhMzI1YWRhNTU0ODFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlz
cGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJh
d0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IEdy
YXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxp
c3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBE
cmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogICAgICwgbV9k
ZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdH
bHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtNTAsOSAr
NTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQo
eyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAKLVJlY29yZGVyOjpSZWNv
cmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogR3JhcGhpY3NDb250ZXh0
SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQubV9kaXNwbGF5TGlzdCkK
K1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlz
cGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVnYXRlKQogICAgICwgbV9p
c05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIHBhcmVudC5t
X2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24oKSkKQEAgLTE2Niwx
MSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0
CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5kZXJpbmdNb2RlKCkgOiBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclNo
YWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCiB2b2lkIFJlY29yZGVy
OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBlbmQ8U2V0TGluZUNhcD4o
bGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDExIEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZERyYXdH
bHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCCiAK
IHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1h
Z2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgLy8gRklY
TUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMgd2hhdCB1c2VkIHRvIGhhcHBlbi4KKyAgICBpZiAo
IWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Rpc3BsYXlMaXN0LmNhY2hlSW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdl
QnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5LDcgQEAgdm9pZCBSZWNvcmRlcjo6c2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5z
Zm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgLy8g
RklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVEZXZpY2VTY2FsZS4KICAg
ICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwpAQCAtMjk4LDggKzI5Nyw5IEBAIHZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQogCi12
b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBi
b29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7CisgICAg
Ly8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHlsZSBub3QgdXNlZD8KICAgICBhcHBlbmQ8RHJhd0xp
bmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCkBAIC0zMjgsNiArMzI4LDE4IEBA
IHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihy
ZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9p
ZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29u
c3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBj
b25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lk
IFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYXBwZW5k
PEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUyLDkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgYXBwZW5kPENs
aXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3Vu
ZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgV1RGTG9n
QWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIERp
c3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgs
IDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgp
LmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC00NTIs
MzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAgIGFwcGVuZDxDbGlwVG9J
bWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRl
c3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikKK0dy
YXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IFJlY29yZGVyOjpjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRp
b25Db2xvclNwYWNlIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+
JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4dCBuZXN0ZWRDb250ZXh0
KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgYXV0byBpbml0aWFsQ2xp
cCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CisgICAgYXV0
byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUo
KSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1hZ2VCdWZmZXIncyBp
bml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgICAgICBG
bG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxl
KCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZEludFNpemUoZGVzdGluYXRp
b24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlh
bENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0gICAgICAgIGluaXRpYWxD
VE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgaW5pdGlhbENU
TS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICAvLyBUaGUgaW5p
dGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgorICAgIEFmZmluZVRy
YW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5j
bHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhT
Y2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFu
ZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7CisgICAg
aW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGluaXRp
YWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29yZGVyKCp0aGlzLCBjb250
ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSkpOwot
ICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMsIEdyYXBoaWNzQ29udGV4
dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBhcHBlbmQ8QmVnaW5DbGlw
VG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlKTsKICAgICBkcmF3aW5n
RnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENsaXBUb0RyYXdpbmdDb21t
YW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBSZWNvcmRl
cjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJiBwbGF5ZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gQ2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYgRU5BQkxFKFZJREVPKQog
dm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmll
cigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXll
ciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIEFTU0VSVChwbGF5
ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIs
IGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjcsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6
OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29s
b3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAgaWYgKGdldFNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CiAgICAgICAgIEZs
b2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3Zl
KHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50
aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTUsNiBAQCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50U3Rh
dGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBj
b25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOwotfQotCiB2b2lk
IFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewog
ICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuaAppbmRleCA3NjMzOWFiZThhNjA4MDRiYzcyY2MwOTFmZjRkMjFhZjE0Y2FlMDU0Li4wODUy
ZTkxYzM2NTZmNTI2NGYyMzZlNTBhZGIyZDE0ZGZlMjZiZGZkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEaXNwbGF5
TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5j
bHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBG
b3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5n
T3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgUmVjb3JkZXIgOiBw
dWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFzcyBEZWxlZ2F0ZTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6
OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOworICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxl
Z2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNv
bnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3Jt
YXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CkBAIC03NywxNSAr
NzcsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBEcmF3R2x5cGhz
UmVjb3JkZXI7Ci0gICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOworICAgIFJlY29yZGVyKFJl
Y29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKTsKIAog
ICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNv
bnN0IG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhpcz8KKyAgICBib29s
IGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0OwogICAgIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBudWxscHRyOyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qg
b3ZlcnJpZGU7CiAKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElz
Q0FMYXllckNvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0NBTGF5ZXJDb250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZvaWQgZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBvdmVycmlkZSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRlOwpAQCAtMTA1LDcgKzEx
NCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogCi0jaWYgVVNFKENHKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJu
KCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyMCwxNCArMTI5LDIwIEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAorI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNl
dCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisjZW5kaWYKKwog
ICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwog
CkBAIC0xMzYsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92
ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3Jh
cGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIG92ZXJyaWRlOwogICAg
IHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTE0NSwxMiArMTYwLDEy
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJv
dW5kcygpIG92ZXJyaWRlOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdD
b21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWlu
dEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZTsKICNlbmRp
ZgogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKQEAg
LTE3Myw3ICsxODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAgICAgYXV0byBpdGVtID0gVChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAg
ICAgICAgICAgaWYgKGF1dG8gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoZ3JhcGhpY3NDb250ZXh0
KCkpKQorICAgICAgICAgICAgaWYgKGF1dG8gcmVjdCA9IGl0ZW0ubG9jYWxCb3VuZHMoKnRoaXMp
KQogICAgICAgICAgICAgICAgIG1fZGlzcGxheUxpc3QuYWRkRHJhd2luZ0l0ZW1FeHRlbnQoZXh0
ZW50RnJvbUxvY2FsQm91bmRzKCpyZWN0KSk7CiAgICAgICAgICAgICBlbHNlIGlmIChhdXRvIHJl
Y3QgPSBpdGVtLmdsb2JhbEJvdW5kcygpKQogICAgICAgICAgICAgICAgIG1fZGlzcGxheUxpc3Qu
YWRkRHJhd2luZ0l0ZW1FeHRlbnQoKnJlY3QpOwpAQCAtMTk1LDcgKzIxMCw2IEBAIHByaXZhdGU6
CiAgICAgRmxvYXRSZWN0IGV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmKSBj
b25zdDsKICAgICAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGN0bSgpIGNvbnN0OwotICAg
IGNvbnN0IEZsb2F0UmVjdCYgY2xpcEJvdW5kcygpIGNvbnN0OwogCiAgICAgc3RydWN0IENvbnRl
eHRTdGF0ZSB7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBjdG07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KaW5kZXggNjViY2E2NzBmOTI4
NmQyNWExOTUxOTIxYjg1ZjBhMDVhMDE1MmQ1MS4uODlkODgyYzU3ZjQ3NjFlNTQ2ZGQ0MjQ3MDFm
MzNkMmZiMjAzMWYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgVVNFKEFQUEtJVCkKIAor
I2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dC5oIgogI2ltcG9ydCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KICNpbXBv
cnQgPHd0Zi9Mb2NrLmg+CkBAIC04NSw3ICs4Niw3IEBAIHN0YXRpYyBPcHRpb25hbDxTUkdCQTx1
aW50OF90Pj4gbWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IoTlNDb2xvciAqY29sb3IpCiAgICAg
ICAgIFJldGFpblB0cjxOU0JpdG1hcEltYWdlUmVwPiBvZmZzY3JlZW5SZXAgPSBhZG9wdE5TKFtb
TlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5pdFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5pbCBwaXhl
bHNXaWRlOjEgcGl4ZWxzSGlnaDoxCiAgICAgICAgICAgICBiaXRzUGVyU2FtcGxlOjggc2FtcGxl
c1BlclBpeGVsOjQgaGFzQWxwaGE6WUVTIGlzUGxhbmFyOk5PIGNvbG9yU3BhY2VOYW1lOk5TRGV2
aWNlUkdCQ29sb3JTcGFjZSBieXRlc1BlclJvdzo0IGJpdHNQZXJQaXhlbDozMl0pOwogCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBiaXRtYXBDb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwLmdldCgpXS5DR0NvbnRl
eHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBiaXRtYXBDb250ZXh0KFtOU0dyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwLmdl
dCgpXS5DR0NvbnRleHQpOwogICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9j
YWxDb250ZXh0KGJpdG1hcENvbnRleHQpOwogCiAgICAgICAgIFtjb2xvciBkcmF3U3dhdGNoSW5S
ZWN0Ok5TTWFrZVJlY3QoMCwgMCwgMSwgMSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCmluZGV4IGNlN2FiZDdiNGU5NWVlYjM4OTZhZTVk
OWIzY2E0ZDFjZTBmZWI5ZWYuLjU1NDgwYjUyYjkxZTAyODYyZmYwYmZjMTMwNmRhODBkNjAzYzU0
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5
ZXIubW0KQEAgLTI2LDcgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiV2Vi
TGF5ZXIuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2ltcG9ydCAiR3JhcGhpY3NMYXllckNBLmgiCiAjaW1wb3J0ICJQbGF0
Zm9ybUNBTGF5ZXIuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgpAQCAtNTEs
NyArNTEsNyBAQCAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7
CiAgICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxh
eWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllcikgewotICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwor
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4
dCk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6UmVwYWludFJlY3RMaXN0IHJl
Y3RzVG9QYWludCA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6Y29sbGVjdFJlY3RzVG9QYWlu
dChncmFwaGljc0NvbnRleHQsIGxheWVyLmdldCgpKTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyOjpkcmF3TGF5ZXJDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGxheWVyLmdldCgp
LCByZWN0c1RvUGFpbnQsIHNlbGYuaXNSZW5kZXJpbmdJbkNvbnRleHQgPyBXZWJDb3JlOjpHcmFw
aGljc0xheWVyUGFpbnRTbmFwc2hvdHRpbmcgOiBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRO
b3JtYWwpOwogICAgIH0KQEAgLTEyOCw3ICsxMjgsNyBAQCAtICh2b2lkKWRyYXdJbkNvbnRleHQ6
KENHQ29udGV4dFJlZiljb250ZXh0CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBh
dXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JM
YXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgaWYgKGxheWVyICYmIGxheWVyLT5vd25l
cigpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
Y29udGV4dCk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29u
dGV4dChjb250ZXh0KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRl
eHQodHJ1ZSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChsYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCmluZGV4IDM4NWRmNjE2ODI3
NmFiZmZmNTdmNzE1NDgzNDdkOWMwYjE5ZjcyNDUuLjAyNDI4Y2MyMzk4NDQ5OGQyMTc3MmIyZDdi
YTkxMDNhNTc4NjAyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwCkBAIC03Miw5ICs3Miw4IEBAIGF1dG8gY3JlYXRlQ29t
bWFuZCgpIC0+IHN0ZDo6ZW5hYmxlX2lmX3Q8c3RkOjppc19iYXNlX29mPE9wZXJhdGlvbkRhdGE8
PiwgVD46OnZhCiAgICAgcmV0dXJuIG1ha2VVbmlxdWU8VD4oKTsKIH0KIAotQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQorQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmIGNvbW1hbmRMaXN0KQorICAgIDogbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKIHsKICAg
ICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgeyB9LCB7IH0sIEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0
KCkgfSk7CiB9CkBAIC0xNTQsMTAgKzE1Myw2IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwCiAg
ICAgfQogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyU2hhZG93KCkKLXsK
LX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGlu
ZUNhcCkKIHsKICAgICBzdHJ1Y3QgU2V0TGluZUNhcCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9u
LCBPcGVyYXRpb25EYXRhPExpbmVDYXA+IHsKQEAgLTI1MCw3ICsyNDUsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMjcwLDcgKzI2NSw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVj
dCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQpAQCAtMjkyLDcgKzI4Nyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAs
IHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKSkpOwogfQogCkBAIC0zMTYsNyArMzEx
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBjb2xvciwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IpKTsKIH0KIApAQCAtMzQ2LDcgKzM0MSw3
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRSZWN0CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUm91bmRlZFJlY3Q+
KHJvdW5kZWRSZWN0LCBjb2xvciwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC0zNjcsNyArMzYyLDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnMKICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFNKGNvbG9yKTsK
LSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9sZT4ocmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKSkpKTsKKyAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZT4ocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsK
IH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQpAQCAtMzg2LDcgKzM4MSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxQYXRoPihwYXRoLCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApA
QCAtNDA4LDcgKzQwMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbEVsbGlwc2U+KHJlY3Qs
IENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwog
fQogCkBAIC00MjgsNyArNDIzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8U3Ryb2tlUmVjdD4ocmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00NDgsNyArNDQzLDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxTdHJva2VQYXRoPihwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00NzAsNyArNDY1LDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZUVsbGlwc2U+KHJlY3QsIENhaXJvOjpTdHJva2VT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTUyMyw3
ICs1MTgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaAogICAgICAgICB9CiAgICAgfQogCi0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3R2x5cGhz
PihDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAog
ICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwKICAgICAgICAgUmVmUHRy
PGNhaXJvX3NjYWxlZF9mb250X3Q+KGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpKSwK
QEAgLTU1Myw3ICs1NDgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsbwogICAgIH07CiAKICAg
ICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdOYXRpdmVJbWFnZT4obmF0aXZlSW1hZ2UucGxhdGZvcm1J
bWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMob3B0aW9ucywg
c3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSksIHN0YXRlLmFscGhhLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTU5Myw3ICs1ODgsNyBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd1JlY3Q+KHJlY3QsIGJvcmRlclRoaWNrbmVzcywg
c3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpKTsK
IH0KIApAQCAtNjEzLDExICs2MDgsMTEgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlh
cykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKK3ZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKIHsKICAgICBzdHJ1Y3Qg
RHJhd0xpbmVzRm9yVGV4dCBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBPcGVyYXRpb25EYXRh
PEZsb2F0UG9pbnQsIGZsb2F0LCBEYXNoQXJyYXksIGJvb2wsIGJvb2wsIENvbG9yPiB7CiAgICAg
ICAgIHZpcnR1YWwgfkRyYXdMaW5lc0ZvclRleHQoKSA9IGRlZmF1bHQ7CkBAIC02MzMsNyArNjI4
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdMaW5lc0ZvclRl
eHQ+KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMs
IHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTY3MiwxNCArNjY3LDEwIEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RHJhd0VsbGlwc2U+KHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsK
LX0KLQogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKICAgICBzdHJ1Y3QgRHJhd0ZvY3VzUmluZyBmaW5hbCA6IFBhaW50aW5nT3BlcmF0aW9uLCBP
cGVyYXRpb25EYXRhPFBhdGgsIGZsb2F0LCBDb2xvcj4gewpAQCAtOTAzLDcgKzg5NCw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQogICAgIHN0YXRlLmN0bUludmVyc2UgPSBpbnZlcnNlLnZhbHVlKCk7CiB9CiAK
LUFmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCitBZmZpbmVUcmFuc2Zvcm0gQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBj
b25zdAogewogICAgIHJldHVybiBtX3N0YXRlU3RhY2subGFzdCgpLmN0bTsKIH0KQEAgLTEwMzIs
NyArMTAyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAgICAgfQogfQogCi1JbnRSZWN0IENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBhdXRvJiBzdGF0ZSA9IG1fc3RhdGVT
dGFjay5sYXN0KCk7CiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3Qoc3RhdGUuY3RtSW52ZXJz
ZS5tYXBSZWN0KHN0YXRlLmNsaXBCb3VuZHMpKTsKQEAgLTEwNzYsMTUgKzEwNjcsMTcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjphcHBlbmQoc3RkOjp1bmlxdWVfcHRyPFBhaW50aW5n
T3BlcmF0aW9uPiYmIGNvbW1hbmQKICAgICBtX2NvbW1hbmRMaXN0LmFwcGVuZChXVEZNb3ZlKGNv
bW1hbmQpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1w
bGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDY1ODkzYjBiMmJjMDZiYmI1MGQ1
YzA0YWQ3Yjk3NmI4YmZkNmYwYmMuLjAzMjM5YzZjY2E4MmJkZjRkMTdjOWJiN2U3N2E4NWI5NGMx
ZmYwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAogbmFtZXNwYWNlIE5pY29z
aWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewogcHVibGljOgotICAgIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFpbnRpbmdP
cGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAg
IHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3Qg
V2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAtNTMsNiArNTIsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJy
aWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdl
YkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRl
OwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3Qg
Y2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBXZWJDb3JlOjpEZXN0aW5h
dGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik+
JiYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0
IFdlYkNvcmU6Ok1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJv
LmNwcAppbmRleCAwMDExMDBmNzc3ODFlNGNmNWI4YzFkODdhMmM2YzM3Y2NlOGFhZjU0Li40OWFi
Y2FhNDUyNTMxNDUzODRiMzU1ODg0Njg2N2UwY2ZiZDA2YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0Nv
bnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMiw3ICszMiw3
IEBACiAjaWYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXlDYWlyby5oIgpAQCAtNzEsNyArNzEsNyBAQCBQYWludGluZ0NvbnRleHRDYWly
bzo6Rm9yUGFpbnRpbmc6OkZvclBhaW50aW5nKEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgbV9jYWly
by5jb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY2Fpcm8uc3VyZmFjZS5nZXQoKSkp
OwogICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRDYWlybz4obV9jYWlyby5jb250ZXh0LmdldCgpKTsKLSAgICBtX2dyYXBoaWNzQ29udGV4
dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PihXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoKm1fcGxhdGZvcm1Db250ZXh0KSk7Cisg
ICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvPigqbV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBQYWludGluZ0NvbnRleHRDYWlybzo6
Rm9yUGFpbnRpbmc6On5Gb3JQYWludGluZygpCkBAIC0xMDQsMTEgKzEwNCw3IEBAIHZvaWQgUGFp
bnRpbmdDb250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpyZXBsYXkoY29uc3QgUGFpbnRpbmdPcGVy
YXRpb25zJiBwYWludGluCiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6OkZv
clJlY29yZGluZyhQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW5nT3BlcmF0aW9ucykKIHsKLSAg
ICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PigKLSAgICAgICAgWyZwYWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcj4oY29udGV4dCwgcGFpbnRpbmdPcGVyYXRpb25zKTsKLSAgICAg
ICAgfSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI+KHBhaW50aW5nT3BlcmF0aW9ucyk7CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJv
OjpGb3JSZWNvcmRpbmc6On5Gb3JSZWNvcmRpbmcoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAppbmRleCA4MzBhZWQwODIyZjU3NWQ1MmM4YmRiZDFjZTI4MmI4ZWJhN2Q1MGJi
Li4wZjlkODcyOWU3MWRkNDJlODBlNTllZWIzOGJhODFjMDRiZWNmM2ZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKQEAgLTY3LDMyICs2NywxOSBA
QCBzdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gQ0dDb250ZXh0V2l0aEhEQyhIREMgaGRj
LCBib29sIGhhc0FscGhhKQogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1HcmFwaGljc0NvbnRl
eHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250
ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCisgICAgOiBH
cmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEpKQogewotICAg
IHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQotewotICAgIGlmICghaGRjKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpOwogICAgIG1fZGF0YS0+
bV9oZGMgPSBoZGM7Ci0gICAgaWYgKG1fZGF0YS0+bV9jZ0NvbnRleHQpIHsKLSAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAg
ICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAgIHNldFBsYXRm
b3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQogfQogCiAvLyBGSVhNRTogSXMg
aXQgcG9zc2libGUgdG8gbWVyZ2UgZ2V0V2luZG93c0NvbnRleHQgYW5kIGNyZWF0ZVdpbmRvd3NC
aXRtYXAgaW50byBhIHNpbmdsZSBBUEkKIC8vIHN1aXRhYmxlIGZvciBhbGwgY2xpZW50cz8KIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3Qg
SW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNy
ZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5j
eUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNyZWF0
ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAgICAgIGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTExMCw3ICs5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0Nv
bnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRBbHBoYUJs
ZW5kID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFOb25l
U2tpcEZpcnN0KSkpOwogCiAgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSkpOwotICAgIENHQ29udGV4dERyYXdJbWFn
ZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CisgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2NnQ29udGV4
dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2UuZ2V0KCkpOwogICAgIAogICAgIC8vIERlbGV0ZSBhbGwg
b3VyIGp1bmsuCiAgICAgOjpEZWxldGVEQyhoZGMpOwpAQCAtMTI0LDIxICsxMTEsMTggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdl
LCBjb25zdCBJbnRQb2ludCYgcG8KICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGltYWdl
RGF0YS5nZXQoKSkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWln
aHQoKSwgOCwgMzIsIGltYWdlLT5ieXRlc1BlclJvdygpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIENH
Q29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKHBv
aW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXplKCku
aGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKHBv
aW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXplKCku
aGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBGSVhNRTog
VGhpcyBpcyBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcgZnVuY3Rpb24gaW4gR3JhcGhpY3NDb250ZXh0TWFjLm1tLgogLy8gVGhlIGNvZGUgY291
bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHRDRy5jcHAgYW5kIGJlIHNoYXJlZC4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmbG9h
dCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDIuMGY7CiAgICAgb2Zmc2V0ICs9IHJhZGl1czsKICAg
ICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8gY2FjaGVkQ0dDb2xvcihj
b2xvcikgOiBudWxscHRyOwpAQCAtMTY0LDExICsxNDgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0eWxlLm1vZGUgIT0gRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nICYmIHN0eWxlLm1vZGUgIT0gRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ0LDUg
KzIyNSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQog
ICAgIENHQ29udGV4dEZsdXNoKG1fY2dDb250ZXh0LmdldCgpKTsKIH0KIAorR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDRzo6ZGVwcmVjYXRlZFByaXZhdGVD
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQorCiB9CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCmluZGV4IGYxNDQyNTcyY2M2ZDFkNTRiYmVlNThi
ZGJjMzZlZGY3NzRhYWJiNjQuLmY4MjRmMzFmYzI4ZjJiZjFjNjU0MzFiOWZjOTlkYTY3OTVhMDli
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAog
CiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIu
aD4KQEAgLTEyNyw5ICsxMjcsOSBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9Db250ZXh0KFBs
YXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERJQgogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJl
Y3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9vbCBjcmVhdGVk
Qml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICgh
aGRjIHx8ICFjcmVhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fZGF0YS0+cmVzdG9yZSgpOworICAg
ICAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNzgsNCArMTc4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGU6OmZsdXNoKCkKIH0KICNlbmRpZgogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDI5YTgyYTg5NzgyMjliMGY1ODczYWJkZjgyYmZh
ZjgwNmNmMTY1OTguLmUzYzZmN2M2MjRhZTZmOTk1ODI3MzRiMGY4ODljOGZmMDZhMTg2YTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcApAQCAtNDcsMTcgKzQ3LDE3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERD
IGhkYywgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0Nv
bnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBo
YXNBbHBoYSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMs
IElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNB
bHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywg
SUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29sIGhhc0Fs
cGhhKQogewogICAgIC8vIENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQuCiAgICAgYXV0byB0YXJn
ZXRQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAotICAg
IEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENS
ZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CisgICAgSFJFU1VM
VCBociA9IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURD
UmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwogICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMo
aGRjLCAmcmVjdCk7CkBAIC02NywxMiArNjcsMTIgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkUK
ICAgICBtX2RhdGEtPm1faGRjID0gaGRjOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQs
IEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKK0dyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5
cGUpCiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCByZW5kZXJl
clR5cGUpOwogfQogCi1JRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9y
eSgpCitJRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5
KCkKIHsKICAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3QyREZhY3RvcnkgPSBudWxscHRy
OwogICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7CkBAIC04OSw3ICs4OSw3IEBAIElEMkQxRmFj
dG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKICAgICByZXR1cm4gZGlyZWN0
MkRGYWN0b3J5OwogfQogCi1JRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0OjpkZWZh
dWx0UmVuZGVyVGFyZ2V0KCkKK0lEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiB7CiAgICAgc3RhdGljIElEMkQxUmVuZGVyVGFy
Z2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKICAgICBpZiAoIWRlZmF1bHRSZW5k
ZXJUYXJnZXQpIHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBJRDJEMVJlbmRlclRhcmdldCogR3JhcGhp
Y3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKICAgICByZXR1cm4gZGVmYXVsdFJlbmRl
clRhcmdldDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRj
LCBib29sIGhhc0FscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1J
bml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgaWYgKCFoZGMpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEzNiwxMiArMTM2LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHQ29u
dGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IHBsYXRmb3JtQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3Jt
SW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQogewogICAgIHBs
YXRmb3JtSW5pdChwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpH
UFVNZW1vcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlIHJlbmRlcmluZ1R5cGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0
Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIXBsYXRmb3Jt
Q29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDE2ICsxNTUsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZv
cm1Db250ZXh0LCBCaXQKICAgICAvLyBGSVhNRTogbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25R
dWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9s
YXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGlj
c0NvbnRleHREaXJlY3QyRCgpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
K1BsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZv
cm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7
CiAgICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgpOwogfQogCkBAIC0xOTUsMzMg
KzE5MiwyOCBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmN1cnJlbnRH
bG9iYWxBbHBoYSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWxwaGE7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdy
YXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogICAgIERpcmVjdDJEOjpzYXZlKCpwbGF0Zm9ybUNvbnRl
eHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwog
ICAgIERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBDT01QdHI8SUQyRDFCaXRtYXA+
JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJh
d05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGltYWdlU2l6ZSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKKyAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0Nv
bnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFC
bGVuZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4
dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5k
KQogewogICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8
fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKLSAg
ICAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgRGlyZWN0MkQ6OnJl
c3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2
MiwzNCArMjU0LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRl
eHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgOjpEZWxldGVEQyho
ZGMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93
c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25z
dCBJbnRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CisgICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiAgICAgOiBtX3Bs
YXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5k
ZXJpbmdUeXBlKQogewogICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAgaWYgKG1f
cmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUo
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1D
b250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRl
cmluZ1R5cGUpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+
JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogICAgIDogbV9vd25lZFBsYXRmb3Jt
Q29udGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkKICAgICAsIG1fcGxhdGZvcm1D
b250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJlclR5cGUocmVu
ZGVyaW5nVHlwZSkKQEAgLTI5Nyw3ICsyOTAsNyBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UAog
ICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAgaWYgKG1fcmVuZGVyZXJUeXBlID09
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIApAQCAtMzEwLDkgKzMwMyw4IEBAIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSgpCiAgICAgICAgIGVuZERyYXcoKTsKIH0KIAotSUQyRDFTb2xpZENvbG9yQnJ1c2gqIEdy
YXBoaWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQorSUQyRDFT
b2xpZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmJydXNoV2l0aENvbG9yKGNvbG9yV2l0aEds
b2JhbEFscGhhKGNvbG9yKSkuZ2V0KCk7CiB9CiAKQEAgLTM3Miw3MyArMzY0LDYwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7CiB9
CiAKLUQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNv
bnN0IENvbG9yJiBjb2xvcikgY29uc3QKK0QyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAogewog
ICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxvc3N5PGZsb2F0PigpOwogICAg
IHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0YS0+Y3VycmVudEdsb2JhbEFs
cGhhKCkpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNvbGlkU3Ryb2tlQnJ1
c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkU3Ry
b2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xp
ZFN0cm9rZUJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnNv
bGlkRmlsbEJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgp
LT5tX3NvbGlkRmlsbEJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxh
dGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoLmdldCgpOwogfQogCi1JRDJEMUJy
dXNoKiBHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdAorSUQyRDFCcnVz
aCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxsQnJ1c2goKSBjb25zdAogewog
ICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoLmdldCgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5EcmF3KCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5EcmF3KCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmREcmF3KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVu
ZERyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmVuZERyYXcoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZsdXNo
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZsdXNoKCkKIHsKICAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpmbHVzaCgqcGxhdGZvcm1Db250
ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihj
b25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0dGVybihj
b25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRy
YW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKICAgICBEaXJlY3QyRDo6ZHJhd1Bh
dHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJbWFnZSksIEludFNpemUoaW1h
Z2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIH0KIAog
Ly8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9y
ZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvcik7CiB9CkBAIC00OTAsNTIgKzQ2OSwyOSBAQCBEMkQxX1NUUk9LRV9TVFlMRV9Q
Uk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c3Ryb2tlU3R5bGVQcm9w
ZXJ0aQogICAgIHJldHVybiBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRpZXMobV9wbGF0Zm9ybUNv
bnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1D
b250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lSm9pbiwgbV9wbGF0Zm9y
bUNvbnRleHQubV9taXRlckxpbWl0LCBEMkQxX0RBU0hfU1RZTEVfU09MSUQsIDAuMGYpOwogfQog
Ci1JRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlU3R5bGUo
KSBjb25zdAorSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9r
ZVN0eWxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5bGUoKTsKIH0KIAogLy8gVGhpcyBp
cyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9T
dHJva2UpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd0xpbmUoKnBsYXRmb3JtQ29udGV4dCgpLCBw
b2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0
ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZmlsbEVsbGlw
c2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1dG8gY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhN
RTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MKIApAQCAtNTQzLDExICs0OTks
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLnN0
cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1
c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4oKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vy
VG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MK
IApAQCAtNTU1LDE3OSArNTA4LDEwNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxs
UGF0dGVybigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaCA9IGFk
b3B0Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhpcywg
cGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZHJhd1BhdGgoY29udGV4
dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0
aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFBhdGgocGF0aCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBs
YXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUGF0aChjb250ZXh0LCBwYXRoLCBE
aXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVj
dDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJl
Y3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4
dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBj
b2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBj
b250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdChjb250
ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGF1dG8gYnJ1c2ggPSBn
cmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Cisg
ICAgaWYgKCFicnVzaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwor
ICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgYnJ1c2guZ2V0KCkpOworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRv
ciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOworCisgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBi
bGVuZE1vZGUpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09w
ZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQorewogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
Y29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9
ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShz
dGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwKCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25z
dCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25z
dCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xp
cFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3Qg
R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAg
ICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENsaXBCb3VuZHMo
KnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIApAQCAtNzM1LDE4ICs2MTMsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBsKTsK
LQorICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsK
ICAgICBzYXZlKCk7CiAKICAgICBtX3N0YXRlLmFscGhhID0gb3BhY2l0eTsKIAotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKIH0KIApAQCAtNzU0LDExOSArNjI3
LDExMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFu
c3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmRUcmFuc3Bh
cmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgRGlyZWN0MkQ6OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0K
ICAgICBtX3N0YXRlLmFscGhhID0gbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKTsKIAogICAg
IHJlc3RvcmUoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBvcnRzVHJhbnNw
YXJlbmN5TGF5ZXJzKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsKLSAgICAodm9pZClvZmZzZXQ7
Ci0gICAgKHZvaWQpYmx1cjsKLSAgICAodm9pZCljb2xvcjsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1f
cGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CisgICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQorICAgICAg
ICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0
ZS5zdHJva2VTdHlsZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9r
ZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hhZG93Q2hhbmdlKSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykgeworICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBp
cyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAv
LyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9z
aXRlIFkgYXhpcworICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxH
cmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOworICAgICAg
ICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAgICAgICAg
ICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1z
aGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHls
ZSgqcGxhdGZvcm1Db250ZXh0KCksIHN0eWxlKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQorICAgICAgICBEaXJlY3Qy
RDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFz
KTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUg
cGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5zdHJv
a2VDb2xvciA9PSBjb2xvcik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ry
b2tlQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsgICAgCisgICAgfQorICAg
IAorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9y
Q2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3IpOwor
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0aENv
bG9yKGZpbGxDb2xvcigpKTsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGlt
aXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9v
dGhGb250c0NoYW5nZSkpIHsKKyAgICAgICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJs
ZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFM
SUFTX01PREVfQUxJQVNFRDsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdl
dCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5nTW9kZSk7CisgICAgfQogCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
QWxwaGFDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsK
KyAgICAgICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCk7CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkgeworICAgICAgICBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVT
VF9ORUlHSEJPUjsKKworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAg
ICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJP
UjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5
OjpMb3c6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElO
RUFSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6Ok1lZGl1bToKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9E
RV9DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpIaWdoOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQo
KSwgcXVhbGl0eSk7CisgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIERpcmVjdDJEOjpzZXRNaXRl
ckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZv
cm1Db250ZXh0KCksIHJlY3QpOworfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGly
ZWN0MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2FwKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBjYXApOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hP
ZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9hdCBsZW5n
dGggPSAwOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsr
aSkKQEAgLTg3NSwzNDEgKzc0MiwxNzMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAgICAgICAg
ICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3RoKSArIGxlbmd0aDsKICAgICB9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzZXRM
aW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJE
OjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVs
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKIHsKLSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2NhbGUoKnBsYXRm
b3JtQ29udGV4dCgpLCBzaXplKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJvdGF0
ZShhbmdsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpyb3RhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCBh
bmdsZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93
blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp0cmFu
c2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJh
bnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgeCwgeSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNmb3JtKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgRGlyZWN0MkQ6OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9y
bSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJ
WE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxl
KSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBB
ZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2lt
cGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4
dCgpKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0OwotCi0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3Vu
ZGluZ01vZGUpOwotCiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0RldmljZVBp
eGVscygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFy
cmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVj
dC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5o
ZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJE
OjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5zdHJva2VDb2xvcik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGlu
aywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6
OnNldFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29u
dGV4dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUgZm9yIGRpc3BsYXkgbGlzdHMuCi0g
ICAgfQotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAgIEQyRDFf
SU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFS
RVNUX05FSUdIQk9SOwotCi0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfSElHSF9RVUFMSVRZX0NVQklDOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gRklY
TUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xh
eWVyQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQ0FMYXllckNv
bnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm47Ci0K
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0
KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXllckNvbnRleHQo
KSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4KICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wg
aXNBY2NlbGVyYXRlZCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybjsK
LQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpp
c0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRl
eHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0
ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9k
ZUZsYWdzIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseURldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgICh2b2lkKW1vZGU7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIEFTU0VSVChtX3N0YXRl
LnN0cm9rZUNvbG9yID09IGNvbG9yKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2ggPSBicnVzaFdpdGhD
b2xvcihzdHJva2VDb2xvcigpKTsKKyAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIERpcmVjdDJE
LgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3Mo
ZmxvYXQgdGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIEFTU0VSVChtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyA9PSB0aGlja25lc3MpOwotICAgIG1fZGF0YS0+c2V0U3Ryb2tlVGhpY2tuZXNz
KHRoaWNrbmVzcyk7Ci19CisgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUu
ZmlsbFBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZp
bGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgorICAgICAg
ICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3IgPT0gY29sb3IpOwotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29s
aWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CisgICAgRGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5maWxsQ29s
b3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hv
dWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRl
LnN0cm9rZVBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisg
ICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcygqcGxhdGZvcm1D
b250ZXh0KCksIGVuYWJsZSk7CisgICAgRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xv
ciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9v
dGhpbmcpOworICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54
KCk7CisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKKyAgICBW
ZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxE
V1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsKIAotICAgIGF1dG8g
Zm9udFNtb290aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xF
QVJUWVBFIDogRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3Ro
aW5nTW9kZSk7Ci19CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7CisgICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkp
CisgICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhp
ICsgZnJvbSk7CisgICAgICAgIGlmICghYWR2YW5jZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOwotICAgIG1fZGF0YS0+c2V0QWxw
aGEoYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3Np
dGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9tKTsK
KyAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKKyAgICAg
ICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOworICAg
ICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsK
KyAgICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgZG91YmxlIHN5bnRoZXRpY0JvbGRP
ZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRp
b24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgRGlyZWN0MkQ6
OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRl
LCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBo
aWNzQ29udGV4dCgpKSwKKyAgICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9p
bnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2Vz
LCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Nv
bG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK0dyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKLSAgICAvLyBUaGlzIGlz
IGEgbm8tb3AgZm9yIERpcmVjdDJELgorICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisg
ICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1f
aW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0
dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlsbCBlbGxp
cHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0gICAgICAgIGZpbGxF
bGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXIu
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0
YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwg
bV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIGF1dG8qIGNvbnRleHQgPSAmZ3JhcGhpY3ND
b250ZXh0KCk7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZShjb250ZXh0KSkKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoIW1faW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRl
LnN0cm9rZVBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCi0g
ICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpk
cmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5
bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICAv
LyBGSVhNRTogTm90IGltcGxlbWVudGVkLgogfQorI2VuZGlmCisKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmI3MGMzYzE3M2M5MWE3NmJlYmQyZThlNmRmMjE1NWYxYTE1NGFjMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkRpcmVjdDJE
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJG
b250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVEaXJlY3QyRC5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9y
eShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJldHVy
biBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAgICBb
JnBsYXRmb3JtQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ+
KGNvbnRleHQsIHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6Y3JlYXRlRmFjdG9yeShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewot
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAot
ICAgICAgICBbcmVuZGVyVGFyZ2V0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRD4oY29udGV4dCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fcGxhdGZvcm1D
b250ZXh0KHBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkpCi17Ci0gICAgbV9w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkp
OwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi1H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
Ci0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZv
cm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KHJlbmRlclRhcmdl
dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAg
ICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4o
bV9wbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3ND
b250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRl
eHQobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
On5HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0
LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAmbV9w
bGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjp1
cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5z
dHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0
eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChz
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0
aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cg
YW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYg
bXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3Rh
dGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9
IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21w
b3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwg
c3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hv
dWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xlYXJTaGFkb3coKQotewot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2Fw
IGxpbmVDYXApCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQs
IGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAg
RGlyZWN0MkQ6OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZz
ZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TGluZUpvaW4o
TGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVKb2luKG1fcGxhdGZv
cm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgRGlyZWN0MkQ6OnNl
dE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBE
aXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxs
U291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgRGlyZWN0
MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3Jh
ZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVudC5jcmVhdGVCcnVz
aChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgaWYgKCFicnVzaCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAg
ICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRN
b2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Zmls
bFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJh
dG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci0KLSAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUp
OwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBEaXJlY3QyRDo6ZmlsbFJvdW5k
ZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwotICAg
IGVsc2UKLSAgICAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBC
bGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAgIERpcmVj
dDJEOjpGaWxsU291cmNlIGZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKTsKLSAg
ICBmaWxsU291cmNlLmJydXNoID0gbV9wbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoY29s
b3IpOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIGZpbGxTb3VyY2UsIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6Zmls
bFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRl
LCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVj
dCk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBE
aXJlY3QyRDo6c3Ryb2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBE
aXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0g
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChtX3Bs
YXRmb3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhp
Y3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0g
ICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNs
ZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7Ci0gICAgaWYgKCFmb250LnBsYXRm
b3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byB4T2Zmc2V0ID0g
cG9pbnQueCgpOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBocyk7
Ci0gICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKLSAgICBW
ZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgaWYg
KGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQoKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBm
cm9tKTsKLSAgICAgICAgaWYgKCFhZHZhbmNlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChpICsgZnJvbSk7Ci0gICAgICAg
IGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBo
T2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5
cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7Ci0gICAgfQot
Ci0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZz
ZXQoKTsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAg
ICBEaXJlY3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6OkZpbGxT
b3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShz
dGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAotICAgICAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUo
c3RhdGUpLCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9u
dGFsQWR2YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERy
YXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3Rh
dGUuc2hhZG93Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZl
SW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6ZHJhd1BhdHRlcm4oKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS5wbGF0Zm9ybUlt
YWdlKCkpCi0gICAgICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybihtX3BsYXRmb3JtQ29udGV4dCwg
V1RGTW92ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9w
dGlvbnMuYmxlbmRNb2RlKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3Mp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpkcmF3UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdM
aW5lKG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUs
IHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xv
cik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9w
bGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZp
bGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQ
YXRoJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQp
OwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpzYXZlKCkKLXsKLSAgICBEaXJlY3QyRDo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyZXN0b3JlKCkKLXsKLSAg
ICBEaXJlY3QyRDo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAg
ICBEaXJlY3QyRDo6dHJhbnNsYXRlKG1fcGxhdGZvcm1Db250ZXh0LCB4LCB5KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykKLXsKLSAgICBEaXJlY3QyRDo6cm90YXRlKG1fcGxhdGZvcm1Db250ZXh0LCBhbmdsZUluUmFk
aWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgRGlyZWN0MkQ6OnNjYWxlKG1fcGxhdGZvcm1Db250
ZXh0LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6
Y29uY2F0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQotewotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0
LCB0cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCi17Ci0g
ICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihtX3BsYXRmb3JtQ29udGV4dCwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgRGlyZWN0MkQ6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAg
IERpcmVjdDJEOjpjbGlwKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0
aCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcFBhdGgobV9w
bGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBCb3VuZHMoKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6
U3RhdGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgaWYgKCFp
bWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0Nv
bnRleHQoKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKGNvbnRleHQpKQotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9h
dCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29udGV4dDo6Um91
bmRpbmdNb2RlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikK
LXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVP
KQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBs
ZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjA0NTA1MzE3MDNmYjkwZWVhN2I0MmYyNDc0ZjU5
MzZiZDNiYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJ
bXBsIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShJRDJEMVJlbmRlclRhcmdl
dCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYs
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEKEdyYXBoaWNzQ29udGV4dCYsIElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0gICAgdmlydHVhbCB+
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCk7Ci0KLSAgICBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFu
Z2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpv
aW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0
IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVy
JiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01v
ZGUpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICBib29sIGRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybigoTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0
LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlk
ZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29u
c3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBs
YXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYKLSAgICAKLSAg
ICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKLSAg
ICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRXaW4uY3BwCmluZGV4IDFkODA0MjBjZjdlYzZjZDc3NWE2MmJhZWEyMmY5OTA2
MDdlYjRjYmQuLjZkYmJlOTY2ZDM5Njk5MjU5ZTY1YzZmODUwZWU2ZTdjMzVjZGQ5MWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRXaW4uY3BwCkBAIC01NiwxMiArNTYsMTIgQEAgc3RhdGljIHZvaWQgZmlsbFdp
dGhDbGVhckNvbG9yKEhCSVRNQVAgYml0bWFwKQogI2lmIFBMQVRGT1JNKFdJTikKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKGJvb2wgaW5jbHVkZSkK
IHsKLSAgICBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyA9IGluY2x1ZGU7Cisg
ICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93
cyA9IGluY2x1ZGU7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0OjpzaG91bGRJbmNsdWRlQ2hp
bGRXaW5kb3dzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVD
aGlsZFdpbmRvd3M7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3No
b3VsZEluY2x1ZGVDaGlsZFdpbmRvd3M7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0Jp
dG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRjLCBjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtOTUs
NyArOTUsNyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5XaW5kb3dzQml0bWFw
KCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcD4gR3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUpCiB7
Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4obV9kYXRhLT5tX2hkYywgc2l6
ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4oZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgogCkBAIC0xMDMsNyArMTAzLDcg
QEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYg
ZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEKIHsKICAgICBIREMgaGRjID0gbnVsbHB0cjsKICAg
ICBpZiAoIW1faW1wbCkKLSAgICAgICAgaGRjID0gbV9kYXRhLT5tX2hkYzsKKyAgICAgICAgaGRj
ID0gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwogICAgIC8vIEZJWE1FOiBTaG91
bGQgYSBiaXRtYXAgYmUgY3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFkb3cgaXMgc2V0PwogICAgIGlm
ICghaGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CiAgICAgICAgIGlmIChkc3RSZWN0
LmlzRW1wdHkoKSkKQEAgLTEzNSwxNyArMTM1LDE3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6Omdl
dFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhh
CiAgICAgICAgIHJldHVybiBiaXRtYXBEQy5sZWFrKCk7CiAgICAgfQogCi0gICAgbV9kYXRhLT5m
bHVzaCgpOwotICAgIG1fZGF0YS0+c2F2ZSgpOwotICAgIHJldHVybiBtX2RhdGEtPm1faGRjOwor
ICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5mbHVzaCgpOworICAgIGRlcHJlY2F0ZWRQ
cml2YXRlQ29udGV4dCgpLT5zYXZlKCk7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpLT5tX2hkYzsKIH0KIAogSERDIEdyYXBoaWNzQ29udGV4dDo6aGRjKCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBtX2RhdGEtPm1faGRjOworICAg
IHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiB9CiAKICNpZiBQTEFU
Rk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcAppbmRleCBhOGVlMzVjNTI3NzgxMjczZjQ3ZmI1ZDJmNGJjZGY4OGM0NGUwOGM0Li5h
ZDk1NTRjMDUwYWVlMmUxMGVjMTUzNTllYjhiNDg1ZDM1MGNkYTRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Y3JlYXRlKGMKICAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4ocGxh
dGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlOjpHUFVNZW1vcnkpOworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBpZiAoIWNvbnRl
eHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKaW5kZXggZjhhMTBkNWM0MzZlNzA2
MDg5ODcwN2JhOGI2NTQ2NDFjZTJiZGY1NC4uNTMzOGZmY2M3YjU2NWY0ODdkOWU3Y2ZiOGYyNjRm
N2VhMTI5NjllZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUNHV2luLmNwcApAQCAtNzMsNyArNzMsNyBAQCBib29sIEJpdG1hcEltYWdlOjpn
ZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRTaXplKiBzaXplKQogICAgIGF1
dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoYm1wSW5mby5ibUJp
dHMsIGJtcEluZm8uYm1XaWR0aCwgYm1wSW5mby5ibUhlaWdodCwKICAgICAgICAgOCwgYm1wSW5m
by5ibVdpZHRoQnl0ZXMsIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMy
TGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkpOwogICAKLSAgICBHcmFw
aGljc0NvbnRleHQgZ2MoY2dDb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBn
YyhjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcElt
YWdlOjpzaXplKCk7CiAgICAgaWYgKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKaW5kZXggMmNlYzk5ZGM3Mjlm
ZTY1ZTA4NTRlZWU3MmRmYzRlZDdhZjA5NTIzYy4uYzllYjAwYzQ4MjQxZjViY2JmNWM1ZTJkODNi
OTQ3Y2I3Yzk0OTc0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNzUsNyArNzUsNyBAQCBib29sIEJp
dG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAgYm1wLCBjb25zdCBJbnRTaXplKiBz
aXplKQogICAgIGNhaXJvX3QqIHRhcmdldFJlZiA9IGNhaXJvX2NyZWF0ZShpbWFnZSk7CiAgICAg
Y2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkodGFyZ2V0UmVmKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ2ModGFyZ2V0UmVmKTsKIAogICAgIEZsb2F0U2l6ZSBpbWFn
ZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAppbmRl
eCBkOTYyMDMwMGFiY2ViYTQ5NGNhNjYxNTFkMDAxZTUyZjFjNzg5NDRiLi45MTI5YTE3Yjc3OGEy
NDgwY2RmM2MwZWJmYTJkNmU3MjcxYTYwNzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcApAQCAtMjMyLDcgKzIzMiw3
IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNv
bnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJU
YXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29u
dGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2Ny
YXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSk7CiAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsK
IAogI2lmIEFTU0VSVF9FTkFCTEVECkBAIC0zNDIsNyArMzQyLDcgQEAgRmxvYXRSZWN0IFBhdGg6
OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYp
PiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAg
ICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAg
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQy
RCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5
KTsKIAogICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpCiAgICAgICAgIHN0cm9rZVN0eWxlQXBw
bGllcihzY3JhdGNoQ29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvRHJhZ0ltYWdlSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJ
bWFnZUlPUy5tbQppbmRleCA3MzU5MzNmMTcyMDg1YjllNjY5M2FkNDRiMmFmMTYwYjM0MGM0Zjk5
Li4zNjE2MDJlNTdiMjRmYjE2Y2JlMmE3YTk5ZjZlNWM4MGEzMzlmYWI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KQEAgLTk0LDcgKzk0LDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1hZ2UsIEltYWdlT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24KIAogICAgIFJldGFpblB0cjxVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlcj4gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVy
SW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VTaXplXSk7CiAgICAgVUlJbWFnZSAqaW1hZ2VD
b3B5ID0gW3JlbmRlci5nZXQoKSBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKDAsIGltYWdlU2l6ZS5oZWlnaHQpOwogICAgICAgICBjb250ZXh0LnNjYWxl
KHsgYWRqdXN0ZWRJbWFnZVNjYWxlLCAtYWRqdXN0ZWRJbWFnZVNjYWxlIH0pOwogICAgICAgICBj
b250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEZsb2F0UG9pbnQoKSwgeyBvcmllbnRhdGlvbiB9KTsK
QEAgLTEzNiw3ICsxMzYsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhF
bGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZwogCiAgICAgYXV0byBy
ZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3Rh
bmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplXSk7CiAgICAgYXV0byBpbWFnZSA9IFty
ZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0
ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVu
ZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRl
KDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7
IDEsIC0xIH0pOwogICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChGbG9hdFJvdW5kZWRS
ZWN0KGltYWdlUmVjdCwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoNCkpLCBDb2xvcjo6d2hpdGUp
OwpAQCAtMjA0LDcgKzIwNCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JTZWxl
Y3Rpb24oRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9yRGF0YSYgaW5kaWNhCiAKICAgICBhdXRv
IHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5z
dGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemUoKV0pOwogICAgIHJldHVybiBbcmVu
ZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAq
cmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRl
cmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0
KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICAvLyBGSVhNRTogVGhlIGNvbnRl
eHQgZmxpcCBoZXJlIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBhbmQgc3VnZ2VzdHMgdGhhdCBz
b21ld2hlcmUgZWxzZSBpbiB0aGUgcmVndWxhcgogICAgICAgICAvLyBkcmFnIGluaXRpYXRpb24g
Zmxvdywgd2UgdW5uZWNlc3NhcmlseSBmbGlwIHRoZSBncmFwaGljcyBjb250ZXh0LgogICAgICAg
ICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwpAQCAtMjM4LDcgKzIz
OCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUs
IGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vCiAgICAgYXV0byYgaW1hZ2UgPSAqdGV4dElu
ZGljYXRvci0+Y29udGVudEltYWdlKCk7CiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6
OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFn
ZS5zaXplKCldKTsKICAgICBVSUltYWdlICpmaW5hbEltYWdlID0gW3JlbmRlci5nZXQoKSBpbWFn
ZVdpdGhBY3Rpb25zOlsmaW1hZ2VdKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVu
ZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVy
Q29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJl
bmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWFn
ZSwgRmxvYXRQb2ludCgpKTsKICAgICB9XTsKIApAQCAtMjUyLDcgKzI1Miw3IEBAIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IEZs
b2F0UmVjdCYgZWxlbWVuCiAKICAgICBhdXRvIHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NV
SUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5z
aXplKCldKTsKICAgICBVSUltYWdlICppbWFnZSA9IFtyZW5kZXIgaW1hZ2VXaXRoQWN0aW9uczpe
KFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgcmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCB9
OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgcmVuZGVyZXJDb250ZXh0LkNH
Q29udGV4dCB9OwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQo
aW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3Qoc3dhdGNoLCBjb2xvcik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlckNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCmluZGV4IDA5ZmFl
ZWVlOWVhY2I1MDMyZjFhNzlkNzNiYTAxOGE5YjY1NWJkMmIuLjVlYzM4ZTY0MWJkNmVkMDNhZDA1
MjU2MWQwNGM5Y2RhZmRmYjQxMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiQXVkaW9TYW1wbGVEYXRhU291cmNlLmgiCiAjaW5jbHVkZSAiQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9Nb2R1bGUuaCIKKyNpbmNsdWRlIDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCmluZGV4IGQwMjJlN2UxOTFk
YWM4MTYzNmQ1Mjk1MWQ0MGQ1M2I4ODczZjU1MDkuLjQ0NTAxYWIxMzliOGVlZWU5MTRjZTZkODY3
NDE3YjJlOWVjOTI0MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1h
Z2VXaW4uY3BwCkBAIC0xODYsNyArMTg2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGluTGFiZWwsIFQKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0T2JqZWN0KHdvcmtpbmdEQy5n
ZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNvbnRleHRS
ZWYpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoY29udGV4dFJlZik7CiAgICAgLy8g
T24gTWFjIGFscGhhIGlzIHswLjcsIDAuNywgMC43LCAwLjh9LCBob3dldmVyIHdlIGNhbid0IGNv
bnRyb2wgYWxwaGEKICAgICAvLyBmb3IgZHJhZyBpbWFnZXMgb24gd2luLCBzbyB3ZSB1c2UgMQog
ICAgIGNvbnN0ZXhwciBhdXRvIGJhY2tncm91bmRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+IHsgMTQw
LCAxNDAsIDE0MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRl
bnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRm
dWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2YzA5YWYwZDJkNjlmNDYz
ZDc2YWVjMjYuLjRjMGY5Yzk0ZDYzY2ZmMmRkZjE5ZTRhN2FhY2I0YWU1MWJjODY0ZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5j
cHAKQEAgLTM4LDcgKzM4LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZp
ZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3
LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
KTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgR3JhcGhpY3ND
b250ZXh0TnVsbCBjaGVja2VyQ29udGV4dChHcmFwaGljc0NvbnRleHROdWxsOjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3
LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJl
Y3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJl
Q29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKaW5kZXggOGVmZmMwOTIyNmUzZDk4ZWRjZjNiZDRiODE0MDVlOWI2YjM2MzNk
NS4uNDdiNGNkZDQyN2ZkNmY4M2QwNGJhYjg4NWI0YWFlZDhkNTJjMzliNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAs
MTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9
IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFk
b3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNo
YWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRv
dy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3co
c2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hv
b3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYg
aW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQz
OSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
aWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJv
eCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBk
b2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYg
KHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNl
dExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3Qs
IGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGZiNjFlNTRlNGE4ZTk5YWM2Njk0Zjdj
MzRkMGZlZThmMWQwMjY5NGYuLjA5ODJhNGQ1MjBhOGY0MWZjYmQ1ZGI3MWJjMDY0NzVkYTFlYzMx
MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC0xNzg5LDcgKzE3ODksNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
RXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5
ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHQgbnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dE51
bGwgbnVsbENvbnRleHQoR3JhcGhpY3NDb250ZXh0TnVsbDo6UGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxF
KEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1
aWxkRWRpdGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2Nh
aXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJv
L1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1
MmEzMWYxNTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFw
Q2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQo
KQogewogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJm
YWNlKCk7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250
ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+
KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9T
aGFyZWFibGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVC
aXRtYXBDRy5jcHAKaW5kZXggMDUwYjA0OWU4NWEwMzc1OTI4YjBkNjQ3ZjFiMGNhYzRlZTExYmI2
MC4uNzRkMjQ1NzU3OWQzODFmZWUxMGYzZWE1NDE2OGI4YjlkNTBiZjk5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29u
dGV4dC5nZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShi
aXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFy
ZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcApp
bmRleCAwOGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2
NDc2YmQyNDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlyZWN0MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGll
cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFw
aGljc0NvbnRleHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkp
KTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFj
ZUNvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9C
YWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNr
aW5nU3RvcmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5
NDI5MjRmNi4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNw
cApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ2Fpcm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZv
aWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1h
cCwgY29uc3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAg
IEludFBvaW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5k
cy5sb2NhdGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJl
ZihjYWlyb19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9y
eShjYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGlj
c0NvbnRleHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJv
eHkuZHJhd3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVu
dCBwYXJ0cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2gg
Y2FzZSwgYml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkg
dG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIw
MjgxMjg1Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJh
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0K
QEAgLTMwLDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dn
aW5nLmgiCi0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgi
CiAjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgog
I2ltcG9ydCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxv
b3AuaD4KIAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBX
ZWJLaXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1h
cmdpbiI7CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJn
aW5LZXkgPSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3
IEBAIC0gKHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVl
OwogCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0Nv
bnRleHRdKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFn
ZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2lu
KSwgYml0bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJj
M2ZmMTY0YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUy
ZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3Jl
RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3Rv
cmVEaXJlY3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmlu
ZGV4IGYyMzQ4Zjg1MjRlOTYzZjNiODI1ODRiNDVhMjdhODI3NmI0NTBiN2IuLmE1ZjAzMDBlYTRl
NjY1YTQ3NjAyNjkyNjMzZThmOTlmMzE1OGM1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2lt
cG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxz
LmgiCiAjaW1wb3J0ICJQREZDb250ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsu
aCIKICNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2lu
QW5ub3RhdGlvbi5oIgogI2ltcG9ydCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIs
NyArNzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4K
QEAgLTEwNiw2ICsxMDUsOCBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAj
aW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5r
LmgiCisKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1
bWVudCAoKQogLShpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJS
ZWYpZGF0YVByb3ZpZGVyOwpAQCAtMTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBh
aW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYg
Y29udGUKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShw
YWdlLT51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGlj
c0NvbnRleHQoY29udGV4dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVy
Q29udGV4dCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0
ZGRmZDMyMjc5ZDgxODllLi5mN2JkYjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
V2ViUGFnZUNvY29hLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50
TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxPTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpA
QCAtMzE3LDcgKzMxOCw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBz
aG90QXRTaXplKEludFJlY3QgcmVjdCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQ
REZDb250ZXh0QmVnaW5QYWdlKHBkZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQu
Z2V0KCkgfTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29v
cmRpbmF0ZWRHcmFwaGljcy5jcHAKaW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2
OTYzMTg3N2JiOC4uZTk5NDU3Yzc0MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29y
ZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
U2V0dGluZ3MuaD4KIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJE
Lmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYjE3YTc0YTQzNmFlM2Rl
NGZiNTJmOGY1NTNjZjgxMTU4MDdkMDkwNy4uM2ZlZTdmNTg3ZGViM2Q1NDJmY2ZkZTk5MmU5NDY1
MDgwNTBiMjdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1
bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJlYWxseSBwcm9i
YWJseSB3ZSBzaG91bGQgbW92ZSB0aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5nIGNvZGUgb3V0
IG9mIFdlYlBhZ2UuY3BwLgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4K
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzODgsNyArNTM5Myw3IEBAIHZvaWQgV2ViUGFnZTo6
ZHJhd1BhZ2VzVG9QREZJbXBsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBQcmludElu
Zm8mIHByaW50CiAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFn
ZUluZm8gPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OwogICAgICAgICAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0LmdldCgpLCBw
YWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNv
bnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjb250
ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VS
ZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bv
b2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3
MzljNGFlYWI5YmIzM2E4NS4uMzk5YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUwYWM5OGY1ODE1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBy
aW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaD4KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5k
ZXJQYWdlKGludCBwYWdlTnVtYmVyKQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3KCk7CiAKICAg
ICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lkdGgobV9wYWdl
U2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KG1fY2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250ZXh0LmdldCgp
KTsKICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4dCwgcGFnZU51
bWJlciwgcGFnZVdpZHRoIC8gbV9zY2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3JlKG1fY2Fpcm9D
b250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNv
cmVTdGF0aXN0aWNzLm1tCmluZGV4IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1
ZmJlZjYuLjkyOGFlN2Q1MWUzZjBiN2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAt
MzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HQ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+Ci0jaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQu
aD4KQEAgLTMwNSw3ICszMDUsNyBAQCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4
dFJlZiljZ0NvbnRleHQgcGFnZVdpZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0KGNnQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNnQ29udGV4dCk7CiAgICAgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5k
YXJpZXMoKmNvcmVGcmFtZSwgZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5Q
aXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAyYmEwMDZkZDNl
N2IyYWZjNTBlZmYyODQ1MzIwZDk2NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1
MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNj
L1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCA8
V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgotI2lt
cG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRyYXMuaD4KICNp
bXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KQEAgLTc4LDcgKzc4LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1Bv
aW50KXBvaW50IGZvbnQ6KE5TRm9udCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICoKIAogICAg
ICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XTsKICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRl
eHQgQ0dDb250ZXh0XTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7
IGNnQ29udGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQg
eyBjZ0NvbnRleHQgfTsKIAogICAgICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEgZmxpcHBlZCBn
cmFwaGljcyBjb250ZXh0LgogICAgICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxp
cHBlZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3Iv
V2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5ZWNmMWRiZGVm
NDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4uOTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2MyYjMzZjEzMTAw
MjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dl
Yk5vZGVIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYklu
c3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9y
dCAiV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIK
IAotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxl
ci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgsNyBAQCAtICh2
b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogCiAgICAgICAgIEFTU0VSVChbW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRl
eHRdKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICAgICAgW193ZWJOb2RlSGlnaGxp
Z2h0IGluc3BlY3RvckNvbnRyb2xsZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogICAgICAg
ICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYzNWQ3YmQ1YTIz
NTFiMmIwMWI2OGJiMWUyMTZmNzQ1N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5NjIwZjUxYmVl
Njk2YjIxMjM5YWIxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbQpAQCAtODEsNyArODEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclN0
YXRlTWFjaGluZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2MTMsNyBAQCAt
ICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRlbnRz
T25seQogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50R3JhcGhpY3ND
b250ZXh0KCk7CiAjZW5kaWYKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29udGV4dChj
dHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4KTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShz
ZWxmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCA3YzQzNjFhM2FjYWQxMzM0MDE4Mjc4ODEzZmIzYjYwNWNkNmY2ZWYwLi4xN2VkMmY0YTlmOGJl
OGQ2MTBmYjA0OTMyYjdlOThjM2I3NmI5MTk5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjQgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBH
cmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHND
Ry5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0wNS0yNCAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcmV2ZXJ0aW5nIHIyNzc5NDAuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCmluZGV4IDEyYjk5Njlj
NjM0ZWI3NDk1MjhmYzE2OGUxNjUzNGVkN2Y2NDhjODAuLjM1ZmRhMzI5MTc5NGRlMWIxOTFjODU0
NjcwOWRmYzM0YjcwZTY3YTcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCkBAIC0zMSw2ICszMSw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFkaWVudC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KIAogbmFtZXNwYWNlIFRl
c3RXZWJLaXRBUEkgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00OCw3ICs0OSw3IEBA
IFRFU1QoRGlzcGxheUxpc3RUZXN0cywgUmVwbGF5V2l0aE1pc3NpbmdSZXNvdXJjZSkKIAogICAg
IGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NH
Q29sb3JTcGFjZVNSR0IpKTsKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAq
IGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkg
fTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAK
ICAgICBhdXRvIGltYWdlQnVmZmVySWRlbnRpZmllciA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
Zmllcjo6Z2VuZXJhdGUoKTsKIApAQCAtMTEyLDcgKzExMyw3IEBAIFRFU1QoRGlzcGxheUxpc3RU
ZXN0cywgT3V0T2ZMaW5lSXRlbURlY29kaW5nRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFj
ZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0Ip
KTsKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51
bGxwdHIsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwg
Y29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBEaXNwbGF5TGlz
dCBvcmlnaW5hbExpc3Q7CiAgICAgV3JpdGluZ0NsaWVudCB3cml0ZXI7CkBAIC0xNDMsNyArMTQ0
LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBJbmxpbmVJdGVtVmFsaWRhdGlvbkZhaWx1cmUp
CiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhO
YW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQs
IDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0
LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQo
KSB9OwogCiAgICAgYXV0byBydW5UZXN0V2l0aEludmFsaWRJZGVudGlmaWVyID0gWyZdKEZsdXNo
SWRlbnRpZmllciBpZGVudGlmaWVyKSB7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpZGVudGlmaWVy
LmlzVmFsaWQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429598</attachid>
            <date>2021-05-24 17:26:49 -0700</date>
            <delta_ts>2021-05-24 19:19:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524172648.patch</filename>
            <type>text/plain</type>
            <size>370613</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ5NjIyMThjNGE5NzA0
ZDljMGJhNDM3MTM4Y2RiYjE1ZGRiOWY1My4uYzI4ZDk4ODc4MWUyZmIyYWIwMDkzYTRmOTY1ZjYx
M2YxMDhmMGY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0
b3AgdXNpbmcgVW5jaGVja2VkTG9jayBpbiBTaGFkb3dCbHVyJ3MgU2NyYXRjaEJ1ZmZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwppbmRleCA5YmQzNmQ3MTg3NGIzY2FiMjcxMjQwMjQzMmU3ZjNlNTk1N2Y1N2M1Li4yZjVkZjFl
NTE5NTEzNTk2OWNhZmUzOTdmNTAwYjQ4NjJmNDAwZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCk6CisgICAgICAgICogU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6OmluY29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBV
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmll
dyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVE
aXJlY3QyRC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNv
bnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNv
b3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6OnJlbmRlclBhZ2UpOgor
CiAyMDIxLTA1LTI0ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI3Nzk0MC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwppbmRleCA1OWEyMzY0MmI1MDYyNjVlZmZlMzU0NWY0NjVhN2Y5MDc5ZTE5ZTQ3Li5k
MzE0MGQyZjhiOGEzNjk2NDA5MDA3ZGY0ZTcxMjZmNDZjNTkxNmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0
aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0Nv
bnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
NjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJpbnRUb0NH
Q29udGV4dDpwYWdlV2lkdGg6cGFnZUhlaWdodDpdKToKKyAgICAgICAgKiBNaXNjL1dlYktpdE5T
U3RyaW5nRXh0cmFzLm1tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdBdFBvaW50OmZv
bnQ6dGV4dENvbG9yOl0pOgorICAgICAgICAqIFdlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViTm9kZUhpZ2hsaWdodFZpZXcgZHJhd1JlY3Q6XSk6Cisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYXdS
ZWN0OmNvbnRlbnRzT25seTpdKToKKwogMjAyMS0wNS0yNCAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0
LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNzc5
NDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAwOWJmMDI0MDc2NmM3OGE3OTA1NTlhMGY0MTU4NzZh
OGI2MGUyMzkzLi5hMjFkNmJlMzdkNzIyM2NmMDYyNDEzNjNkMDk4NWYyM2ZhNTdhMjUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEyMzgsNyArMTIzOCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTEyODUsNiAr
MTI4NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL01lZGlhVXNhZ2VJbmZvLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJbWFn
ZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvT3Bl
bkdMU2hpbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZU
Vy5jbWFrZQppbmRleCA0Y2MzOTE5OTMxNTQ3M2Q5YWQzMTcyYjZhYWMxYjU5YmE4YmYxOTFjLi43
MTE0N2E0ZTJjZDE1ZWUwMWJmMWMwMjFlZWNiNjQ1NmJkZWM4MDA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUZUVy5jbWFrZQpAQCAtNDMsNyArNDMsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCiAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXku
Y3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApAQCAtNzEs
NyArNzAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2lu
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHAKQEAgLTE4OSw3ICsxODcsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVVdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50LmgK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CmluZGV4IDk3Y2U1NDczMjFkYzM3Y2JkMjU3NThmNGZhNjM5MGY3NDEyZGEzMGYuLmE1YTFh
ZmIzNWRjOTU4YmY0NTM5NWUwNTkxMGYzNTM0YjBjNjVmNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0x
OTgyLDcgKzE5ODIsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllclVwZGF0ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZmI3NGVmMmU0YzkyYTExMjM4ZWM4OGZiYTBkOWYwMzdjZDU1
NGE2Yy4uYzI2MTZlNTRlNzk5ODdhMDA4ODE3ZTkwMjI1YzU0N2FhMWU5ZDg2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYx
LDcgKzg2MSw3IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMx
REJGREMwRjAwN0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRD
NDkwMDdBN0Q5OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyog
TWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBG
RjcgLyogbGluZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAq
LzsgfTsKLQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNG
MUZBRDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4
RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhp
Y3NDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMkRBRjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVB
N0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4
MjVGMkZFOTcwMENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3Mjcx
RUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcg
LyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNjA4Niw4ICs2MDg2LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJG
QTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51
Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQ
b3B1cE1lbnVDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMx
QkM1Q0NENzAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlYXJjaFBvcHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MDAxMjNGMUZBRDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEdyYXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMEYwMDEyNDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFy
cmF5Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3Jl
VHlwZWRBcnJheUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcz
MjcsNiArNzMyNSw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JF
TUUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1F
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3
RDk5IC8qIE5hdmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YXZpZ2F0b3JFTUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZG
MUNCRjAwQkEwRkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVs
bEdyYXBoaWNzQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxs
R3JhcGhpY3NDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJD
MTlEQ0FGNjAwMEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1v
Y2tQYWdlT3ZlcmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
b2NrUGFnZU92ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRB
RjM0M0ExRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzAwOCw4ICsyNzAwNyw2IEBACiAJCQkJN0Mz
MzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICov
LAogCQkJCTdCQjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdl
RXh0cmFjdG9yLmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhp
Y3NDb250ZXh0R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUz
MUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2
MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEy
NjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5
MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUx
RDY4OSAvKiBHcmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5MCw2ICsyNzA4Nyw3IEBA
CiAJCQkJMzE0QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFn
ZS5oICovLAogCQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAg
Ki8sCiAJCQkJNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJ
CQkJMkRBMzk3RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywK
IAkJCQlCMjc1MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1
NTMwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBD
MDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyNjk1LDcgKzMyNjkzLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNTYsNiArMzQzNTMsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5k
ZXggMDA5NzlkMDA5Yjg1NTYzZTUyN2Y4MjgxZmU3MmE5ZDE3OTkzMGFlMy4uZDQ2OGZiYzBmNzZh
YjBiMmRiMjIyYWQ2MGFjY2RlNGM2NjVkZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC0x
Mjk4LDEwICsxMjk4LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFk
b3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgYXV0byBz
aGFkb3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCkgKyBzaGFkb3dPZmZz
ZXQ7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFkb3dSZWN0T3JpZ2lu
IC0gYWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICBpZiAoc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93LmNvbG9yKCkpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFk
b3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCksIHNo
YWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1cykg
ewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5
IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDEyLDEx
ICsxNDA5LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3coUGFp
bnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdDb250
ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zmc2V0
IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIGlmIChzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3co
KSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExlZ2FjeVNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLQorICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
dy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFkb3dDYXN0aW5nUmVjdCwg
cm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKaW5kZXggNGY0NmY2NTkwOTU5YTFlNGNkZGNkY2MzNzUyODA1MTZkNDJjYTFkMS4uZTdjMDI4
NWY3NTU0NTQ4MDNiMTQwYzkyMGJkNGIyYWZkZmU2MWY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UoKS5leGlzdGluZ0RyYXdp
bmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aXNBY2NlbGVyYXRl
ZENvbnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5yZW5kZXJpbmdNb2Rl
KCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQogICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1bGUK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgYy0+Y2FudmFzQ2xp
cChwYXRoLCB0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CisgICAgYy0+Y2xpcFBhdGgocGF0aCwg
dG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmJlZ2luQ29tcG9zaXRlTGF5ZXIoKQpAQCAtMTIxMiw3ICsxMjEyLDcgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2EKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAgY29u
dGV4dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7CisgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQogICAg
IGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkgewpA
QCAtMTM3OSw5ICsxMzc5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjph
cHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAgZmxv
YXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9hdCBo
ZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0TGVn
YWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwg
c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUod2lk
dGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3IsIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldExlZ2Fj
eVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgICAg
ICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrLCBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTIwMzAsNyArMjAzMCw3IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFzUGF0
dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51bGwo
KSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1dG8g
cmVuZGVyaW5nTW9kZSA9ICFkcmF3aW5nQ29udGV4dCgpIHx8IGRyYXdpbmdDb250ZXh0KCktPmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gZHJhd2lu
Z0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxlbWVu
dC5jcmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmluZ01v
ZGUsIGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDczLDcgKzI0NzMsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRSdW4m
IHRleHRSdW4sIGZsbwogCiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0OwogCi0g
ICAgICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAKICAg
ICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihDb2xv
cjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDY1ODNjMzY5ZmRhMWMw
NmQ5NDM3NWNjZGMyM2ZjOGI3MjIzMGJmNWEuLjBkOGM3NmY1OThiM2M4OWQwM2UzMTVhY2Y1Njc0
MzM3NDZiZWEzNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTY5LDYgKzY5LDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKQEAgLTQxODcsMTIgKzQxODgsMTIg
QEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cygpCiAgICAgICAgIHBhZ2UtPnNl
dElzQ291bnRpbmdSZWxldmFudFJlcGFpbnRlZE9iamVjdHMoaXNDdXJyZW50bHlDb3VudGluZ1Jl
bGV2YW50UmVwYWludGVkT2JqZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQordm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKIHsKICAgICBpZiAobmVlZHNMYXlvdXQo
KSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBOdWxsR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxhdGZv
cm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVDb250
ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50UmVj
dChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00NzQyLDcgKzQ3NDMsNyBAQCB2
b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0JvdHRv
bSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQgd2l0
aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChHcmFwaGlj
c0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgTnVsbEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9u
UmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGljX2Nh
c3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAsIHN0
YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVyZmxv
d1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xkVG9w
KSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZmOWEw
Zi4uZjhlMDIxMTcwMDdjYzlmMDZlZGVjZTUxZmY3OWY1ODA0ODVhMTdkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVjdC5o
IgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdpbmF0aW9u
LmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIK
QEAgLTY2Niw5ICs2NjcsOSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZUZs
YXR0ZW5pbmcgZWZmZWN0aXZlRnJhbWVGbGF0dGVuaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0
OjpQYWludEludmFsaWRhdGlvblJlYXNvbnMpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRyb2xU
aW50cygpIHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBh
aW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsgfQotICAg
IHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNlRm9yUGFp
bnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6
OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsgfQor
ICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQogCiAgICAgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyc0ZvckFsbFNjcm9sbGFibGVBcmVhcygpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCmluZGV4IDczZDhiNDljZWE3Y2E2NThkNTU0NmQz
ZWIxNTIyYWQzNGMwYWVjMWMuLmExOGZlNWJiYWI3ZTM2NDk5MzI5ZjJhY2Y3Y2Y2ZjAzYWQyNmI2
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCkBAIC03Miw3ICs3Miw3
IEBAIEdESU9iamVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lKiBmcmFtZSwg
SW50UmVjdCYgaXIpCiAgICAgICAgIDgsIHcgKiBzaXplb2YoUkdCUVVBRCksIHNSR0JDb2xvclNw
YWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRGaXJzdCkpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dC5nZXQoKSk7
CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoY29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0Q0cgZ2MoY29udGV4dC5nZXQoKSk7CiAKICAgICBkcmF3UmVjdEludG9Db250ZXh0KGly
LCBmcmFtZS0+dmlldygpLCBnYyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5k
ZXggYzFiNTM2MDU3MTM3NzRkYzAwNmQwMjhlZGE3YzZhODIxM2Q2Y2NhMS4uMjM3ZWJmYmI4MDMz
OGQzMTNkMmE1MWE3N2UyODMwOWQ3MDVmYmY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8u
Y21ha2UKQEAgLTEyLDcgKzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFj
a2VuZENhaXJvWDExLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0IGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA1ZjAxNDk0ZjNj
YTFlMzFkNzQ3YmY3YzdhZmI3NmFkMGNkN2Y2NzBiLi4xOTdlMzNjZGMzNzUzOGFjOTAwYzg3ZDU0
ZDljNmMzZjM1NjlmNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3Vy
Y2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQKQEAgLTI5LDcgKzI5LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCmluZGV4IDZkODExODg4ODQ2NGQ4MTU1
ZDlkNTA4MzJjY2JhNjQzYjE4N2RhZDguLmEwN2Q2NDZhMmU4MGMxZmUzZTUxNTRhZDdlOGY2ZTAx
NDg5ZWI5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJ
bWFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFn
ZUNvY29hLm1tCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogI2lt
cG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKLSNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNp
bXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlLmgi
CiAjaW1wb3J0ICJQYWdlLmgiCkBAIC0zMDAsNyArMzAwLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgZWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgdGkKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdlID0gYWRvcHROUyhbW05TSW1h
Z2UgYWxsb2NdIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBbZHJhZ0ltYWdlIF93ZWJf
bG9ja0ZvY3VzV2l0aERldmljZVNjYWxlRmFjdG9yOmRldmljZVNjYWxlRmFjdG9yXTsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0uQ0dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF0uQ0dDb250ZXh0KTsKIAogICAgIGNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5kaW5nUmVjdCwgRmxvYXRSb3Vu
ZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSksIGNvbG9yRnJvbU5TQ29sb3Io
W05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg3YTQ0YTUzNDdhYjg2
YmE4ZTE5MzBmMDQyMGU2NDUwOTU2MGI4MWQuLjk2YzlmMGU2OGQxYjlmNGExYTg4NWMwMGEwM2Yz
YjFmNWYzNDk3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FzY2FkZS5jcHAKQEAgLTIyOSw5ICsyMjksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRl
eAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1ZTxE
aXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBHcmFwaGljc0NvbnRleHQg
cmVjb3JkaW5nQ29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQp
IHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihkaXNw
bGF5TGlzdENvbnRleHQsICpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3Qo
KSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxwdHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVj
b3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RG9udERlY29uc3RydWN0KTsKLSAgICB9
KTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxheUxp
c3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBudWxs
cHRyLCBEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1
Y3Rpb246OkRvbnREZWNvbnN0cnVjdCk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50
ID0gdG9GbG9hdFBvaW50KFdlYkNvcmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2Uo
KSkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZlciwg
c3RhcnRQb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDg5NGI1
Y2NlNDIxMWRiMWRmZTJkNDZjYWYwZjY1YzQ0MjFhNTFhNGQuLmE0YTQxNGQxNjNjZmI5MzAyNmVk
MzJlNWQyZDQ0MmVkYzQ0N2NmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5j
bHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRlICJO
dWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtODIsMTEg
KzgyLDYgQEAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkKICAg
ICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCiAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50aXpl
Rm9udHModHJ1ZSkKICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lmIFVT
RShDRykKLSAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93cyB3
aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKLSAgICAvLyBidXQg
d2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5kIC13
ZWJraXQtYm94LXNoYWRvdy4KLSAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2UpCi0j
ZW5kaWYKICAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQogewogfQpAQCAtMTYwLDEwICsx
NTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKICAgICB9CiAKICAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAgICAg
Ly8gRklYTUU6IERlYWwgd2l0aCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzLgogICAgICAg
ICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgbV9z
dGF0ZS5zaGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKICAgICAgICAgbV9zdGF0ZS5zaGFk
b3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICBtX3N0YXRlLnNoYWRvd1JhZGl1
c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAg
LTIyOSwxNCArMjI0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5n
ZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotI2lmIFVTRShDRykKLSAg
ICAgICAgaWYgKG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgICAgIGNv
bnRleHQuc2V0TGVnYWN5U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRv
d0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAg
ICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNo
YWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIH0KKyAgICBpZiAobV9jaGFuZ2VG
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAg
ICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKIAog
ICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyht
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CkBAIC0zMDIsOSArMjkxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICBpZiAo
bV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSkgewogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5zaGFk
b3dCbHVyKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQpOwotI2lmIFVTRShDRykKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJz
aGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVz
KTsKLSNlbmRpZgorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2FjeS1y
YWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5KTsKICAgICB9CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTM2MSw1NSArMzQ4LDE5IEBA
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoCiAgICAgcmV0dXJuIHRzOwogfQogCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zKQotICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zKQotewotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQpCi17
Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZhY3Rv
cnkmIGZhY3RvcnlGdW5jdGlvbikKLSAgICA6IG1faW1wbChmYWN0b3J5RnVuY3Rpb24oKnRoaXMp
KQotewotfQotCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewogICAgIEFT
U0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUNvdW50
KTsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6Omhh
c1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuIG1faW1wbC0+aGFzUGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICEhbV9kYXRhOwor
ICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNhdmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNhdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFUlJPUiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CiAgICAgICAg
IHJldHVybjsKQEAgLTQyMiwyMCArMzczLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCkKICAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkgYWdh
aW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCiAgICAgaWYgKG1fc3RhY2su
aXNFbXB0eSgpKQogICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+cmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVsbGlw
c2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNhdmUoKTsKIAogICAgIHNldFN0cm9r
ZUNvbG9yKHNoYWRvd0NvbG9yKTsKQEAgLTQ1MSw2NyArMzkyLDIxIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBlbGxpCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVRo
aWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVN0cm9r
ZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ry
b2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9zdGF0ZS5zdHJva2VTdHlsZSA9
IHN0eWxlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQogewogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLnN0cm9r
ZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRy
OwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9h
dCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQg
PSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRlLnNo
YWRvd0NvbG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxl
Z2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dD
aGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9m
ZnNldCwgYmx1ciwgY29sb3IpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hhZG93
UmFkaXVzTW9kZSByYWRpdXNNb2RlKQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zm
c2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgbV9zdGF0ZS5zaGFkb3dD
b2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lS
YWRpdXMgPSB0cnVlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNldCwg
Ymx1ciwgY29sb3IpOworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IHJhZGl1c01vZGU7
CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCkBAIC01MTks
MTUgKzQxNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiAgICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKICAgICBtX3N0YXRlLnNoYWRvd0JsdXIg
PSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotI2lmIFVTRShDRykKLSAg
ICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyU2hhZG93KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOworICAgIG1fc3RhdGUuc2hh
ZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7CisgICAgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAKIGJv
b2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0JiBi
bHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CkBAIC01NDQsNjYgKzQzMiw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fc3RhdGUu
ZmlsbENvbG9yID0gY29sb3I7CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRyOwog
ICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpGaWxsQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsKLSAg
ICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxk
QW50aWFsaWFzKQotewotICAgIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFs
aWFzOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoc2hv
dWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNtb290
aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTbW9v
dGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOwotICAgIAotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJv
b2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotewotICAgIG1fc3RhdGUuc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi17Ci0gICAgbV9zdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKLQot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02MTEs
OCArNDQwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBh
dHRlcm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwogICAgIG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVy
biA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVybkNo
YW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVBhdHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBh
dHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYyMCw4ICs0NDgsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKICAg
ICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51
bGxwdHI7CiAgICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3JhZGll
bnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkK
QEAgLTYzMCwxNSArNDU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRp
ZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHIKICAgICBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5zdHJva2VH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKICAg
ICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUdyYWRpZW50Q2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxS
dWxlKFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVs
ZTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYg
Z3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pCkBAIC02NDcsNjQgKzQ2NiwzOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbgogICAgIG1f
c3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5maWxs
R3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxH
cmFkaWVudENoYW5nZSk7IC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAgICB1cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdlKTsK
KyAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKIHsKLSAgICBpZiAobV9pbXBs
KQotICAgICAgICBtX2ltcGwtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0gICAg
ZWxzZQotICAgICAgICBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0g
ICAgKyttX3RyYW5zcGFyZW5jeUNvdW50OworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNvdW50
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
LSAgICBlbHNlCi0gICAgICAgIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBB
U1NFUlQobV90cmFuc3BhcmVuY3lDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lDb3Vu
dDsKKyAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1tX3Ry
YW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8p
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0U2l6
ZSgpOwotCiAgICAgLy8gRGlzcGxheSBsaXN0IHJlY29yZGluZyBmb3IgdGV4dCBjb250ZW50IGlz
IGRvbmUgYXQgZ2x5cGhzIGxldmVsLiBTZWUgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzLgog
ICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBh
ZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBwb2lu
dCwgZm9udFNtb290aGluZ01vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgRm9u
dENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUds
eXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9udC5kcmF3RW1waGFzaXNN
YXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3VzdG9t
Rm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBCaWRpUmVzb2x2ZXI8
VGV4dFJ1bkl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CiAgICAgYmlk
aVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRpcmVj
dGlvbmFsT3ZlcnJpZGUoKSkpOwogICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9yaW5n
TmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIDApKTsKQEAgLTczNCwxOSArNTI4
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2Fk
ZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIGJpZGlSdW5zLmNsZWFyKCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd05hdGl2ZUltYWdlKGltYWdl
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybUltYWdlKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwg
aW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIEltYWdlRHJhd1Jl
c3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQYWlu
dGluZ09wdGlvbnMpCiB7CiAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0KGRl
c3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5z
aXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjAsMTggKzU0MSwxMiBAQCBJbWFn
ZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbgogCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5l
ciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBv
bGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRp
b24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXpl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgqdGhp
cywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwogfQpA
QCAtNzc5LDkgKzU1NCw2IEBAIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdU
aWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiBJbWFnZURyYXdSZXN1
bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9h
dFNpemUmIHRpbGVTY2FsZUZhY3RvciwKICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIEltYWdl
OjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJhd1Jl
c3VsdDo6RGlkTm90aGluZzsKLQogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUg
JiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CiAgICAgICAgIC8vIEp1c3QgZG8gYSBz
Y2FsZS4KICAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJj
ZSwgb3B0aW9ucyk7CkBAIC04MDMsMTQgKzU3NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJj
ZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCAmJiBtX2lt
cGwtPmNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZSkpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3SW1h
Z2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVy
cG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25R
dWFsaXR5KCkpOwogICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9w
dGlvbnMpOwogfQpAQCAtODMzLDM2ICs1OTcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25zdAog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZs
b2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFnZUJ1ZmZlcigqaW1h
Z2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIGlmICghaW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIg
aW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92ZShp
bWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXR0ZXJuKGltYWdl
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJhd1Bs
YXRmb3JtUGF0dGVybihpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci19
Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0KTsK
ICAgICBjbGlwUGF0aChwYXRoKTsKQEAgLTg3MCw5ICs2MTIsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgY2xpcE91dChyZWN0
LnJlY3QoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTg4NSwxNCArNjI0LDYgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0KQogCiBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChH
cmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6
U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwVG9EcmF3
aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2luZ0Z1bmN0
aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nl
c3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRoaXMpOwog
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYzNSwyMiBA
QCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRvSW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlvblJlY3Qp
OwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlSTykKIElu
dFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3Mg
bW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNl
dFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJlY3QpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xv
ciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDb21wb3Np
dGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0KHJlY3Qs
IGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29sb3IsIGJs
ZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5pc1JvdW5k
ZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9u
KCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJlY3QsIGNv
bG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAgICAgICAg
IHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAgfSBlbHNl
CiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3BlcmF0aW9u
KCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKSAmJiAh
VVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRoOwogICAg
IHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNldEZpbGxD
b2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7Ci0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9u
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3Ig
PSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVuZE1vZGU7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKGNvbXBv
c2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAgbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFuY2UoYm9v
bCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0g
dXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVhcmFuY2VD
aGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotLy8g
SW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBtb2RlIGlu
dG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykKLXsKLX0K
LSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQoteworICAgIHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRp
b25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCkK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShD
QUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQm
IHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBAIC0xMTAy
LDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3Vu
ZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAotI2lmICFV
U0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1B
cHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6OnNj
YWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zCiAgICAg
cmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxpcHNlKGVs
bGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxsRWxsaXBz
ZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0
cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0
Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7CisgICAgc3Ry
b2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlQXNQ
YXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0Uo
RElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ry
b2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBkcmF3TGlu
ZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5IHsgMCwg
cmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7CiB9Ci0j
ZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpAQCAtMTIx
OCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxpbmVCb3Vu
ZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4gRmxvYXRS
ZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09mZnNldCwg
c3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZvcm1UZXh0
RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9r
ZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihzdGF0
ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ryb2tlU3R5
bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBsYXRmb3Jt
Q29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1v
ZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFudGlhbGlh
cyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRTbW9vdGhG
b250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5lcldpZHRo
Rm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxvYXQgdGhp
Y2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAgVmVjdG9y
PEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMo
Ym9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OwogfQogCi0j
aWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5r
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29u
c3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAjaWYgRU5B
QkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwg
JiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAgICBtX2lt
cGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3VycmVudEZy
YW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9pZCBOdWxs
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGM3OGFmN2UyNWRkYjU0MTQzY2ViNTlh
MTFmZmZjMjNhYWEzNDcxNjcuLmQ4NzRlYjg0Y2Y1MGE0M2U2ODc5YTEwZmNlNjQyOWEyYTU4ZDNm
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRl
ICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlJl
bmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcgKzg3LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxv
YXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1w
bDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIEltYWdlQnVm
ZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFzcyBUZXh0
RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVGbGFncyA9
IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFk
aXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8vIEl0IGhh
cyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBTaGFkb3dS
YWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisKIGVudW0g
U3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAtMjE5LDE0
ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VPdmVy
IH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07CiAgICAg
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IEludGVycG9s
YXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFkb3dSYWRp
dXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBzaG91bGRB
bnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAgIGJvb2wg
c2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVnYWN5UmFk
aXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwogI2lmIEhB
VkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSA6IDE7
CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2Ug
ewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0NvbnRleHQg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4
dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBoaWNzQ29u
dGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBo
aWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVibGljOiAg
IAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVfRVhQT1JU
IH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52YWxpZGF0
aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZhbGlkYXRp
bmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29k
ZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAgR3JhcGhp
Y3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9FWFBPUlQg
R3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51bSBjbGFz
cyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBDUFVNZW1v
cnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0
KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZvcm1pbmdQ
YWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wgaW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGlu
dHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25z
dCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAgICBib29s
IGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5nQ29udGVu
dGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlk
YXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpbnZhbGlk
YXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tl
VGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlja25lc3Mg
PSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQgc2V0U3Ry
b2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5
bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAgICAgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVN0eWxl
OyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
Jik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJu
PiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRl
cm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQo
UmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRpZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0gICAgdm9p
ZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSBm
aWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBXaW5kUnVs
ZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAgY29uc3Qg
Q29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9yOyB9CiAK
LSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0ZXJuKiBm
aWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCk7IH0K
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4m
JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZpbGxHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9CiAKLSAg
ICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQgc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeyBtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJh
bnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9pZCBzZXRT
aG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91bGRBbnRp
YWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRBbnRp
YWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAgICB2b2lk
IHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9zdGF0ZS5z
aG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9CiAgICAg
Ym9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU21v
b3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwtcXVhbnRp
emF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWduaW5nIGds
eXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0byBlbnN1
cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBzZXRTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsgbV9zdGF0
ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9u
dHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIEludGVycG9s
YXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CisgICAgdm9p
ZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0KKyAgICBm
bG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29sIGlzQ0FM
YXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3Jt
YWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUgYmxlbmRN
b2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0KKworICAg
IHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykgeyBtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7IH0K
KyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5kcmF3
THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7IHVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFu
Z2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3Im
LCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OworCisg
ICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dD
b2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4g
aGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7IH0KKyAg
ICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93
KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQ
T1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7IHVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5jZUNo
YW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVk
Q29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0
IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOworICAg
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3RhY2tTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1YmxpYyBH
cmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0
ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOworCisg
ICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdoYXQsIGFu
ZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2b2lkIHNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEgR3JhcGhp
Y3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQgb2ZmIHRo
ZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQorCisgICAg
Ly8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAgICAgUm91
bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAgfTsKKyAg
ICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZs
b2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisgICAgLy8g
QmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0
cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1JlY3QoKSwg
d2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNpbmcgYSAx
LXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBjb3JyZWN0
CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0IENvbG9y
JiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAwOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7CiAKLSAg
ICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJhd1JhaXNl
ZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29u
c3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7
IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1h
bCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7Ci0gICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5k
TW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxv
YXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9p
bikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQg
bGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZp
cnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUm
IHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdl
T3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2Ug
fSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0
aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdS
ZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1h
Z2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdU
aWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgSW1h
Z2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNj
YWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdU
aWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6
VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwot
ICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVm
ZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdl
QnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50
ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHk7IH0KKyNpZiBFTkFCTEUoVklERU8pCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pOworI2VuZGlmCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcChj
b25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNs
aXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xp
cE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0g
MDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIGVudW0gY2xhc3MgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3JlYXRlSW1hZ2VC
dWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFj
ZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1h
bmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
RnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7CiAgICAgCi0gICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3
aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQorICAgIC8vIFRleHQK
IAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBw
ZWFyYW5jZShib29sKTsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQotI2VuZGlmCisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1
bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9
IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOwogCi0g
ICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+
IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAg
dm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBk
cmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2Fz
Y2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9h
dFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9v
bCBwcmludGluZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdMaW5lRm9y
VGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0g
ZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2Us
IFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSkgPSAwOwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmKTsKKyAgICAvLyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBlbnVtIFJvdW5kaW5n
TW9kZSB7Ci0gICAgICAgIFJvdW5kQWxsU2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGlt
ZW5zaW9ucwotICAgIH07Ci0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJl
Y3QgY29tcHV0ZVVuZGVybGluZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBw
cmludGluZyk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3Qg
RmxvYXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJv
a2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xp
ZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0luVHJhbnNwYXJl
bmN5TGF5ZXIoKSBjb25zdCB7IHJldHVybiAobV90cmFuc3BhcmVuY3lDb3VudCA+IDApICYmIHN1
cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlz
SW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVy
Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOyB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBj
b25zdCBDb2xvciYpOwotICAgIC8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMgdXNlZCBm
b3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIC8vIEl0IGhhcyBkaWZmZXJl
bnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgotICAgIHZvaWQgc2V0TGVnYWN5U2hhZG93KGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyU2hhZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXpl
JiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQotICAgIGJv
b2wgaGFzU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0
YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRl
LnNoYWRvd09mZnNldC5oZWlnaHQoKSk7IH0KLSAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBj
b25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9
CisgICAgLy8gRm9jdXMgUmluZ3MKIAotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIC8vIEZJ
WE1FOiBDYW4gd2UgaGlkZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3
aGVyZT8KICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBh
dGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91Ymxl
IHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9v
bCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKICNlbmRpZgogCi0gICAgdm9pZCBz
ZXRMaW5lQ2FwKExpbmVDYXApOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7Ci0g
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KTsKLQotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQp
OwotICAgIGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yOyB9Ci0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUuYmxlbmRNb2RlOyB9Ci0KLSAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VN
YXNrKGJvb2wpOwotICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrOyB9Ci0KLSAgICAvLyBUaGlzIGNsaXAgZnVuY3Rpb24g
aXMgdXNlZCBvbmx5IGJ5IDxjYW52YXM+IGNvZGUuIEl0IGFsbG93cwotICAgIC8vIGltcGxlbWVu
dGF0aW9ucyB0byBoYW5kbGUgY2xpcHBpbmcgb24gdGhlIGNhbnZhcyBkaWZmZXJlbnRseSBzaW5j
ZQotICAgIC8vIHRoZSBkaXNjaXBsaW5lIGlzIGRpZmZlcmVudC4KLSAgICB2b2lkIGNhbnZhc0Ns
aXAoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHZvaWQg
Y2xpcE91dChjb25zdCBQYXRoJik7CisgICAgLy8gVHJhbnNmb3JtcwogCi0gICAgdm9pZCBzY2Fs
ZShmbG9hdCBzKQotICAgIHsKLSAgICAgICAgc2NhbGUoeyBzLCBzIH0pOwotICAgIH0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHZvaWQgcm90
YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2Nh
bGUoeyBzLCBzIH0pOyB9CisgICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7
CiAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOyB9CiAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3Qg
RmxvYXRQb2ludCYgcCkgeyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotCi0gICAgdm9pZCBzZXRV
UkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwogCi0gICAgdm9pZCBzZXREZXN0aW5h
dGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2
b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0
UG9pbnQmKTsKLQotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwot
ICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZpcnR1YWwgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOwogCiAgICAgZW51bSBJbmNsdWRl
RGV2aWNlU2NhbGUgeyBEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1
ZGVEZXZpY2VTY2FsZSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVk
ZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0ID0gMDsKIAog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0
aGUgY29udGV4dCwgbWFraW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKICAgICAvLyBhY3Rpbmcg
YXMgYSBiYXNlLWxldmVsIGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKLSAgICB2b2lk
IHBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgRmxvYXRTaXplIHNj
YWxlRmFjdG9yKCkgY29uc3Q7Ci0gICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3Rvcikg
eyBzY2FsZShmYWN0b3IpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFj
dG9yKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9y
RHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9j
b250ZW5mdWxQYWludERldGVjdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgY29udGVuZnVsUGFpbnRE
ZXRlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVuZnVsUGFpbnREZXRlY3RlZDsgfQorICAg
IC8vIExpbmtzCiAKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBw
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYs
IGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9u
Rm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9p
bnQmKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgLy8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24K
KworICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBh
aW50RGV0ZWN0ZWQgPSB0cnVlOyB9CisgICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQogCisgICAgLy8gRklY
TUU6IE5vdGhpbmcgaW4gdGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBiZSBt
b3ZlZCBlbHNld2hlcmUuCiAjaWYgT1MoV0lORE9XUykKICAgICBIREMgZ2V0V2luZG93c0NvbnRl
eHQoY29uc3QgSW50UmVjdCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpOyAvLyBUaGUgcGFzc2Vk
IGluIHJlY3QgaXMgdXNlZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNvbXBvc2l0aW5nIGluc2lk
ZSB0cmFuc3BhcmVuY3kgbGF5ZXJzLgogICAgIHZvaWQgcmVsZWFzZVdpbmRvd3NDb250ZXh0KEhE
QywgY29uc3QgSW50UmVjdCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpOyAvLyBUaGUgcGFzc2Vk
IGluIEhEQyBzaG91bGQgYmUgdGhlIG9uZSBoYW5kZWQgYmFjayBieSBnZXRXaW5kb3dzQ29udGV4
dC4KICAgICBIREMgaGRjKCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIEdyYXBoaWNz
Q29udGV4dChIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1v
dmVkLgogCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBleGlzdDsgd2UgbmVlZCBhIGRp
ZmZlcmVudCBwbGFjZSB0bworICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFdpbmRvd3Mg
Q0cgYW5kIFdpbmRvd3MgQ2Fpcm8gYmFja2VuZHMuCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0ID0gMDsK
KyNpZiBQTEFURk9STShXSU4pCiAgICAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSwgY2hpbGQgd2luZG93
cyBzaG91bGQgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQKICAgICAvLyByYXRoZXIgdGhh
biBhbGxvd2luZyB0aGVtIGp1c3QgdG8gcmVuZGVyIHRvIHRoZSBzY3JlZW4uIERlZmF1bHRzIHRv
CiAgICAgLy8gZmFsc2UuCkBAIC01NjQsMTIgKzU3NywxMiBAQCBwdWJsaWM6CiAjaWYgVVNFKERJ
UkVDVDJEKQogICAgIEdyYXBoaWNzQ29udGV4dChIREMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiwg
UkVDVCwgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSUQyRDFGYWN0b3J5KiBzeXN0ZW1GYWN0b3J5KCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVu
ZGVyVGFyZ2V0KCk7CisgICAgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwor
ICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCgpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpbkRyYXcoKTsKKyAgICB2b2lkIGJlZ2luRHJhdygp
OwogICAgIEQyRDFfQ09MT1JfRiBjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYpIGNv
bnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5kRHJhdygpOworICAgIHZvaWQgZW5kRHJh
dygpOwogICAgIHZvaWQgZmx1c2goKTsKIAogICAgIElEMkQxQnJ1c2gqIHNvbGlkU3Ryb2tlQnJ1
c2goKSBjb25zdDsKQEAgLTU4NSw2MSArNTk4LDEzIEBAIHB1YmxpYzoKICNlbmRpZiAvLyBQTEFU
Rk9STShXSU4pCiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIAotICAgIHN0YXRpYyB2b2lkIGFkanVz
dExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIsIGZs
b2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7Ci0KLSAgICBib29sIHN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0OwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbCogaW1wbCgpIHsgcmV0
dXJuIG1faW1wbC5nZXQoKTsgfQotCiBwcml2YXRlOgotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKLQot
I2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIGJvb2wgaGFzQWxw
aGEgPSBmYWxzZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBm
YWxzZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqLCBC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQotICAgIHZvaWQgc2F2ZVBsYXRm
b3JtU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7Ci0KLSAgICB2b2lk
IHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLQotICAg
IHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVN0
cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtRmlsbENvbG9yKGNv
bnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wp
OwotICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sKTsKLSAgICB2b2lk
IHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhclBsYXRmb3JtU2hhZG93KCk7Ci0K
LSAgICB2b2lkIHNldFBsYXRmb3JtQWxwaGEoZmxvYXQpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1D
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9k
ZTo6Tm9ybWFsKTsKLQotICAgIHZvaWQgYmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpOwotICAgIHZvaWQgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogCitwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7CiAK
LSAgICB2b2lkIHBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9p
ZCBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0KLSAgICB2b2lkIHBs
YXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsK
LSAgICB2b2lkIGRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KICAgICBGbG9hdFJlY3QgY29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29s
IHByaW50aW5nLCBDb2xvciYpOwogCiAgICAgZmxvYXQgZGFzaGVkTGluZUNvcm5lcldpZHRoRm9y
U3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OwpAQCAtNjQ3LDE1ICs2MTIsMTMgQEAgcHJpdmF0ZToK
ICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5BbmRTdHJva2VXaWR0
aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdDsKICAgICBWZWN0
b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9vbCBpc1ZlcnRpY2Fs
TGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBGbG9hdFBvaW50IHBv
aW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0
YSB7IG51bGxwdHIgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0SW1wbD4g
bV9pbXBsOwotCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsKKworcHJpdmF0ZToK
ICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7CiAKLSAgICBjb25z
dCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgeyBQ
YWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKLSAgICB1bnNpZ25lZCBtX3RyYW5zcGFy
ZW5jeUNvdW50IHsgMCB9OwotICAgIGJvb2wgbV9jb250ZW5mdWxQYWludERldGVjdGVkIHsgZmFs
c2UgfTsKKyAgICB1bnNpZ25lZCBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgeyAwIH07CisgICAg
Ym9vbCBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkIHsgZmFsc2UgfTsKIH07CiAKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgewpAQCAtNzQ0LDggKzcwNyw2IEBAIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9zdGFja1NpemU7CiB9OwogCi0KLQogY2xhc3MgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnRlcnBvbGF0aW9uUXVh
bGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEludGVycG9s
YXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjE0YTBhODkyYjZlOTlmOTlkYjgyM2NlYTM1
MjFiNGM1ZmY1NWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNz
Q29udGV4dEltcGw6OkdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQotICAgIDogbV9ncmFwaGljc0NvbnRleHQoY29udGV4dCkKLXsKLX0KLQotR3JhcGhpY3NDb250
ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4dEltcGwoKQotewotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYjQ2ZGI3
NGQzNThlMWUzYjdmZjNiZDY1MzNlZjM0YmQzODQ3OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGwgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dEltcGwpOwot
cHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAg
dmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbCgpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzQ29udGV4dDsgfQotCi0g
ICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsZWFyU2hhZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNldExpbmVD
YXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldExpbmVK
b2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgo
Y29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNv
bnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
JikgPSAwOwotCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBhdHRl
cm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7Ci0jZW5k
aWYKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHJlc3RvcmUoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5z
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKLSAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2
aWNlU2NhbGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNs
aXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwotICAgIHZpcnR1YWwgSW50UmVjdCBj
bGlwQm91bmRzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9u
Q29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVu
Y3Rpb24pID0gMDsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdmlydHVhbCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxh
eWVyJikgY29uc3QgPSAwOwotI2VuZGlmCi0gICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5k
VG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGlu
Z01vZGUpID0gMDsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0
OwotICAgIEdyYXBoaWNzQ29udGV4dCYgbV9ncmFwaGljc0NvbnRleHQ7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5j
cHAKaW5kZXggNDQwZjcyNTM1ODJjYzY0OTMxNWYyNDczYjM5MDMyMmIwYTY2MjA4NS4uMTM4MGU3
ZWQ5ZmM4ZjM2NDhlZjA2NzE5MzQ4ZGJlNzcxY2Y5OTkzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcApAQCAtMTg4LDggKzE4OCw5IEBAIEltYWdlRHJhd1Jl
c3VsdCBJbWFnZTo6ZHJhd1RpbGVkKEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjCiAgICAgfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAvLyBG
SVhNRTogRG8gd2UgcmVhbGx5IHdhbnQgdG8ga2VlcCB0aGlzIGJlaGF2aW9yIGRpZmZlcmVuY2U/
Pz8KICAgICAvLyBXaGVuIHVzaW5nIGFjY2VsZXJhdGVkIGRyYXdpbmcgb24gaU9TLCBpdCdzIGZh
c3RlciB0byBzdHJldGNoIGFuIGltYWdlIHRoYW4gdG8gdGlsZSBpdC4KLSAgICBpZiAoY3R4dC5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7CisgICAgaWYgKGN0eHQucmVuZGVyaW5nTW9kZSgpID09
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7CiAgICAgICAgIGlmIChzaXplKCkud2lkdGgo
KSA9PSAxICYmIGludGVyc2VjdGlvbihvbmVUaWxlUmVjdCwgZGVzdFJlY3QpLmhlaWdodCgpID09
IGRlc3RSZWN0LmhlaWdodCgpKSB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVNyY1Jl
Y3Q7CiAgICAgICAgICAgICB2aXNpYmxlU3JjUmVjdC5zZXRYKDApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggNGQzZjQzMGM2MTdkMTAwMTZlZjUzODBmZDg5
YTk0Y2IwYmFlYTZjMy4uMTc2NDc0N2Q2MTQwY2YxMTZjOWM2NDI2ZGRjOTcxYWMyYmViOTgwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC03MSw3ICs3MSw2
IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9h
dFNpemU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBs
OwogY2xhc3MgU2hhcmVkQnVmZmVyOwogc3RydWN0IExlbmd0aDsKIApAQCAtODAsNyArNzksNiBA
QCBjbGFzcyBJbWFnZU9ic2VydmVyOwogCiBjbGFzcyBJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVk
PEltYWdlPiB7CiAgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbDsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbWFnZSgp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVs
bEdyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVs
bEdyYXBoaWNzQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiOTQ5YjY4YWViYzI4ZjJiZmEzNWE1NzQ5
YWJjYWM3MzlmNjMwYzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIE51bGxHcmFwaGljc0NvbnRleHQgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1Ymxp
YzoKKyAgICBlbnVtIGNsYXNzIFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3Qgewor
ICAgICAgICBOb25lLAorICAgICAgICBJbnZhbGlkYXRpbmdDb250cm9sVGludHMsCisgICAgICAg
IEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMsCisgICAgICAgIERldGVjdGluZ0Nv
bnRlbnRmdWxQYWludAorICAgIH07CisKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyByZWFzb25zKQorICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zKHJlYXNvbnMpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyNpZiBVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwg
eyB9CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbmRpZgorCisgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9u
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250
cm9sVGludHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29u
cyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsg
fQorICAgIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQorICAgIGJv
b2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWlu
dEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3Rp
bmdDb250ZW50ZnVsUGFpbnQ7IH0KKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykg
ZmluYWwgeyB9CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmlu
YWwgeyB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBs
eUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
ZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgPSAxKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQg
ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQp
IGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2lu
ZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQorICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykg
ZmluYWwgeyByZXR1cm4gcmVjdDsgfQorICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wsIGJvb2wgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkg
ZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmlu
YWwgeyB9CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmlu
YWwgeyB9CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWwgeyB9CisgICAgdm9p
ZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
UGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwg
eyB9CisgICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgdHJhbnNsYXRl
KGZsb2F0LCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJikgZmluYWwgeyB9CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWwgeyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNl
U2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4g
eyB9OyB9CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9Cisg
ICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91
dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0K
KyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsg
fQorCisgICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIE9wdGlvbmFsPHVuc2lnbmVk
PiA9IFdURjo6bnVsbG9wdCkgZmluYWwgeyByZXR1cm4geyB9OyB9CisKKyAgICB2b2lkIGRyYXdH
bHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdN
b2RlKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYsIGNvbnN0IEZsb2F0UG9p
bnQmLCB1bnNpZ25lZCA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiA9IFdURjo6bnVsbG9wdCkgZmlu
YWwgeyB9CisgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7
IH0KKworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWwgeyB9CisKKyAgICBJbWFnZURyYXdSZXN1
bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0
dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBk
cmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0lt
YWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmlu
YWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisKKyAgICBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6
OkRpZE5vdGhpbmc7IH0KKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0K
KworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNpZiBQ
TEFURk9STShNQUMpCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUs
IGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZl
cihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworCisgICAgdm9pZCBj
bGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0K
KworICAgIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNS
ZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVu
ZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorI2VuZGlmCisK
KyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQor
I2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6CisgICAgY29uc3QgUGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDhhMzU1
MmZlODlmMjg1NDA5ZjI1NDU4NDkxM2Q1ZTZmMWVjZWIwMTMuLjdkMDNkYjYyZDY2ZmMxZjg2YjI3
YzY5Mjc0ZmI4N2I5Y2E5YTExZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyArMTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hh
ZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQogewogI2lm
IFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykgeworICAgIC8v
IENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4g
OHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHBy
ZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hh
ZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRp
dXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShz
aGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA3OGM3OWNk
N2U4OWU5MmMyNmM0ZmU2YzQ3ZGU5NTdmZmQ4ZmY5NmM0Li40NDNhNTZhMmI3NDViZWJlZGRkNTgx
NjdhZDZiMWQzMzIyZmIwYjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE3NDEsOSArMTc0MSw3IEBA
IHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRl
JiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5p
dGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihjb250ZXh0LCAqbV9kaXNw
bGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5z
Zm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciBjb250
ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwg
QWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhj
b250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3
N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRmMzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAi
Q29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRl
ICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb25XaW4u
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2luY2x1ZGUgIlRl
eHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJh
d1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENHRmxvYQogICAg
IEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAg
ICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250ZXh0
KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29s
b3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJ
bnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQz
NjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJlNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0Ep
CiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxh
eWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tp
bmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKIAogICAgIFBs
YXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWln
aHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJ
dCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBp
dCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91
bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dD
b2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
Y29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250
ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tp
bmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
V2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3
ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2RjZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9X
ZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIK
ICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpA
QCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2Fs
bGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZgogICAgIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3duZXIoKTsKICAgICBHcmFwaGljc0xheWVy
OjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBjbGllbnQt
PnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRo
ZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkK
ICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1
ZjEwZTQyZGU3NWExMjhiMDc1Ny4uYmE1OTRhZThjYzJhODAyYjY1NjA2MGZiMGUzYmJhMjIxODY5
ODQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogCiAjaWYgVVNFKENBSVJPKQogCkBA
IC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtNTcsNjMzICs1NiwzNTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0
Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8o
UGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1fcGxhdGZvcm1D
b250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQogewotICAgIGlm
ICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1f
ZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsK
LSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CisgICAgbV9w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkp
OworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKKyAg
ICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHRDYWly
bz4oY2Fpcm9Db250ZXh0KSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZv
cm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCiB7Ci0gICAgaWYgKG1fZGF0YSkgewot
ICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRl
KG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgIH0KKyAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBp
bmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdyYXBoaWNzQ29udGV4
dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGljc0NvbnRleHRDYWly
bzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBj
b25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAmbV9kYXRhLT5w
bGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUoKnBsYXRmb3JtQ29u
dGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRl
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAg
ICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogLy8gRHJhd3MgYSBm
aWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUlt
YWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMs
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZv
cm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBz
dGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIC8vIFRoaXMgaXMg
b25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3Mu
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3TGlu
ZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwg
c3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxp
dHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3Qs
IHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRo
LmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxsUGF0aCgqcGxh
dGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRo
LmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0cm9rZVBhdGgo
KnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgQ2Fpcm86OkZp
bGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworfQog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9y
KTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3Rh
dGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0dGVybikKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRl
eHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGF0dGVy
bi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDb21wb3NpdGVP
cGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CiAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3Bs
YXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86
OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9w
bGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30K
IAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBDYWlybzo6Y2xpcCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlw
UnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QK
K0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxh
dGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVj
dCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0
YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vsc2UKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3Jt
Q29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICNpZiBQTEFU
Rk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMo
KnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
VW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0Lmxv
Y2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBw
cmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChw
b2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwg
dGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0
cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihy
ZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRp
bmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3Vu
ZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRv
RGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gQ2Fpcm86OlN0
YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjp0
cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsKLSAgICAvLyBDYWly
byBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAg
ICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9r
ZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25z
dCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2Vw
YXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3Qg
YmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYgKGZsYWdzICYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86
OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRo
aWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VT
dHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAg
ICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICAgICAgLy8g
TWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBD
YW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQg
c2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcworICAgICAgICAg
ICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAgICAgICAgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zm
c2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoKnBsYXRmb3Jt
Q29udGV4dCgpLCBzdHJva2VTdHlsZSk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFu
dGlhbGlhc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMo
bV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwg
dHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RN
KCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQg
aXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAvLyBX
ZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRl
IFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zmc2V0LndpZHRoKCks
IC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2lu
UGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNv
bnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNz
Q29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6
OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChs
aW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBs
aW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERh
c2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZz
ZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFz
aE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCks
IGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5z
ZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lSm9pbigqcGxhdGZv
cm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1p
dGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBz
aG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1p
dChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQo
KSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShm
bG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
YmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVy
YXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwg
d2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNp
emUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpm
aWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpmaWxs
Um91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkK
KyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJv
dW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bs
YXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRT
aXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpk
cmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJh
d1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50U2l6ZShpbWFnZVNp
emUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25z
KTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFn
ZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK1Jl
bmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRB
bnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJldHVybiBDYWlybzo6
U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3
R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywg
Y29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykK
IHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1
cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhf
dD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1dG8geU9mZnNldCA9
IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsr
aSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwg
eU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwor
ICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKKyAgICAgICAgfQor
ICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpw
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9
IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJsZSBzeW50aGV0aWNC
b2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAgICBpZiAoIWZvbnQu
YWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3Ro
aW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29s
b3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmNjMWVlYzA2ZDMzMzg5NGVh
ZGI4YjFkZTQ2NmQ2N2JiMTAyYWJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtMCwwICsx
LDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8g
Y2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUNvbnRleHRD
YWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZmluYWwg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRD
YWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKGNh
aXJvX3QqKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRDYWlybygpOworCisgICAgYm9v
bCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICBQbGF0Zm9ybUNvbnRleHRD
YWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOwor
ICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsOworICAg
IHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1p
dChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmlu
YWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5kZWRS
ZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgo
Y29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
KyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQg
ZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEds
eXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYs
IEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKworICAgIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29u
c3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZvaWQg
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKwor
ICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworCisgICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShmbG9h
dCkgZmluYWw7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKKyAgICB2
b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7CisgICAgdm9p
ZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5h
bDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7
CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSog
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CisjZW5kaWYKKworcHJpdmF0
ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0
Zm9ybUNvbnRleHQ7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4g
bV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGUyNjFlZjMwZTY4M2RjOTU4ZTdmMmI5ZTE4NGI2NTk2MmYzZjM3
OTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdh
bGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIK
LQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1
ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5
cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKLXsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgK
LSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQotewotICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAg
ICBbY2Fpcm9Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxDYWlybz4oY29u
dGV4dCwgY2Fpcm9Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKLSAgICA6IEdyYXBoaWNz
Q29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29u
dGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUt
PnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwo
Y29udGV4dCkKLSAgICAsIG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9y
bUNvbnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCpt
X293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCi17Ci0gICAgbV9w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkp
OwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Ci19
Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6fkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygp
Ci17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxs
cHRyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86Omhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dENh
aXJvKiBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkK
LSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAg
IGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAg
ICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBN
ZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBz
aW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAg
ICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4o
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZz
ZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93
T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
aG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGVhclNoYWRvdygpCi17Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGlu
ZUNhcCkKLXsKLSAgICBDYWlybzo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4dCwgbGluZUNh
cCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBDYWlybzo6c2V0
TGluZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9p
bikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVKb2lu
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChtX3BsYXRmb3JtQ29u
dGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENhaXJvOjpm
aWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRlcm4uZ2V0KCkpOwotICAgIENhaXJv
OjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9w
ZXJhdG9yOwotCi0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0
Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotICAgIENhaXJvOjpm
aWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxh
dGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQot
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVP
cGVyYXRvcjsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRm
b3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAgIENhaXJvOjpT
aGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkp
Ci0gICAgICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBDYWlybzo6ZmlsbFJlY3Qo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBjb2xvciwgc2hhZG93U3RhdGUpOwotCi0g
ICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQs
IHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIHsgfSwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUGF0aChtX3BsYXRmb3Jt
Q29udGV4dCwgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5h
ZGRFbGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxpbmVX
aWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgQ2Fp
cm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0
KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xl
YXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nKQotewotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBW
ZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKLSAgICB7Ci0gICAg
ICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGds
eXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OwotICAgICAgICAgICAgeE9mZnNldCArPSBhZHZh
bmNlc1tpXS53aWR0aCgpOwotICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWln
aHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxl
ZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKTsKLSAgICBkb3VibGUgc3lu
dGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgaWYg
KCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQotICAgICAgICBmb250U21vb3RoaW5nID0gRm9u
dFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250
ZXh0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LAotICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwg
c3ludGhldGljQm9sZE9mZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRl
LnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZz
ZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAotICAgICAgICBmb250U21vb3RoaW5nKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
aW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2UuZHJh
dyhncmFwaGljc0NvbnRleHQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZv
cm1JbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKHNwYWNpbmcpOwotICAgIENhaXJvOjpkcmF3UGF0dGVybihtX3BsYXRmb3JtQ29udGV4
dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RS
ZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0
eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdMaW5lKG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwg
c3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25l
c3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBw
b2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0
ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRy
YXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0aChjb25zdCBQYXRo
JikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9j
dXNSaW5nKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3Vz
UmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdHMsIHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzYXZlKCkKLXsKLSAgICBDYWlybzo6c2F2ZShtX3Bs
YXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyZXN0
b3JlKCkKLXsKLSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
LXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKG1fcGxhdGZvcm1Db250ZXh0LCB4LCB5KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykKLXsKLSAgICBDYWlybzo6cm90YXRlKG1fcGxhdGZvcm1Db250ZXh0LCBhbmdsZUluUmFkaWFu
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCi17Ci0gICAgQ2Fpcm86OnNjYWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzaXpl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0Q1RNKG1fcGxh
dGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIENh
aXJvOjpTdGF0ZTo6c2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi1B
ZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6
Z2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBDYWly
bzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCwgb3BhY2l0eSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigp
Ci17Ci0gICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXAoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYg
cGF0aCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBDYWlybzo6Y2xpcFBhdGgobV9wbGF0Zm9y
bUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNsaXBCb3VuZHMoKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENs
aXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICBDYWlybzo6Y2xp
cFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRleHQsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gQ2Fp
cm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4K
LX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpw
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAg
IC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJhMWVlZTM5MDczYTI2ZTA5
N2I5NmM3NDY1M2ZhNjE2ZjkyNjUyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi10eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9f
dDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsK
LQotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvIGZpbmFsIDogcHVibGljIEdyYXBoaWNz
Q29udGV4dEltcGwgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZv
cm1Db250ZXh0Q2Fpcm8mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KGNhaXJvX3QqKTsK
LQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9y
bUNvbnRleHRDYWlybyYpOwotICAgIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0Nv
bnRleHQmLCBjYWlyb190Kik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
KCk7Ci0KLSAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGVhclNoYWRvdygpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIEdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92
ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29u
c3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFu
Y2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5n
TW9kZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3Im
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNh
dmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
dHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5l
VHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
Y2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7
Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikg
b3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdN
b2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1D
b250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0
Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwCmluZGV4IGM5ZTcwODAxNDZjN2YyMzI3MjdkMWE0MjdlMTFlNmJjOGQwODE4ZjIu
LjA1MjEyMjBkNjI1NTQ2OTM1MjZlYjQ4NzQwNjJiMzA0MDk2ZGFhOWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDb2xv
ci5oIgogI2luY2x1ZGUgIkNvbG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwCmluZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUwNzYyNzVmNTIzZmE4
MDcxZWEuLjliNWMwYWQwNzQ0NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQyYzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMzQsNyArMzQs
NyBAQAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNp
bmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJz
JgogCiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3Vy
ZmFjZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAg
ICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9jb250
ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0Zm9ybUNvbnRleHQp
OwogfQogCiBHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
Y29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGF0aENhaXJvLmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJmMDNjN2I2NWQwMzZk
ZGE4OTlmMGY5MDFmLi4yYTE5ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4NzQ1M2RhYWYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhD
YWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1VuaXF1ZVB0ci5oIgog
I2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3ICs0MjEsNyBAQCBG
bG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAg
ICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0
cm9rZVN0eWxlQXBwbGllcihnYyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBQ
YXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rp
b248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxl
QXBwbGllcihncmFwaGljc0NvbnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4
IGVmM2FjMmUxMzcxYjhlMWM5MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZkYjFhZTA2NTc0YmRm
ODE1YzYxNjcwZTA2Y2I2NzdhMDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTU1LDE3
ICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xv
cihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldENH
U3Ryb2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsK
LSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0Nv
bG9yKGNvbG9yKSk7Ci19Ci0KIGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNl
Q1RNKENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9y
bUNvbmNhdChDR0NvbnRleHRHZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0
KENHQ29udGV4dEdldEJhc2VDVE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGljIEludGVycG9sYXRp
b25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFs
aXR5IHF1YWxpdHkpCitzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29yZUludGVycG9sYXRp
b25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsKICAgICBzd2l0Y2gg
KHF1YWxpdHkpIHsKICAgICBjYXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OgpAQCAtODIsNiAr
NzcsMzQgQEAgc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9u
UXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4gSW50ZXJwb2xhdGlv
blF1YWxpdHk6OkRlZmF1bHQ7CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRpb25RdWFsaXR5IGNn
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3sKKyAg
ICBzd2l0Y2ggKHF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZh
dWx0OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CisgICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgcmV0dXJuIGtD
R0ludGVycG9sYXRpb25Ob25lOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoK
KyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Mb3c7CisgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1
bTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4g
a0NHSW50ZXJwb2xhdGlvbkhpZ2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9u
RGVmYXVsdDsKK30KKworc3RhdGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4dERyYXdpbmdNb2Rl
KFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxsID0gbW9kZS5jb250
YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tlID0gbW9kZS5jb250
YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQor
ICAgICAgICByZXR1cm4ga0NHVGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZpbGwpCisgICAgICAg
IHJldHVybiBrQ0dUZXh0RmlsbDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9rZTsKK30KKwogc3Rh
dGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3aXRjaCAoYmxlbmRN
b2RlKSB7CkBAIC0xNTYsMzUgKzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dC
bGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTQogICAg
IHJldHVybiBrQ0dCbGVuZE1vZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNzQ29udGV4dENHOjpH
cmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewogICAgIGlmICghY2dD
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250
ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENv
bG9yKGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9y
KCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsK
LSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xh
dGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250
ZXh0KCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgaXQgc2V0
cyBpdCBiYWNrIG9uIHRoZSBHcmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBpdCBkb2Vzbid0IG1h
dHRlcj8KKyAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yKCkpOworICAgIHNldFN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOworICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3Mo
KSk7CisgICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9s
YXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29u
dGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQor
R3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAgICAgZGVsZXRlIG1f
ZGF0YTsKIH0KIAotQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0
KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRl
eHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlz
YWJsZWQoKSk7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBt
X2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2
ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAg
QVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBu
b3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNp
bmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25k
YXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAt
MTkyLDEwICsyMTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUo
KQogICAgIG1fZGF0YS0+c2F2ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0g
ICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKICAgICAvLyBOb3Rl
OiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRp
b24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0
aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmgpLgpAQCAtMjA0LDEwICsyMzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBs
YXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRm
b3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1
dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNpZiAhTE9HX0RJU0FC
TEVECiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsK
QEAgLTI5OCw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1h
Z2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogCiAgICAgYXV0byBv
bGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGF1dG8gb2xk
QmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxhdGZvcm1Db21wb3Np
dGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9k
ZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNU
TShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwpA
QCAtMzI1LDEwICszNTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUlt
YWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4
dCwgd2FzQW50aWFsaWFzZWQpOwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRmb3JtQ29tcG9zaXRl
T3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOworICAgICAgICBz
ZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7
CiAgICAgfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGlj
c0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8
IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOworICAg
IExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8
PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93
KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQogCiBzdGF0aWMgdm9p
ZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQpA
QCAtMzM5LDcgKzM2NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCog
aW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4
dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0
KTsKICNlbmRpZgotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRl
eHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
Y29udGV4dCwgR3JhcGhpY3NDb250ZXh0Q0coY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhG
bG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsK
IH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQpAQCAt
MzQ3LDE2ICszNzIsMTggQEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lk
KiBpbmZvKQogICAgIGNhbGxPbk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRDRihzdGF0aWNfY2Fz
dDxDR0ltYWdlUmVmPihpbmZvKSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAh
cGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gaW1hZ2UgPSBu
YXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAot
ICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0
b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkg
KyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwg
LTEpOwpAQCAtNDIzLDE2ICs0NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRm
b3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRgogfQogCiAv
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9y
ZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUg
cGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNo
b3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4LDE5ICs0NzcsMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3
IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9p
bnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0
cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSAr
IHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IGlzVmVy
dGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIueCgpIC0gcG9pbnQx
LngoKTsKQEAgLTUyNiwzMSArNTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50CiAgICAg
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVlKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJl
Y3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0
dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ryb2tlUGF0dGVybigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0g
QWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTU2NSwx
NiArNTYwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAg
ICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5n
ZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZp
bGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFu
c2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2LDE1ICs2MDMsMTAg
QEAgc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91
bGRTdHJva2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1Bh
dGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpAQCAtNjU0LDE2ICs2
MzYsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBp
ZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBp
ZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEwIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7Cisg
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzk0LDE2ICs3NjYs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQog
I2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtODMz
LDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAgIGFwcGx5Rmls
bFBhdHRlcm4oKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9v
bCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQs
IGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1
cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENHQ29udGV4dEZpbGxS
ZWN0KGNvbnRleHQsIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsK
IAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9y
KGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJh
dGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdu
b3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisg
ICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNv
bnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAg
IC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29s
b3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9
IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBi
b29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVk
U2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVz
ZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1
cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENH
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAg
ICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpA
QCAtOTI0LDE2ICs4NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwogICAgICAgICBzZXRD
R0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIAogICAgIFBhdGggcGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAvLyBmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZSgpIGFzc3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVjdCBhcmUgY2xpcHBl
ZCBvdXQsIHNvIHdlIG9ubHkgY2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJvdW5kIGluc2lkZSB0
aGUgaG9sZS4KLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQo
KSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7CisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAg
ICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkxMywyOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAg
IG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBP
dXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogVXNpbmcg
Q0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBjbGlwIGJvdW5k
aW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDky
PiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRl
eHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBh
IHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0
NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBl
aXRoZXIuCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBi
b29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRl
eHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVkQ29udGV4dCgpIHx8
ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUg
PSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBE
RiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwg
KCFjdG0uYigpICYmICFjdG0uYygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VD
R1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5n
Qm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4dEJlZ2luUGF0aChw
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0
KCksIHJlY3RzLCAyKTsKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0Nv
bnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdC
b3gocGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQpAQCAtMTAy
MywxNiArOTQyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYg
cGF0aCkKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xp
cFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBh
dGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CkBA
IC0xMDQ5LDIzICs5NjAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsK
IH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVj
dCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQogICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRl
eHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
CiAKICAgICBzYXZlKCk7CiAKQEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICBt
X2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIo
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTEwODgs
MTEgKzk4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5j
eUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRp
YyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBAIC0xMTAwLDcgKzk5
NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7
CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQorICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKENH
Q29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCkpKQpAQCAtMTEyMSwyMSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09m
ZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAj
ZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0
aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKG9mZnNl
dC5pc1plcm8oKSAmJiAhYmx1cikgeworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29s
b3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIAogICAgIC8vIEZJWE1FOiB3
ZSBjb3VsZCBhdm9pZCB0aGUgc2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBrbm93IHdlJ2xsIHJl
bmRlciB0aGUgc2hhZG93IG91cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9mZnNldCA9IG9mZnNl
dC53aWR0aCgpOwogICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBD
R0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KSB7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9C
YXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAq
IHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAg
LTExNTYsNyArMTA1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRv
dyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgLy8gRXh0cmVt
ZSAiYmx1ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5
IGxvbmcgdGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRp
dXMsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93
T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBh
cHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZz
ZXQsIHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRo
aXMgbWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAv
LyBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29s
b3IuCkBAIC0xMTY2LDUwICsxMDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAg
ICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZz
ZXQsIHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7Ci19Cisg
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNl
dExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikp
OwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBw
YXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xv
cikpOwogCi0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGlt
aXQpOwotfQorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmls
bENvbG9yKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2Up
KQorICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CiAKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpC
bGVuZE1vZGVDaGFuZ2UgfSkpCisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0
LCBzZWxlY3RDR0JsZW5kTW9kZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRN
b2RlKSk7CiAKLSAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOwor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdN
b2RlQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQs
IGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOworCisgICAgaWYgKGZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2Up
KQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91
bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisKKyAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0
eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNoYWRv
d09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZs
b2F0IGxpbWl0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7
Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0
LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBDR0NvbnRleHRDbGVh
clJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNo
IChjYXApIHsKICAgICBjYXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAo
cGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIsMTYgKzExODIsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKICAgICB9CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAg
IGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVz
LnNpemUoKTsgKytpKQpAQCAtMTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
ICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwg
ZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0
TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGpv
aW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4o
cGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMzNSw5NCArMTIwOSw0
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAg
ICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogICAgIG1f
ZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAgICAgbV9kYXRhLT5y
b3RhdGUoYW5nbGUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRv
QmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgs
IHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsK
ICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAg
bV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCks
IHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAot
QWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2Fs
ZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6
OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsK
LQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRl
U2NhbGUpOwotCiAgICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2Fs
ZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBjb250ZW50IGlzIG5v
bi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBs
b3dlcgogICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1
ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1NSw4IEBAIEFmZmlu
ZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5j
bHVkZVNjYWxlKSBjb25zdAogICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250
ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Ci0KICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxz
IGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5l
IHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252
ZXJzaW9uIGlmIHdlIGhhdmUgYQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxpa2UgdGhlIGhhbmRz
IG9mIHRoZSB3b3JsZCBjbG9jayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUgc2NhbGUsIHNvCkBA
IC0xNDgyLDI3ICsxMjk5LDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJu
IEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmln
aW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5
bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBw
ZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNG
b3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ry
b2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChw
b2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9y
KCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFs
aWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lkdGhzLmxhc3Qo
KSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTE1NTYsMTYg
KzEzNTcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBzZXRDR0ZpbGxDb2xv
cihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYg
bGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdU
RkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBj
b21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8v
IEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFpblB0cjxDRlVSTFJl
Zj4gdXJsUmVmID0gbGluay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJsUmVmKQogICAgICAg
ICByZXR1cm47CkBAIC0xNTc5LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQog
ICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgpLCBDR1Jl
Y3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRp
bmdEaXNhYmxlZCgpKTsKLQotICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSA9IGtD
R0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBv
bGF0aW9uRGVmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVh
bGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRp
b25Ob25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpM
b3c6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxp
dHkgPSBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xh
dGlvbkhpZ2g7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNv
bnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAgICBBU1NFUlQobV9k
YXRhKTsKICAgICBpZiAoaXNMYXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSArMTM4MiwyOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250
ZXh0KQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xheWVyQ0dDb250ZXh0
OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citi
b29sIEdyYXBoaWNzQ29udGV4dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9kYXRhICYmIChtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNMYXllckNHQ29udGV4
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChi
b29sIGlzQWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0Eg
Q29udGV4dC4KLSAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2NlbGVyYXRlZCkKICAg
ICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0Owog
ICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNBY2NlbGVyYXRl
ZENHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yZW5k
ZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0KLSAgICByZXR1cm4g
bV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2lu
Z01vZGVGbGFncyBtb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAotICAgIGJvb2wgZmls
bCA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAgICBib29sIHN0cm9r
ZSA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwotICAgIGlmIChmaWxs
ICYmIHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQs
IGtDR1RleHRGaWxsU3Ryb2tlKTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAgICAgICBDR0NvbnRl
eHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwotICAgIGVsc2UgaWYg
KHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtD
R1RleHRTdHJva2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQotICAgIHNldENHU3Ryb2tlQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNvbG9yKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRo
aWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0
TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25lc3MsIDAuZikpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxD
b2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9y
bUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBsYXRmb3JtQ29udGV4
dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBo
YShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250
ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVuZGVyaW5nTW9kZSBH
cmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZvcm1Db250ZXh0KCks
IHNlbGVjdENHQmxlbmRNb2RlKGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpKTsKKyAgICBy
ZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQgPyBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBs
eURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFj
dG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRo
ZSBiYXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFw
cGxpZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RN
IHdpbGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKQEAg
LTE3NDcsMTMgKzE0MTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAgIENHQ29udGV4dFNl
dEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250
ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZp
Y2VTY2FsZUZhY3RvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3Vw
cG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0
YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpA
QCAtMTc2NCwxMyArMTQyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRleHRGaWxsRWxsaXBz
ZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBz
ZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAgICAgc3Ryb2tlRWxs
aXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
CiAgICAgQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Citi
b29sIEdyYXBoaWNzQ29udGV4dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRp
b25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKICAgICBGbG9hdFJlY3QgcmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwxNSArMTQ1MSw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRS
ZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBD
R1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9z
aXRpb24sIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZDb250ZXh0QWRkRGVz
dGluYXRpb25BdFBvaW50KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJh
bnNmb3JtZWRQb2ludCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2ZTJmMzg2OWUxZTdl
MWY5ZTY2MjZiZWMyMDViYjBkYzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5MzYyMmNmZDFjMmVj
NGYyODllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBo
aWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3Jh
cGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBH
cmFwaGljc0NvbnRleHRDRyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBU
byBiZSByZW1vdmVkLgorI2VuZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0Q0coKTsKKworICAg
IGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250ZXh0UmVmIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAg
dm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBhcHBseVN0cm9r
ZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFs
OworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZv
aWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZv
aWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOworCisgICAgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworCisgICAgdm9pZCBz
ZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0
aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOwor
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHZvaWQgc2NhbGUoY29u
c3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlh
bnMpIGZpbmFsOworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOwor
CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAg
dm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOwor
CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNlbmRp
ZgorCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZp
bmFsOworCisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9u
QXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKwor
ICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
IGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Cit9OworCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCBkZDM0MWIxNDIxNmMyZTJjOWQ0NmQyYWIwNWI5
YWE1MmQ3ZDk3NGQyLi5iY2JmY2UwOTMyODFiNjMyZGJjOThiM2UyNjEyMTdlZjczZTFkMWQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KGNnQ29udGV4dC5nZXQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHRDRz4oY2dDb250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIGRhdGEsIG51
bUJ5dGVzLCBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewogICAgICAgICBm
YXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJiNGMxMmYwZTgyM2Ew
ODhkMjVmYzE1YWE4ODlhNDI3Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4Mjg0ZWQ1ZDFhOGFi
MWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRo
Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5j
cHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
PHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KQEAgLTI0NCw3ICsyNDQsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIENHQ29u
dGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBs
YXRmb3JtUGF0aCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwog
ICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgYm9vbCBoaXRT
dWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1Bh
dGhTdHJva2UpOwpAQCAtMzA1LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3Vu
ZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAg
ICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7CiAKICAgICBpZiAo
c3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0
dGVybkNHLmNwcAppbmRleCA3NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVkZmRhYjIzZGY4MTM0
Li4wNWEzOTE2NTQwYmI3NmRhM2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTMwLDcg
KzMwLDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBA
IC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5k
VG9EZXZpY2VQaXhlbHMoCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHRDRyhjb250
ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3QoMCwgMCwgQ0dJbWFn
ZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2Up
KSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2Up
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAwNjdmY2JhMTkzOWZh
ZTUxZWRjODc5MmQ0Yy4uZTFlNWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQyMmZiNTgxY2Y3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1wb3J0ICJjb25maWcu
aCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29j
b2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0Nv
bnRleHRDb2NvYS5tbQppbmRleCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4OTY4ODEzYTMwNTQz
ZjdkLi4zODhhZmNkNmY0NmFmYzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3RhdGljIHZvaWQgZHJh
d0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3Vz
UmluZ1BhdGgKICAgICBkcmF3Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNO
dWxsKCkpCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGRyYXdGb2N1c1Jp
bmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIGNvbG9y
KTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJhd0ZvY3VzUmluZ1Rv
Q29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1Bh
dGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgYm9vbCBk
cmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhS
ZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgVU5V
U0VEX1BBUkFNKHRpbWVPZmZzZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsK
ICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgpOwogICAgIHJldHVy
biBkcmF3Rm9jdXNSaW5nQXRUaW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6bWF4KCksIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJh
dywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
cGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgLy8gRklY
TUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisgICAgaWYgKHBhdGgu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3ID0gZHJhd0ZvY3Vz
UmluZ1RvQ29udGV4dEF0VGltZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgo
KSwgdGltZU9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIC8vIEZJWE1FOiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5n
LgotICAgICAgICByZXR1cm47Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gZm9j
dXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQ
YXRoLmdldCgpLCAwLCBDR1JlY3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGRvdWJsZSB0aW1lTwogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0cjxDR011dGFibGVQ
YXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwog
ICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3Vz
UmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsK
QEAgLTE5OSwxMSArMTc2LDggQEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JGb3JNYXJrZXJMaW5l
U3R5bGUoRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIKICAgICB9CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2FudCB0byBmaW5kIHRo
ZSBudW1iZXIgb2YgZnVsbCBkb3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBlcXVhdGlvbnM6CiAg
ICAgLy8gZG90RGlhbWV0ZXIgPSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRlciAvIGRvdEdhcCA9
IDEzLjI0NyAvIDkuNDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYmUzNDMwNGIyZDEwNzM1NjMxYWI4ZmE5Mzk3Nzg0
ZmYwZGNlNTY0Yy4uMmFiY2M2ZjQwNDYxZmUxZWJhYzk2MjAyZTg1YWM1YTRiZWVjZWVmOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5tbQpAQCAtMzY5LDcgKzM2OSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9TdXJmYWNlOjplbnN1
cmVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dCkKICAgICAgICAg
cmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBt
X2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q0c+KGVuc3VyZVBs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQodHJ1ZSk7CiAKICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAy
MGRhZWY0YmI0MWY1MDY0ZjNjMWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li4zZTU1MWI4NTc2NjY3NDQ4
NTU4NTllYzk4YjFlY2EwNjM1OWMyOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0
RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBVU0UoQ09SRV9URVhU
KQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAgLTY4LDcgKzY5LDkg
QEAgcHVibGljOgogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25z
dHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsgfQog
CiBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsK
KyNpZiBVU0UoQ09SRV9URVhUKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOworI2VuZGlmCiAKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwogICAgIHZvaWQgcG9wdWxhdGVJbnRl
cm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKQEAgLTkxLDcgKzk0LDEx
IEBAIHByaXZhdGU6CiAKICAgICBSZWNvcmRlciYgbV9vd25lcjsKICAgICBEcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb24gbV9kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb247Ci0gICAgR3JhcGhpY3NDb250
ZXh0IG1faW50ZXJuYWxDb250ZXh0OworCisjaWYgVVNFKENPUkVfVEVYVCkKKyAgICBVbmlxdWVS
ZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNlbmRpZgorCiAgICAgY29u
c3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGluZ01v
ZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4
dC5jcHAKaW5kZXggYzA0ODY1MmY5YjBlNjVhYjVjMmM5Y2U1OThiNTI3NzAyYzhhYTMzZC4uY2Fj
Zjc2NGY1ZGUyYzhjZjZkM2Y0MDAwMmZlYWY1ZTEyMTY5MWM4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0
LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKIAogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2Uo
Q0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YQog
ICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCBEcmF3R2x5
cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCitVbmlxdWVSZWY8R3JhcGhpY3ND
b250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiB7CiAg
ICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRl
KHRoaXMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0
ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRl
Q2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CkBAIC04NCw3ICs4NSw3IEBAIEdyYXBoaWNzQ29udGV4
dCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiAgICAgQ0dDb250
ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBo
cywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OmRyYXdHbHlwaHMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxi
YWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3SW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8
Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmRyYXdJbWFnZSkpOwogICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dDb250ZXh0Q3JlYXRlV2l0aERlbGVnYXRlKGNvbnRleHREZWxlZ2F0ZS5n
ZXQoKSwga0NHQ29udGV4dFR5cGVVbmtub3duLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1
ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAKIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lciwgRHJhd0dseXBoc0Rl
Y29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTExOSwzNCArMTIwLDMx
IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRlCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9w
dWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRT
dGF0ZSkKIHsKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlk
KCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxD
b2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlmIChtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4
dC5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAg
IG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRy
YW5zZm9ybSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5w
YXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVy
bik7CiAgICAgfQogCiAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5p
c1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOwogICAg
IGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAgICAgICAg
bV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJv
a2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0pOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGll
bnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRl
LnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgICAgICBp
ZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2lu
dGVybmFsQ29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUucGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0
dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgIH0KIAotICAg
IG1faW50ZXJuYWxDb250ZXh0LnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKKyAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwogCi0gICAgbV9pbnRl
cm5hbENvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBpZiAoY29udGV4dFN0YXRlLnNoYWRvd3NVc2VM
ZWdhY3lSYWRpdXMpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldExlZ2FjeVNoYWRvdyht
X29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVy
LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW50
ZXJuYWxDb250ZXh0LnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9v
cmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsK
KyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2ludGVybmFsQ29udGV4
dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3Rh
dGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0
ZS5zaGFkb3dSYWRpdXNNb2RlKTsKIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFRleHREcmF3
aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKyAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwog
fQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25z
dCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtMzAyLDcg
KzMwMCw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIHJldHVybjsKIAogI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0
UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIGF1dG8g
dGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7CiAgICAg
QVNTRVJUKCF0ZXh0UG9zaXRpb24ueSk7CiAjZW5kaWYKQEAgLTMyMSw3ICszMTksNyBAQCB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVm
LCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgIC8vIElmIHlvdSBzZXQgdGhlc2UgdHdvIGVxdWFsIHRv
IGVhY2ggb3RoZXIsIGFuZCBzb2x2ZSBmb3IgWCwgeW91IGdldAogICAgIC8vIENUTSAqIGN1cnJl
bnRUZXh0TWF0cml4ID0gQ1RNICogWCAqIG1fb3JpZ2luYWxUZXh0TWF0cml4CiAgICAgLy8gY3Vy
cmVudFRleHRNYXRyaXggKiBpbnZlcnNlKG1fb3JpZ2luYWxUZXh0TWF0cml4KSA9IFgKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4
KG1faW50ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gY3VycmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJuYWxD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bUZpeHVw
OwogICAgIGlmIChhdXRvIGludmVydGVkT3JpZ2luYWxUZXh0TWF0cml4ID0gbV9vcmlnaW5hbFRl
eHRNYXRyaXguaW52ZXJzZSgpKQogICAgICAgICBjdG1GaXh1cCA9IGN1cnJlbnRUZXh0TWF0cml4
ICogaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXgudmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCA1NGQ4NTQ3MTIzZjg5NDdk
NmYyZmFjZDdmY2E2Zjk5NTE4MWEyNjcxLi4zOTU3YzQ1NzZmZTkxMmQ2ODEwMjA3NjEwMDFjYzI0
ZjY4Njg4NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuY3BwCkBAIC0zNCw5ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0s
IFJlY29yZGVyOjpEZWxlZ2F0ZSogZGVsZWdhdGUpCi0gICAgOiBtX2NvbnRleHQoWyZdKEdyYXBo
aWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNz
Q29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwg
ZGVsZWdhdGUpOwotICAgIH0pCisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhp
Y3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RN
LCBkZWxlZ2F0ZSkKIHsKIH0KIApAQCAtNDYsMTMgKzQ0LDYgQEAgdm9pZCBEcmF3aW5nQ29udGV4
dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKICAgICBtX3JlcGxheWVkRGlzcGxheUxpc3QucmVzZXQoKTsKIH0KIAotUmVjb3JkZXImIERy
YXdpbmdDb250ZXh0OjpyZWNvcmRlcigpCi17Ci0gICAgYXV0byogZ3JhcGhpY3NDb250ZXh0SW1w
bCA9IGNvbnRleHQoKS5pbXBsKCk7Ci0gICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dEltcGwpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWNvcmRlciY+KCpncmFwaGljc0NvbnRleHRJbXBsKTsK
LX0KLQogdm9pZCBEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCkKIHsKICAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAppbmRleCBkMzdj
MDczNWJlYjU1NDkyZDkwZmY5ZWNlNGNhNGRiNzk5NWQ1ZjU4Li5kOTVkZGRlZjg1NzUyOGM4Mjc5
ZTRmMWVmYmYyZDI1ODhmNmNhNGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKQEAgLTM5LDggKzM5LDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQg
ewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsg
fSwgUmVjb3JkZXI6OkRlbGVnYXRlKiA9IG51bGxwdHIpOwogCisgICAgLy8gRklYTUU6IERlZHVw
bGljYXRlIHRoZXNlLgogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9Ci0gICAg
V0VCQ09SRV9FWFBPUlQgUmVjb3JkZXImIHJlY29yZGVyKCk7CisgICAgUmVjb3JkZXImIHJlY29y
ZGVyKCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OwogICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5
TGlzdCgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAg
IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAg
ICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0OyB9CkBAIC01MCw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBSZWNvcmRlciBtX2NvbnRleHQ7CiAg
ICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1v
cnlEaXNwbGF5TGlzdD4gbV9yZXBsYXllZERpc3BsYXlMaXN0OwogICAgIGJvb2wgbV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5jcHAKaW5kZXggMWE0ZWE2ZGUzYjVhOGNlMzVkOGU3NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIy
MmUyMTgzYTM5MTAzYmQ2OTg1MzQ0NjRkZjNjYjBhOGZmOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNjA1LDExICs2MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAK
IHZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsK
LSNpZiBVU0UoQ0cpCiAgICAgY29udGV4dC5kcmF3UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5oCmluZGV4IGExZDU3YTA2ODVmMDMzOGY3ZGRhZjI2ZTA4YTIyMmVhMzA2
NGE3MDEuLmRjNmYwYzk2MGFjY2UzMzY4NDMzNWQ1ZjUzMmQwMDJiZmE5NzU5NzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjc5LDEwICsyNzksNiBAQCBwdWJsaWM6CiAg
ICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsg
fQogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBmaWxsUGF0dGVybkltYWdlSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsg
fQogCi0gICAgc3RhdGljIHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpOwotCi0gICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJl
YW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKTsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
T3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTMzNSw5ICszMzEsNyBA
QCB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICAgICAg
ZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c2hhZG93Qmx1cjsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBV
U0UoQ0cpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsK
LSNlbmRpZiAvLyBVU0UoQ0cpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVz
TW9kZTsKICAgICB9CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC00NjMsMTQgKzQ1NywxMiBAQCBP
cHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiAg
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAK
LSNpZiBVU0UoQ0cpCi0gICAgICAgIE9wdGlvbmFsPGJvb2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRp
dXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAg
aWYgKCFzaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAgICAgICBPcHRpb25hbDxTaGFkb3dSYWRp
dXNNb2RlPiBzaGFkb3dSYWRpdXNNb2RlOworICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1
c01vZGU7CisgICAgICAgIGlmICghc2hhZG93UmFkaXVzTW9kZSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNl
TGVnYWN5UmFkaXVzID0gKnNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENH
KQorICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3Zl
KCpzaGFkb3dSYWRpdXNNb2RlKTsKICAgICB9CiAKICAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hh
bmdlKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDlk
YjVhNWE4MTAxYTk5ZGQ1ZGM2YWZjMDIwZTNmNTZiZGNlZmYzYzkuLmMxZWFjNTM5NWFiYzgxYzI3
Yjk5Zjk2ZTVlYTMyNWFkYTU1NDgxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAKQEAgLTMzLDE1ICszMywxNSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0g
ICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KGRp
c3BsYXlMaXN0KQorUmVjb3JkZXI6OlJlY29yZGVyKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxl
Z2F0ZSwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0ds
eXBoc0RlY29uc3RydWN0aW9uKQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKICAg
ICAsIG1fZGVsZWdhdGUoZGVsZWdhdGUpCiAgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQogICAgICwg
bV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAg
LTUwLDkgKzUwLDggQEAgUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmEKICAgICBtX3N0YXRlU3RhY2su
YXBwZW5kKHsgc3RhdGUsIGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOwogfQogCi1SZWNvcmRl
cjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlh
bENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IEdyYXBoaWNz
Q29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxh
eUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVu
dC5tX2Rpc3BsYXlMaXN0KQogICAgICwgbV9kZWxlZ2F0ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAg
ICAsIG1faXNOZXN0ZWQodHJ1ZSkKICAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBw
YXJlbnQubV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKCkpCkBA
IC0xNjYsMTEgKzE2NSw2IEBAIFJlbmRlcmluZ01vZGUgUmVjb3JkZXI6OnJlbmRlcmluZ01vZGUo
KSBjb25zdAogICAgIHJldHVybiBtX2RlbGVnYXRlID8gbV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9k
ZSgpIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6
Y2xlYXJTaGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQogdm9pZCBS
ZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgYXBwZW5kPFNldExp
bmVDYXA+KGxpbmVDYXApOwpAQCAtMjA2LDYgKzIwMCwxMSBAQCB2b2lkIFJlY29yZGVyOjphcHBl
bmREcmF3R2x5cGhzSXRlbVdpdGhDYWNoZWRGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQgogCiB2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAg
IC8vIEZJWE1FOiBUaGlzIGZlZWxzIG9kZCwgYnV0IGlzIHdoYXQgdXNlZCB0byBoYXBwZW4uCisg
ICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9kaXNwbGF5TGlzdC5j
YWNoZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyKTsKICAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVy
PihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOwogfQpAQCAtMjcwLDcgKzI2OSw3IEBAIHZvaWQgUmVjb3JkZXI6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBhcHBlbmQ8U2V0Q1RN
Pih0cmFuc2Zvcm0pOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBSZWNvcmRl
cjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAogewog
ICAgIC8vIEZJWE1FOiBSZXNwZWN0IHRoZSBnaXZlbiB2YWx1ZSBvZiBJbmNsdWRlRGV2aWNlU2Nh
bGUuCiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKQEAgLTI5OCw4ICsyOTcsOSBAQCB2
b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKICAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsK
IH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQog
eworICAgIC8vIEZJWE1FOiBXaHkgaXMgc3Ryb2tlU3R5bGUgbm90IHVzZWQ/CiAgICAgYXBwZW5k
PERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIApAQCAtMzI4LDYgKzMy
OCwxOCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdS
ZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1B
QykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9v
bCYsIGNvbnN0IENvbG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBi
b29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYK
Kwogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAg
IGFwcGVuZDxGaWxsUmVjdD4ocmVjdCk7CkBAIC00NDAsMTAgKzQ1Miw5IEBAIHZvaWQgUmVjb3Jk
ZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFw
cGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IFJlY29yZGVyOjpj
bGlwQm91bmRzKCkKK0ludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAg
IFdURkxvZ0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQg
d2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIEludFJlY3QoLTIwNDgs
IC0yMDQ4LCA0MDk2LCA0MDk2KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50
U3RhdGUoKS5jbGlwQm91bmRzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpA
QCAtNDUyLDM1ICs0NjMsMzQgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QKICAgICBhcHBlbmQ8
Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
cigpLCBkZXN0UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29s
b3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rp
b24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBSZWNvcmRl
cjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikKIHsKLSAgICBHcmFwaGljc0NvbnRleHQgbmVzdGVk
Q29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSB7Ci0gICAgICAgIGF1dG8gaW5p
dGlhbENsaXAgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0aW5hdGlvbi5zaXplKCkpOwor
ICAgIGF1dG8gaW5pdGlhbENsaXAgPSBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBkZXN0aW5hdGlv
bi5zaXplKCkpOwogCi0gICAgICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRjaGVzIEltYWdlQnVm
ZmVyJ3MgaW5pdGlhbCBDVE0uCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBn
ZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKLSAg
ICAgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKHRyYW5zZm9ybS54U2NhbGUoKSwgdHJhbnNmb3Jt
LnlTY2FsZSgpKTsKLSAgICAgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRl
c3RpbmF0aW9uLnNpemUoKSAqIHNjYWxlRmFjdG9yKTsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGluaXRpYWxDVE07Ci0gICAgICAgIGluaXRpYWxDVE0uc2NhbGUoMSwgLTEpOwotICAgICAgICBp
bml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2NhbGVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGlu
aXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CisgICAgLy8g
VGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1hZ2VCdWZmZXIncyBpbml0aWFsIENUTS4KKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5p
dGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CisgICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKHRyYW5z
Zm9ybS54U2NhbGUoKSwgdHJhbnNmb3JtLnlTY2FsZSgpKTsKKyAgICBhdXRvIHNjYWxlZFNpemUg
PSBleHBhbmRlZEludFNpemUoZGVzdGluYXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOworICAg
IEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOworICAgIGluaXRpYWxDVE0uc2NhbGUoMSwgLTEp
OworICAgIGluaXRpYWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKKyAg
ICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5hdGlvbi5zaXplKCkpOwogCi0g
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVjb3JkZXI+KG5ldyBSZWNvcmRlcigqdGhp
cywgY29udGV4dCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRpYWxD
VE0pKTsKLSAgICB9KTsKKyAgICBSZWNvcmRlciBuZXN0ZWRDb250ZXh0KCp0aGlzLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSk7CiAgICAgYXBwZW5kPEJl
Z2luQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbiwgY29sb3JTcGFjZSk7CiAgICAg
ZHJhd2luZ0Z1bmN0aW9uKG5lc3RlZENvbnRleHQpOwogICAgIGFwcGVuZDxFbmRDbGlwVG9EcmF3
aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uKTsKLX0KIAotI2lmIEVOQUJMRShWSURFTykKLWJvb2wg
UmVjb3JkZXI6OmNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYgcGxheWVy
KSBjb25zdAotewotICAgIHJldHVybiAhIXBsYXllci5pZGVudGlmaWVyKCk7CisgICAgcmV0dXJu
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3VjY2VzczsKIH0KIAorI2lmIEVOQUJMRShW
SURFTykKIHZvaWQgUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxh
eWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogeworICAgIGlmICghcGxheWVyLmlk
ZW50aWZpZXIoKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBBU1NF
UlQocGxheWVyLmlkZW50aWZpZXIoKSk7CiAgICAgYXBwZW5kPFBhaW50RnJhbWVGb3JNZWRpYT4o
cGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CkBAIC01MTcsNyArNTI3LDcgQEAgRmxvYXRSZWN0IFJl
Y29yZGVyOjpleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBjb25z
dAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQ7CiAgICAgZmxvYXQgc2hhZG93UmFkaXVzOwog
ICAgIENvbG9yIHNoYWRvd0NvbG9yOwotICAgIGlmIChncmFwaGljc0NvbnRleHQoKS5nZXRTaGFk
b3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgeworICAgIGlmIChn
ZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKSkgewogICAg
ICAgICBGbG9hdFJlY3Qgc2hhZG93RXh0ZW50ID0gYm91bmRzOwogICAgICAgICBzaGFkb3dFeHRl
bnQubW92ZShzaGFkb3dPZmZzZXQpOwogICAgICAgICBzaGFkb3dFeHRlbnQuaW5mbGF0ZShzaGFk
b3dQYWludGluZ0V4dGVudChzaGFkb3dSYWRpdXMpKTsKQEAgLTU0NSwxMSArNTU1LDYgQEAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBSZWNvcmRlcjo6Y3RtKCkgY29uc3QKICAgICByZXR1cm4gY3Vy
cmVudFN0YXRlKCkuY3RtOwogfQogCi1jb25zdCBGbG9hdFJlY3QmIFJlY29yZGVyOjpjbGlwQm91
bmRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY2xpcEJvdW5kczsKLX0K
LQogdm9pZCBSZWNvcmRlcjo6Q29udGV4dFN0YXRlOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkKIHsKICAgICBjdG0udHJhbnNsYXRlKHgsIHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dFJlY29yZGVyLmgKaW5kZXggNzYzMzlhYmU4YTYwODA0YmM3MmNjMDkxZmY0ZDIxYWYxNGNhZTA1
NC4uMDg1MmU5MWMzNjU2ZjUyNjRmMjM2ZTUwYWRiMmQxNGRmZTI2YmRmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAi
RGlzcGxheUxpc3QuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5o
IgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0SXRlbXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2Uu
aCIgLy8gRm9yIEltYWdlOjpUaWxlUnVsZS4KICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTUwLDEyICs1MCwxMiBAQCBzdHJ1Y3QgSW1hZ2VQ
YWludGluZ09wdGlvbnM7CiAKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLWNsYXNzIFJlY29y
ZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgUmVjb3JkZXIgOiBwdWJs
aWMgR3JhcGhpY3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShSZWNvcmRlcik7CiBwdWJsaWM6CiAgICAgY2xhc3MgRGVsZWdh
dGU7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxh
eUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERy
YXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1Jl
Y29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlcihEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVj
b25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
bjo6RGVjb25zdHJ1Y3QpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgflJlY29yZGVyKCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFBpeGVsQnVmZmVyKGNvbnN0IFBpeGVsQnVm
ZmVyRm9ybWF0JiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QpOwpAQCAt
NzcsMTUgKzc3LDI0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRHJh
d0dseXBoc1JlY29yZGVyOwotICAgIFJlY29yZGVyKFJlY29yZGVyJiBwYXJlbnQsIEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBp
bml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKTsKKyAgICBSZWNv
cmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0
IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENU
TSk7CiAKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5EcmF3SW1hZ2VCdWZmZXIoY29uc3QgSW1hZ2VCdWZm
ZXImKSBjb25zdCBvdmVycmlkZTsKKyAgICAvLyBGSVhNRTogTWF5YmUgcmVtb3ZlIHRoaXM/Cisg
ICAgYm9vbCBjYW5EcmF3SW1hZ2VCdWZmZXIoY29uc3QgSW1hZ2VCdWZmZXImKSBjb25zdDsKICAg
ICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IG92ZXJyaWRlOwogCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9p
ZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgaXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBvdmVycmlkZSB7IH0KKyNlbmRpZgorCisgICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICB2b2lkIGRyYXdM
aW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sLCBib29sLCBTdHJva2VTdHlsZSkgb3Zl
cnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgdm9pZCB1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7CiAK
ICAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSBvdmVycmlkZTsKQEAgLTEw
NSw3ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKIAotI2lmIFVTRShDRykKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKICAg
ICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIG92ZXJyaWRlOwogICAgIHZvaWQgYXBwbHlGaWxs
UGF0dGVybigpIG92ZXJyaWRlOwogI2VuZGlmCkBAIC0xMjAsMTQgKzEyOSwyMCBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlj
a25lc3MpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMpIG92ZXJyaWRlOworICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKwogICAgIHZvaWQgZHJh
d1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUg
dGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRp
bWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOworI2Vu
ZGlmCisKICAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKICAgICB2b2lkIHJlc3RvcmUoKSBvdmVy
cmlkZTsKIApAQCAtMTM2LDcgKzE1MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBvdmVycmlkZTsKICAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBvdmVycmlk
ZTsKICAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7CkBAIC0xNDUsMTIg
KzE2MCwxMiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwogICAgIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0
IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBv
dmVycmlkZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNl
LCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25D
b2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsK
KwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wg
Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7
CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJp
ZGU7CkBAIC0xNzMsNyArMTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgIGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4u
KTsKLSAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNz
Q29udGV4dCgpKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRz
KCp0aGlzKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0
ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAo
YXV0byByZWN0ID0gaXRlbS5nbG9iYWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3Bs
YXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRS
ZWN0JikgY29uc3Q7CiAgICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25z
dDsKLSAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVj
dCBDb250ZXh0U3RhdGUgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNh
NjcwZjkyODZkMjVhMTk1MTkyMWI4NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRk
NDI0NzAxZjMzZDJmYjIwMzFmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvQ29sb3JNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBL
SVQpCiAKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+
CiAjaW1wb3J0IDx3dGYvTG9jay5oPgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8
U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9y
KQogICAgICAgICBSZXRhaW5QdHI8TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRv
cHROUyhbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpu
aWwgcGl4ZWxzV2lkZToxIHBpeGVsc0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4
IHNhbXBsZXNQZXJQaXhlbDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFt
ZTpOU0RldmljZVJHQkNvbG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsK
IAotICAgICAgICBHcmFwaGljc0NvbnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0u
Q0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVl
blJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250
ZXh0IGxvY2FsQ29udGV4dChiaXRtYXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3
YXRjaEluUmVjdDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIz
ODk2YWU1ZDliM2NhNGQxY2UwZmViOWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgw
ZDYwM2M1NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkxheWVyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIldlYkxheWVyLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9y
dCAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4K
QEAgLTUxLDcgKzUxLDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAogewogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRm
b3JtQ0FMYXllckZvckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIp
IHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0
TGlzdCByZWN0c1RvUGFpbnQgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0
c1RvUGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllcjo6ZHJhd0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXll
ci5nZXQoKSwgcmVjdHNUb1BhaW50LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29y
ZTo6R3JhcGhpY3NMYXllclBhaW50U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXll
clBhaW50Tm9ybWFsKTsKICAgICB9CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5D
b250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxh
eWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXll
ci0+b3duZXIoKSkgewotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFw
aGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5
ZXJDb250ZXh0KHRydWUpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQobGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCAzODVk
ZjYxNjgyNzZhYmZmZjU3ZjcxNTQ4MzQ3ZDljMGIxOWY3MjQ1Li4wMjQyOGNjMjM5ODQ0OThkMjE3
NzJiMmQ3YmE5MTAzYTU3ODYwMmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNy
ZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRp
b25EYXRhPD4sIFQ+Ojp2YQogICAgIHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBQYWludGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhp
Y3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkK
K0NhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdP
cGVyYXRpb25zJiBjb21tYW5kTGlzdCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3Qp
CiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmlu
aXRlUmVjdCgpIH0pOwogfQpAQCAtMTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcAogICAgIH0KIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRv
dygpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5l
Q2FwIGxpbmVDYXApCiB7CiAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09w
ZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJl
Y3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IEdyYWRpZW50JiBncmFkaWVudCkKQEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRl
cm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2
LDcgKzMxMSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVj
dD4ocmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSksIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3
ICszNDEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5k
ZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVu
ZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShj
b2xvcik7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91
bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKQEAgLTM4Niw3ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0
aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
CiB9CiAKQEAgLTQwOCw3ICs0MDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNl
PihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpKTsKIH0KIApAQCAtNDI4LDcgKzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0
Myw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2
NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6
U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBA
IC01MjMsNyArNTE4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAg
IH0KIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJh
d0dseXBocz4oQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAg
IFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZv
bnQoKSksCkBAIC01NTMsNyArNTQ4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9
OwogCiAgICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBs
YXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9w
dGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZs
b2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlj
a25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yKSk7CiB9CiAKQEAgLTYxMywxMSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRB
bnRpYWxpYXMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAg
c3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4g
ewogICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMz
LDcgKzYyOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGlu
ZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRl
cmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
KSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0
aCYpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7CiAgICAgc3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJh
dGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgp
OwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBA
IC0xMDMyLDcgKzEwMjMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVj
dCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBt
X3N0YXRlU3RhY2subGFzdCgpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0
bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQ
YWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RG
TW92ZShjb21tYW5kKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwg
RnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKK0dyYXBoaWNzQ29udGV4dDo6Q2xp
cFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1
bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBp
bXBsZW1lbnRlZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNj
ZXNzOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQordm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
IHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKICAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlh
KHBsYXllciwgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCA2NTg5M2IwYjJiYzA2
YmJiNTBkNWMwNGFkN2I5NzZiOGJmZDZmMGJjLi4wMzIzOWM2Y2NhODJiZGY0ZDE3YzliYjdlNzdh
ODViOTRjMWZmMDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5oCkBAIC0yOCwyMSArMjgsMjAgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uLmgiCiAKIG5hbWVzcGFj
ZSBOaWNvc2lhIHsKIAotY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoK
LSAgICBDYWlyb09wZXJhdGlvblJlY29yZGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFBh
aW50aW5nT3BlcmF0aW9ucyYpOworICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdP
cGVyYXRpb25zJik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9
CiAKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92
ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0
TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNo
KGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKQEAgLTUzLDYgKzUy
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJs
ZW5kTW9kZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0
IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKQEAgLTcwLDEwICs3MCw5IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdl
YkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xp
bmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHls
ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRl
OwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBj
b25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwpAQCAtODYsNyArODUsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3Zl
cnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBv
dmVycmlkZTsKQEAgLTk1LDEyICs5NCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChj
b25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29u
c3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2Vi
Q29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNv
cmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgV2ViQ29yZTo6
RGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYpPiYmKSBvdmVycmlkZTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZy
YW1lRm9yTWVkaWEoV2ViQ29yZTo6TWVkaWFQbGF5ZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRp
YShjb25zdCBXZWJDb3JlOjpNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
b3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRl
eHRDYWlyby5jcHAKaW5kZXggMDAxMTAwZjc3NzgxZTRjZjViOGMxZDg3YTJjNmMzN2NjZThhYWY1
NC4uNDlhYmNhYTQ1MjUzMTQ1Mzg0YjM1NTg4NDY4NjdlMGNmYmQwNmFkMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFp
bnRpbmdDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcApAQCAtMzIs
NyArMzIsNyBAQAogI2lmIFVTRShDQUlSTykKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiTmljb3NpYUJ1ZmZlci5oIgogI2luY2x1ZGUg
Ik5pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgiCiAjaW5jbHVkZSAiTmljb3NpYVBhaW50
aW5nT3BlcmF0aW9uUmVwbGF5Q2Fpcm8uaCIKQEAgLTcxLDcgKzcxLDcgQEAgUGFpbnRpbmdDb250
ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpGb3JQYWludGluZyhCdWZmZXImIGJ1ZmZlcikKIAogICAg
IG1fY2Fpcm8uY29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NhaXJvLnN1cmZhY2Uu
Z2V0KCkpKTsKICAgICBtX3BsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0Q2Fpcm8+KG1fY2Fpcm8uY29udGV4dC5nZXQoKSk7Ci0gICAgbV9ncmFwaGlj
c0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4oV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KCptX3BsYXRmb3JtQ29udGV4
dCkpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybz4oKm1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAogUGFpbnRpbmdDb250ZXh0
Q2Fpcm86OkZvclBhaW50aW5nOjp+Rm9yUGFpbnRpbmcoKQpAQCAtMTA0LDExICsxMDQsNyBAQCB2
b2lkIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6cmVwbGF5KGNvbnN0IFBhaW50
aW5nT3BlcmF0aW9ucyYgcGFpbnRpbgogCiBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUmVjb3Jk
aW5nOjpGb3JSZWNvcmRpbmcoUGFpbnRpbmdPcGVyYXRpb25zJiBwYWludGluZ09wZXJhdGlvbnMp
CiB7Ci0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dD4oCi0gICAgICAgIFsmcGFpbnRpbmdPcGVyYXRpb25zXShXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENhaXJvT3BlcmF0aW9uUmVjb3JkZXI+KGNvbnRleHQsIHBhaW50aW5nT3BlcmF0aW9ucyk7
Ci0gICAgICAgIH0pOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxDYWlyb09w
ZXJhdGlvblJlY29yZGVyPihwYWludGluZ09wZXJhdGlvbnMpOwogfQogCiBQYWludGluZ0NvbnRl
eHRDYWlybzo6Rm9yUmVjb3JkaW5nOjp+Rm9yUmVjb3JkaW5nKCkgPSBkZWZhdWx0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAKaW5kZXggODMwYWVkMDgyMmY1NzVkNTJjOGJkYmQxY2UyODJiOGVi
YTdkNTBiYi4uMGY5ZDg3MjllNzFkZDQyZTgwZTU5ZWViMzhiYTgxYzA0YmVjZjNmYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q0dXaW4uY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAjaWYgVVNFKENHKQogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1w
bC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCkBAIC02NywzMiAr
NjcsMTkgQEAgc3RhdGljIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IENHQ29udGV4dFdpdGhIREMo
SERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhp
Y3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKK0dyYXBo
aWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhIREMgaGRjLCBib29sIGhhc0FscGhhKQor
ICAgIDogR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSkK
IHsKLSAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKLXsKLSAgICBpZiAo
IWhkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEpKTsKICAgICBt
X2RhdGEtPm1faGRjID0gaGRjOwotICAgIGlmIChtX2RhdGEtPm1fY2dDb250ZXh0KSB7Ci0gICAg
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0
ZS4KLSAgICAgICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAgICAgICBz
ZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIH0KIH0KIAogLy8gRklY
TUU6IElzIGl0IHBvc3NpYmxlIHRvIG1lcmdlIGdldFdpbmRvd3NDb250ZXh0IGFuZCBjcmVhdGVX
aW5kb3dzQml0bWFwIGludG8gYSBzaW5nbGUgQVBJCiAvLyBzdWl0YWJsZSBmb3IgYWxsIGNsaWVu
dHM/CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMs
IGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAg
Ym9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFu
c3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9ICFkZXByZWNhdGVkUHJp
dmF0ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYg
KCFjcmVhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fZGF0YS0+cmVzdG9yZSgpOworICAgICAgICBk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xMTAsNyArOTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdp
bmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0
QWxwaGFCbGVuZCA/IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgOiBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBGaXJzdCkpKTsKIAogICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKLSAgICBDR0NvbnRleHRE
cmF3SW1hZ2UobV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2UuZ2V0KCkp
OworICAgIENHQ29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9j
Z0NvbnRleHQuZ2V0KCksIGRzdFJlY3QsIGltYWdlLmdldCgpKTsKICAgICAKICAgICAvLyBEZWxl
dGUgYWxsIG91ciBqdW5rLgogICAgIDo6RGVsZXRlREMoaGRjKTsKQEAgLTEyNCwyMSArMTExLDE4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFw
KiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvCiAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVy
UmVmPiBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0
YShpbWFnZURhdGEuZ2V0KCkpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXpl
KCkuaGVpZ2h0KCksIDgsIDMyLCBpbWFnZS0+Ynl0ZXNQZXJSb3coKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
LSAgICBDR0NvbnRleHREcmF3SW1hZ2UobV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZShwb2ludC54KCksIHBvaW50LnkoKSwgaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+
c2l6ZSgpLmhlaWdodCgpKSwgY2dJbWFnZS5nZXQoKSk7ICAgCisgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2NnQ29udGV4dC5nZXQoKSwgQ0dSZWN0
TWFrZShwb2ludC54KCksIHBvaW50LnkoKSwgaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+
c2l6ZSgpLmhlaWdodCgpKSwgY2dJbWFnZS5nZXQoKSk7ICAgCiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAogLy8g
RklYTUU6IFRoaXMgaXMgbmVhcmx5IGlkZW50aWNhbCB0byB0aGUgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nIGZ1bmN0aW9uIGluIEdyYXBoaWNzQ29udGV4dE1hYy5tbS4KIC8vIFRoZSBj
b2RlIGNvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGFuZCBiZSBzaGFyZWQuCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgZmxvYXQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyLjBmOwogICAgIG9mZnNldCArPSByYWRp
dXM7CiAgICAgQ0dDb2xvclJlZiBjb2xvclJlZiA9IGNvbG9yLmlzVmFsaWQoKSA/IGNhY2hlZENH
Q29sb3IoY29sb3IpIDogbnVsbHB0cjsKQEAgLTE2NCwxMSArMTQ4LDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBm
bG9hdCB3aWR0aCwKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHlsZS5tb2RlICE9IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpTcGVsbGluZyAmJiBzdHlsZS5tb2RlICE9IERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlOjpNb2RlOjpHcmFtbWFyKQogICAgICAgICByZXR1cm47CiAKQEAg
LTI0NCw1ICsyMjUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmZs
dXNoKCkKICAgICBDR0NvbnRleHRGbHVzaChtX2NnQ29udGV4dC5nZXQoKSk7CiB9CiAKK0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q0c6OmRlcHJlY2F0ZWRQ
cml2YXRlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YTsKK30KKwogfQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAppbmRleCBmMTQ0MjU3MmNjNmQxZDU0
YmJlZTU4YmRiYzM2ZWRmNzc0YWFiYjY0Li5mODI0ZjMxZmMyOGYyYmYxYzY1NDMxYjlmYzk5ZGE2
Nzk1YTA5YmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKQEAgLTI4LDcgKzI4
LDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkRJQlBpeGVs
RGF0YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlBhdGguaCIKIAogI2luY2x1ZGUgPGNhaXJv
LXdpbjMyLmg+CkBAIC0xMjcsOSArMTI3LDkgQEAgc3RhdGljIHZvaWQgZHJhd0JpdG1hcFRvQ29u
dGV4dChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBESUIKIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25z
dCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIGJvb2wg
Y3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJl
bmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIWRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAg
ICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUo
KTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4LDQgKzE3OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiB9CiAjZW5kaWYKIAorR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGVwcmVjYXRlZFByaXZhdGVD
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRleCAyOWE4MmE4OTc4MjI5YjBmNTg3M2Fi
ZGY4MmJmYWY4MDZjZjE2NTk4Li5lM2M2ZjdjNjI0YWU2Zjk5NTgyNzM0YjBmODg5YzhmZjA2YTE4
NmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKQEAgLTQ3LDE3ICs0NywxNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3Jh
cGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgcGxhdGZvcm1Jbml0
KGhkYywgaGFzQWxwaGEpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChI
REMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJv
b2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0KEhE
QyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9v
bCBoYXNBbHBoYSkKIHsKICAgICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0LgogICAgIGF1
dG8gdGFyZ2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVzKCk7
CiAKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCktPkNy
ZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOworICAg
IEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpLT5D
cmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKICAg
ICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgICgqcmVuZGVyVGFyZ2V0KS0+
QmluZERDKGhkYywgJnJlY3QpOwpAQCAtNjcsMTIgKzY3LDEyIEBAIEdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJn
ZXQsIFJFCiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUpCitHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVu
ZGVyZXJUeXBlKQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwg
cmVuZGVyZXJUeXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVt
RmFjdG9yeSgpCiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0g
bnVsbHB0cjsKICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODksNyBAQCBJ
RDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAgcmV0dXJu
IGRpcmVjdDJERmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4
dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJRDJEMVJl
bmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYgKCFkZWZh
dWx0UmVuZGVyVGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQq
IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIGRlZmF1
bHRSZW5kZXJUYXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQo
SERDIGhkYywgYm9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBs
YXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRjKQogICAg
ICAgICByZXR1cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6IG1fc3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0
eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpw
bGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKIHsK
ICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZTo6R1BVTWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQs
IEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFw
bGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IHBsYXRmb3JtQ29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0CitQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuIG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2Fi
bGVkKCkpOwogICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIApAQCAt
MTk1LDMzICsxOTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpj
dXJyZW50R2xvYmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
KyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7Ci0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKTsKICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQx
Qml0bWFwPiYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0
MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFn
ZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxh
dGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VT
aXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdp
bmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9y
dEFscGhhQmxlbmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93
c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxw
aGFCbGVuZCkKIHsKICAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+
bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVhdGVkQml0bWFw
KSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIERpcmVj
dDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRv
d3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAgIDo6RGVs
ZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFw
KFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBpbWFn
ZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJEOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogICAg
IDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJlclR5
cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAg
IGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25lZFBs
YXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAgICAgLCBtX3Bs
YXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVyZXJU
eXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVf
cHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3JlbmRlcmVy
VHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMxMCw5ICszMDMs
OCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29saWRDb2xvckJy
dXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikK
K0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1c2hXaXRo
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihjb2xv
cldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMgKzM2NCw2MCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xl
KQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxB
bHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29u
c3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRH
bG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpzb2xpZFN0
cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
b2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCkt
Pm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250
ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNv
bnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhp
Y3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKIH0KIAot
SUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKK0lE
MkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkgY29u
c3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaC5n
ZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCiB7CiAgICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1c2goKnBsYXRm
b3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBh
dHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1Bh
dHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAgRGlyZWN0MkQ6
OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJbnRT
aXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7
CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIu
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwg
c3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJEMV9TVFJPS0Vf
U1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0
eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1fcGxh
dGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3Bs
YXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUpvaW4sIG1f
cGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAwLjBm
KTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9r
ZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7CiB9CiAKIC8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VTdHlsZSgp
ID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
ciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZp
bGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsg
Ly8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU0Mywx
MSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRDT00obV9z
dGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5B
bHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlG
aWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZpbGxQYXR0
ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBX
aW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1
c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
KnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdQYXRo
KGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4dCwg
cGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBwYXRo
LCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxs
UmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
YXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJl
Y3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBhdXRvIGJy
dXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCghbV9p
bXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVy
YXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJl
dmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNv
bnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6OkZpbGxT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6
Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBs
YXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91
dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0
MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwogfQogCi1J
bnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlw
Qm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEzLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRm
b3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1f
aW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKQEAgLTc1NCwx
MTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRm
b3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVjdDJEOjplbmRU
cmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNTRVJUKCFtX2lt
cGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7
CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1Ry
YW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgKHZvaWQp
b2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQor
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkK
KyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4
dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNv
bnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAg
ICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2
ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0
X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsK
KyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAg
ICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0
aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ry
b2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAg
RGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMgc2hv
dWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGltaXQo
bGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9z
b2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAorICAg
IH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNv
bG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBicnVz
aFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0
KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290aGluZ01vZGUg
PSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJEMV9URVhU
X0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZW5k
ZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUpOworICAg
IH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBh
bHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxh
dGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKKyAgICAgICAg
RDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RF
X05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBxdWFsaXR5ID0g
RDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRl
OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1Rf
TkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9M
QVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1D
b250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBEaXJlY3QyRDo6
c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpjbGVhclJlY3Qo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGlyZWN0
MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERp
cmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9h
dCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAgZmxv
YXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6
ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAg
ICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7
CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBE
aXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
ZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNjYWxl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgqcGxhdGZv
cm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0
cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERp
cmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAg
ICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2Rl
KQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMocmVj
dCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAg
IERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMuYXBw
ZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCks
IHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHls
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBE
aXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBV
UkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3Jk
aW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxp
c3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0KLSAg
ICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xB
VElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVh
bGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0NB
TGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4KICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVk
ZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0
ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICghaGFzUGxhdGZv
cm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBEaXJlY3Qy
RDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJh
d2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICAodm9pZClt
b2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBU1NFUlQo
bV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1
c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBE
aXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NFUlQobV9zdGF0
ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZVRo
aWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBt
X3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4K
KyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOworICAgIERp
cmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUu
ZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwg
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4g
RDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxh
dGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNFRF9QQVJBTShm
b250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4T2Zmc2V0ID0g
cG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBocyk7
CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKKyAgICBW
ZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7CiAKLSAg
ICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19N
T0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9u
dFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXND
b3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAgICBtX2RhdGEt
PnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChpICsg
ZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7
CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgo
KTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVp
Z2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJsZSBzeW50aGV0
aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9k
ZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIERp
cmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRl
LCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxB
ZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJhd2lu
Z01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5z
aGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGljc0NvbnRleHQ6
OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7Ci0gICAgLy8g
VGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUu
ZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZp
bGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAgICAg
ICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
YnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBz
ZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250ZXh0ID0gJmdy
YXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwg
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4g
RDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJl
Y3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0
cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJE
aXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGly
ZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERp
cmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0
ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAg
ICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFj
dG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0pOwotfQotCi1H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3Bs
YXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewot
ICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRl
LmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9vd25l
ZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihyZW5k
ZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdy
YXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5
bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAg
ICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRT
dHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAg
ICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1l
YW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAg
IGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNl
dCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dP
ZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFyU2hhZG93
KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1D
b250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQot
ewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVzLCBk
YXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lSm9pbiht
X3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIERpcmVj
dDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBEaXJlY3Qy
RDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3Jl
YXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghYnJ1
c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVu
dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9k
ZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xv
ciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3Is
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJh
dG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNoYWRvd1N0YXRl
KHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGlyZWN0MkQ6OmZp
bGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0YXRl
KTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVy
YXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAg
ICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQo
KSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENv
bG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNlLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0
MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxp
cHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxpbmVX
aWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVBh
dGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUs
IGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJl
Y3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIERpcmVj
dDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9v
dGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICghZm9u
dC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8geE9m
ZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1H
bHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7
Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMp
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAg
ICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOwot
ICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAg
ICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAg
ICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOwot
ICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNC
b2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJE
OjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VT
b3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywg
aG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRl
LnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZz
ZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJh
d05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0
KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UucGxh
dGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNv
bnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRo
aWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tl
Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJE
OjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQs
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ry
b2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1BhdGgo
Y29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0o
b2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9wbGF0Zm9ybUNv
bnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cmVzdG9yZSgp
Ci17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Ci17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5n
bGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZShtX3BsYXRm
b3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGly
ZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTShtX3BsYXRmb3Jt
Q29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIERpcmVj
dDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBh
dGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBQ
YXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gRGly
ZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAg
IGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAmZ3Jh
cGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRl
eHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0
Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVOQUJM
RShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5MGVlYTdiNDJm
MjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotCi1j
bGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5k
ZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0Nv
bnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCopOwotICAgIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxv
YXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
b3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChH
cmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZv
aWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3Qg
TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0g
ICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQot
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0OwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2
YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3NzVhNjJiYWVh
MjJmOTkwNjA3ZWI0Y2JkLi42ZGJiZTk2NmQzOTY5OTI1OWU2NWM2Zjg1MGVlNmU3YzM1Y2RkOTFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0YXRpYyB2b2lk
IGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9STShXSU4pCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhib29sIGlu
Y2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgPSBpbmNs
dWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1ZGVDaGls
ZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9zaG91bGRJ
bmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0NvbnRleHQ6Oldp
bmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
QEAgLTk1LDcgKzk1LDcgQEAgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2luZG93
c0JpdG1hcCgpCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRt
YXA+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlV2luZG93c0JpdG1hcChjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KG1fZGF0YS0+bV9o
ZGMsIHNpemUpOworICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYywgc2l6ZSk7CiB9CiAjZW5kaWYKIApAQCAtMTAzLDcg
KzEwMyw3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IElu
dFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhCiB7CiAgICAgSERDIGhkYyA9IG51bGxw
dHI7CiAgICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIGhkYyA9IG1fZGF0YS0+bV9oZGM7CisgICAg
ICAgIGhkYyA9IGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKICAgICAvLyBGSVhN
RTogU2hvdWxkIGEgYml0bWFwIGJlIGNyZWF0ZWQgYWxzbyB3aGVuIGEgc2hhZG93IGlzIHNldD8K
ICAgICBpZiAoIWhkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSkgewogICAgICAgICBpZiAo
ZHN0UmVjdC5pc0VtcHR5KCkpCkBAIC0xMzUsMTcgKzEzNSwxNyBAQCBIREMgR3JhcGhpY3NDb250
ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBv
cnRBbHBoYQogICAgICAgICByZXR1cm4gYml0bWFwREMubGVhaygpOwogICAgIH0KIAotICAgIG1f
ZGF0YS0+Zmx1c2goKTsKLSAgICBtX2RhdGEtPnNhdmUoKTsKLSAgICByZXR1cm4gbV9kYXRhLT5t
X2hkYzsKKyAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+Zmx1c2goKTsKKyAgICBkZXBy
ZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+c2F2ZSgpOworICAgIHJldHVybiBkZXByZWNhdGVkUHJp
dmF0ZUNvbnRleHQoKS0+bV9oZGM7CiB9CiAKIEhEQyBHcmFwaGljc0NvbnRleHQ6OmhkYygpIGNv
bnN0CiB7Ci0gICAgaWYgKCFtX2RhdGEpCisgICAgaWYgKCFkZXByZWNhdGVkUHJpdmF0ZUNvbnRl
eHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gbV9kYXRhLT5tX2hk
YzsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwogfQogCiAj
aWYgUExBVEZPUk0oV0lOKSAmJiAhVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRl
MDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVj
NDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2UyYmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2Nm
YjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJ
bWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkK
ICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcElu
Zm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgs
IGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250
ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsKIAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBC
aXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5
OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVj
NWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1
ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAg
Ym9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50
U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2Up
OwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikp
OworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNp
emUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5j
cHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRjYTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWEx
N2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3
ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNo
UmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2Ny
YXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRl
eHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29u
dGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVj
dCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQo
KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQy
RCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5
KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENv
bnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQ
VU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VT
dHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIz
NDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNiZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3
IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uCiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0lt
YWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VS
ZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2Ug
KmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJ
bWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFw
aGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAg
ICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4
dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2FsZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAg
ICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRp
b24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
ckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAg
IGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVy
ZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1h
Z2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVy
Q29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRD
RyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRy
YW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQu
c2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRS
b3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6
OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
Rm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGljYQogCiAg
ICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1
cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNv
bnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRo
ZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3Rz
IHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0
aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJpbHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4K
ICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIz
OCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUm
IGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0g
KnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHRO
UyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNp
emU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0
KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdlXShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRl
eHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChy
ZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29u
dGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAgICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBj
b25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6
OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFn
ZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFj
dGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0Nv
bnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29u
dGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0
SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAg
ICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0
cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRl
eCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDczYmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZl
ZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIy
ZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNiODg3M2Y1NTA5Li40NDUwMWFiMTM5YjhlZWVlOTE0
Y2U2ZDg2NzQxN2IyZTllYzkyNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RHJhZ0ltYWdlV2luLmNwcApAQCAtMTg2LDcgKzE4Niw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVE
cmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBpbkxhYmVs
LCBUCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICA6OlNlbGVjdE9iamVjdCh3b3Jr
aW5nREMuZ2V0KCksIGltYWdlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChj
b250ZXh0UmVmKTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KGNvbnRleHRSZWYpOwog
ICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZlciB3ZSBj
YW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwgc28gd2Ug
dXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBTUkdCQTx1aW50OF90
PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
b250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCBkYTk1MmJmNmIzY2ZhMmZiNmMwOWFmMGQy
ZDY5ZjQ2M2Q3NmFlYzI2Li4xYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3Njdk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hl
Y2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENo
ZWNrZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0z
OCw3ICszOSw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29u
dGVudGZ1bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWlu
dEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAg
ZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGNoZWNrZXJDb250ZXh0KEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51bGxHcmFwaGljc0NvbnRl
eHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChj
aGVja2VyQ29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwog
CiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwCmluZGV4IDhlZmZjMDkyMjZlM2Q5OGVkY2YzYmQ0YjgxNDA1ZTliNmIzNjMzZDUuLjQ3YjRj
ZGQ0MjdmZDZmODNkMDRiYWI4ODViNGFhZWQ4ZDUyYzM5YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNjkwLDEwICs2OTAs
NyBAQCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAgICBib3hTaGFkb3cgPSBib3hTaGFk
b3ctPm5leHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hhZG93LT54KCks
IGJveFNoYWRvdy0+eSgpKTsKLSAgICBpZiAoIWJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3co
KSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJh
ZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9y
KCkpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNoYWRvd09m
ZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0
ZXIoYm94U2hhZG93LT5jb2xvcigpKSk7CisgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zm
c2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBT
aGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIH0K
IAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNob29zZUludGVy
cG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBj
b25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKQEAgLTI0MzksMTAgKzI0
MzYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQ
YWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgRmxvYXRQb2ludCBz
bmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93
UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNo
YWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgRmxv
YXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxT
bmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGlmIChzaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRMZWdh
Y3lTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25h
cHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2Rl
OjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICAgICAgaWYg
KGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3Bh
cXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28g
c2F2ZXMgdGltZQpAQCAtMjU0MywxMSArMjUzNyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVj
CiAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShleHRyYU9mZnNldCk7CiAgICAgICAgICAg
ICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgICAgIGlmIChzaGFkb3ct
PmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lT
aGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotCisgICAgICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNX
ZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1
c01vZGU6OkRlZmF1bHQpOwogICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShwaXhlbFNuYXBwZWRPdXRlclJlY3QsIHBpeGVsU25hcHBlZEhvbGVSZWN0LCBmaWxsQ29s
b3IpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCBmYjYxZTU0ZTRhOGU5OWFjNjY5NGY3YzM0ZDBmZWU4
ZjFkMDI2OTRmLi5jZThkYjRjNTY4NDQ4Yjk4NGQzZTE5MTRkY2E3ZjYzMTY0NjUwZTM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vZGVsLmgiCisjaW5jbHVkZSAiTnVsbEdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5j
ZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgpAQCAtMTc4OSw3
ICsxNzkwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkK
ICAgICB9OwogCiAgICAgYXV0byB1cGRhdGVFdmVudFJlZ2lvbkZvckxheWVyID0gWyZdKEdyYXBo
aWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IG51bGxD
b250ZXh0KG51bGxwdHIpOworICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0
KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAg
ICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJ
T04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVn
aW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVC
aXRtYXBDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRt
YXBDYWlyby5jcHAKaW5kZXggOWNlYTVmYTM0YzRhNmMwODdmZGUyOGMyNTJhMzFmMTU1OGRlNjFm
Zi4uMTYxNzdjMDAwNzFlZTgyNmU4MDk2ZjNlZGY5YjgyYmI4Yzg1MGZmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcApAQCAt
MzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NhaXJvT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGls
aXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1l
bnRlZC5oPgogCkBAIC02MCw3ICs2MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZSA9IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogICAgIFJl
ZlB0cjxjYWlyb190PiBiaXRtYXBDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdl
LmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoYml0bWFwQ29udGV4dC5nZXQoKSkpOwor
ICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENhaXJvPihiaXRtYXBDb250ZXh0
LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFw
Q0cuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCmlu
ZGV4IDA1MGIwNDllODVhMDM3NTkyOGIwZDY0N2YxYjBjYWM0ZWUxMWJiNjAuLjc0ZDI0NTc1Nzlk
MzgxZmVlMTBmM2VhNTQxNjhiOGI5ZDUwYmY5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAs
IG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5n
ZXQoKSwgMSwgLTEpOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Pihi
aXRtYXBDb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRDRz4oYml0bWFwQ29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpw
YWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBk
ZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKaW5kZXggMDhmNmZiNTJj
ODBjMzdjZWRkMTZmZTA3MDJhNTRiYmI1ODhkN2VmMy4uY2QxNThmMGNiNjQ3NmJkMjQ4Zjk3YzAw
Njk2NTliNGYxYmY2NGUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1No
YXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4v
U2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8
V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0
aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxl
bWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgog
I2luY2x1ZGUgPGQyZDFfMS5oPgpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkK
ICAgICBpZiAoIXN1cmZhY2VDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpjcmVhdGVGYWN0b3J5KHN1cmZhY2VDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJu
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+KHN1cmZhY2VDb250ZXh0LmdldCgp
KTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwCmluZGV4IGRjMGE3MGI4ODI0YWZkYzdlYzNkZDFmNjlmNGQ5YjUxOTQyOTI0ZjYuLjRmNzhi
NWViNWNkYjUxZjJlYmZjYWZmNjRlY2QxOWIxZTYzMGFkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKQEAgLTMyLDcgKzMy
LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tp
bmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0
aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8u
aD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtODQsNyArODQsNyBAQCB2b2lkIEJhY2tpbmdTdG9y
ZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0
ZUluZm8mCiAgICAgLy8gUGFpbnQgYWxsIHVwZGF0ZSByZWN0cy4KICAgICBJbnRQb2ludCB1cGRh
dGVSZWN0TG9jYXRpb24gPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsK
ICAgICBSZWZQdHI8Y2Fpcm9fdD4gY2Fpcm9Db250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KG1fYmFja2VuZC0+c3VyZmFjZSgpKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9Db250ZXh0
LmdldCgpKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KGNhaXJv
Q29udGV4dC5nZXQoKSk7CiAKICAgICAvLyBXaGVuIG1fd2ViUGFnZVByb3h5LmRyYXdzQmFja2dy
b3VuZCgpIGlzIGZhbHNlLCBiaXRtYXAgY29udGFpbnMgdHJhbnNwYXJlbnQgcGFydHMgYXMgYSBi
YWNrZ3JvdW5kIG9mIHRoZSB3ZWJwYWdlLgogICAgIC8vIEZvciBzdWNoIGNhc2UsIGJpdG1hcCBt
dXN0IGJlIGRyYXduIHVzaW5nIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5IHRvIG92ZXJ3cml0ZSB0
aGUgZXhpc3Rpbmcgc3VyZmFjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1By
aW50aW5nVmlldy5tbQppbmRleCBmMThiYThmMDFiMjZkZTNmZDNjZGZiMDI4MTI4NWNmMGQ0YTY2
NjlmLi5kMDNlNjQzNGIxYWIyZmJkNWU1NTQzMjk2OGIzZTlmNTY1OTJiYWM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0zMCwxNSArMzAs
MTYgQEAKIAogI2ltcG9ydCAiQVBJRGF0YS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9y
dCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlByaW50SW5mby5oIgogI2ltcG9ydCAiU2hh
cmVhYmxlQml0bWFwLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFF1YXJ0
ei9RdWFydHouaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsRGVm
YXVsdFN5c3RlbUFwcGVhcmFuY2UuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKKyNpbXBv
cnQgIlBERktpdFNvZnRMaW5rLmgiCisKIE5TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxU
b3BQcmludGluZ01hcmdpbktleSA9IEAiV2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iOwogTlNTdHJp
bmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJL
aXRPcmlnaW5hbEJvdHRvbU1hcmdpbiI7CiAKQEAgLTU1NSw3ICs1NTYsNyBAQCAtICh2b2lkKV9k
cmF3UHJldmlldzooTlNSZWN0KW5zUmVjdAogCiAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVhYmxl
Qml0bWFwPiBiaXRtYXAgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKIAotICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENv
bnRleHRdIENHQ29udGV4dF0pOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwog
CiAgICAgYml0bWFwLT5wYWludChjb250ZXh0LCBfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgV2ViQ29yZTo6SW50UG9pbnQobnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+Ym91
bmRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdT
dG9yZURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3Rv
cmVEaXJlY3QyRC5jcHAKaW5kZXggYWJkYWE2ZWIyYzU3ZGUzZWU2NmMyYzNmZjE2NGEzMzRiMTI0
MTVkOS4uOTBiNDI0YWNlMjk4MzdkMDViOTcwNmQwMDQ4NWQ5NWY3ZTFlMmQwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3Bw
CkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNrZW5k
RGlyZWN0MkRJbXBsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERp
cmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgog
I2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkM2QxMV8xLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQppbmRleCBmMjM0OGY4NTI0
ZTk2M2YzYjgyNTg0YjQ1YTI3YTgyNzZiNDUwYjdiLi5hNWYwMzAwZWE0ZTY2NWE0NzYwMjY5MjYz
M2U4Zjk5ZjMxNThjNTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTM1LDcgKzM1LDYgQEAKICNpbXBvcnQgIkxvZ2dpbmcu
aCIKICNpbXBvcnQgIlBERkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgogI2ltcG9ydCAi
UERGQ29udGV4dE1lbnUuaCIKLSNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCiAjaW1wb3J0ICJQ
REZMYXllckNvbnRyb2xsZXJTUEkuaCIKICNpbXBvcnQgIlBERlBsdWdpbkFubm90YXRpb24uaCIK
ICNpbXBvcnQgIlBERlBsdWdpblBhc3N3b3JkRmllbGQuaCIKQEAgLTcyLDcgKzcxLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MQm9keUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1l
bnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CkBAIC0xMDYsNiArMTA1
LDggQEAKICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCisjaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgorCiAjaWYgSEFW
RShJTkNSRU1FTlRBTF9QREZfQVBJUykKIEBpbnRlcmZhY2UgUERGRG9jdW1lbnQgKCkKIC0oaW5z
dGFuY2V0eXBlKWluaXRXaXRoUHJvdmlkZXI6KENHRGF0YVByb3ZpZGVyUmVmKWRhdGFQcm92aWRl
cjsKQEAgLTE5NDQsNyArMTk0NSw3IEBAIHZvaWQgUERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dChDQUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRlCiAgICAgTG9j
YWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVhcmFuY2UocGFnZS0+dXNlRGFya0Fw
cGVhcmFuY2UoKSk7CiAjZW5kaWYKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0Nv
bnRleHQpOwogCiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0KaW5kZXggMTYyNTNjODg3MDczMDc3ODAwMGQ4NTNkNGRkZmQzMjI3OWQ4MTg5
ZS4uZjdiZGI5NTcwNGRjNDU2MDIzNTkyNjM4MWRmNjA0ZjAyODBkMDEwZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQpAQCAtNDIsNiArNDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0ZvY3VzQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZp
ZXcuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdl
YkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxVTGlzdEVsZW1lbnQuaD4KQEAgLTMxNyw3ICszMTgs
NyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBXZWJQYWdlOjpwZGZTbmFwc2hvdEF0U2l6ZShJbnRS
ZWN0IHJlY3QsIEludFNpemUgYml0bWFwU2l6ZQogCiAgICAgICAgIENHUERGQ29udGV4dEJlZ2lu
UGFnZShwZGZDb250ZXh0LmdldCgpLCBkaWN0aW9uYXJ5KTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0IHsgcGRmQ29udGV4dC5nZXQoKSB9OworICAgICAgICBHcmFw
aGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBncmFwaGljc0Nv
bnRleHQudHJhbnNsYXRlKDAsIC1iaXRtYXBTaXplLmhlaWdodCgpKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3
aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhp
Y3MuY3BwCmluZGV4IDg3MTZkZjQ5YmQxOTJkMDEwNTExNmI2YmRiMGFiNjk2MzE4NzdiYjguLmU5
OTQ1N2M3NDIzMjFiNTNlMWY2ZWE1ZGM5MGRkZWE4NjUyM2ViODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0Fy
ZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAK
ICNpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUg
PGQyZDEuaD4KICNpbmNsdWRlIDxkM2QxMV8xLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGIxN2E3NGE0MzZhZTNkZTRmYjUyZjhmNTUzY2Y4
MTE1ODA3ZDA5MDcuLjNmZWU3ZjU4N2RlYjNkNTQyZmNmZGU5OTJlOTQ2NTA4MDUwYjI3YjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNzIs
NiArMzcyLDExIEBACiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLmgi
CiAjZW5kaWYKIAorI2lmIFVTRShDRykKKy8vIEJ1dCByZWFsbHkgcHJvYmFibHkgd2Ugc2hvdWxk
IG1vdmUgdGhlIENHLXNwZWNpZmljIFBERiBwYWludGluZyBjb2RlIG91dCBvZiBXZWJQYWdlLmNw
cC4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC01Mzg4LDcgKzUzOTMsNyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1RvUERG
SW1wbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludAogICAg
ICAgICAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IHBhZ2VJbmZvID0gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgICAg
ICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkp
OwogCi0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGN0eChjb250ZXh0LmdldCgpKTsK
KyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjdHgoY29udGV4dC5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgY3R4LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgICAgICAgICAg
ICAgIGN0eC50cmFuc2xhdGUoMCwgLW1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdlKS5oZWln
aHQoKSk7CiAgICAgICAgICAgICAgICAgbV9wcmludENvbnRleHQtPnNwb29sUGFnZShjdHgsIHBh
Z2UsIG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdlKS53aWR0aCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVy
YXRpb25HdGsuY3BwCmluZGV4IGRlMWYwNmRkOGFkYThmZGZmYzVhMDk4NzM5YzRhZWFiOWJiMzNh
ODUuLjM5OWIxZTgwYTNkODRkMWQwZDMwMDk2YWM0NDY1MGFjOThmNTgxNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50
T3BlcmF0aW9uR3RrLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRG9j
dW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50
ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CkBAIC02NzYs
NyArNjc2LDcgQEAgdm9pZCBXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVyUGFnZShpbnQgcGFn
ZU51bWJlcikKICAgICBwcmVwYXJlQ29udGV4dFRvRHJhdygpOwogCiAgICAgZG91YmxlIHBhZ2VX
aWR0aCA9IGd0a19wYWdlX3NldHVwX2dldF9wYWdlX3dpZHRoKG1fcGFnZVNldHVwLmdldCgpLCBH
VEtfVU5JVF9JTkNIKSAqIG1feERQSTsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShtX2NhaXJvQ29udGV4dC5nZXQoKSkpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvIGdyYXBoaWNzQ29udGV4dChtX2NhaXJvQ29udGV4dC5nZXQoKSk7CiAgICAgbV9wcmlu
dENvbnRleHQtPnNwb29sUGFnZShncmFwaGljc0NvbnRleHQsIHBhZ2VOdW1iZXIsIHBhZ2VXaWR0
aCAvIG1fc2NhbGUpOwogCiAgICAgY2Fpcm9fcmVzdG9yZShtX2NhaXJvQ29udGV4dC5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0
aWNzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQppbmRleCBkNTQxYzRjMDRmMmQ3NWQwNmJlZTA4MGViY2ZlNjZiMGE0NWZiZWY2Li45MjhhZTdk
NTFlM2YwYjdkOTEwMjBjN2RhMjg4ZWRlMjQ1YzM4NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTM5LDcgKzM5LDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dseXBoUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUNvbnNv
bGVDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJpbnRDb250ZXh0Lmg+CkBAIC0zMDUsNyAr
MzA1LDcgQEAgLSAodm9pZClwcmludFRvQ0dDb250ZXh0OihDR0NvbnRleHRSZWYpY2dDb250ZXh0
IHBhZ2VXaWR0aDooZmxvYXQpcGFnZVdpZHRoSW5QaXgKICAgICBpZiAoIWNvcmVGcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjZ0Nv
bnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQp
OwogICAgIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKCpjb3JlRnJh
bWUsIGdyYXBoaWNzQ29udGV4dCwgRmxvYXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVp
Z2h0SW5QaXhlbHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
TWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KaW5kZXggMmJhMDA2ZGQzZTdiMmFmYzUwZWZmMjg0
NTMyMGQ5NjUwNWJhNzFiYS4uNzgzMjU2MTljMWFjNzc0NGU4OGZkNDkyNTM2Yzk1N2EwNDI0NGY3
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmlu
Z0V4dHJhcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3Ry
aW5nRXh0cmFzLm1tCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JN
YWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0xvYWRlck5TVVJMRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1RleHRSdW4uaD4KICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC03
OCw3ICs3OCw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQb2ludDooTlNQb2ludClwb2ludCBmb250
OihOU0ZvbnQgKilmb250IHRleHRDb2xvcjooTlNDb2xvciAqCiAKICAgICAgICAgTlNHcmFwaGlj
c0NvbnRleHQgKm5zQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07
CiAgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBbbnNDb250ZXh0IENHQ29udGV4dF07
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0IHsgY2dDb250ZXh0IH07
CiAKICAgICAgICAgLy8gV2ViQ29yZSByZXF1aXJlcyBhIGZsaXBwZWQgZ3JhcGhpY3MgY29udGV4
dC4KICAgICAgICAgYm9vbCBmbGlwcGVkID0gW25zQ29udGV4dCBpc0ZsaXBwZWRdOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGln
aHRWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVI
aWdobGlnaHRWaWV3Lm1tCmluZGV4IGQzOTczZTI5NDQ1OWVjZjFkYmRlZjQ0OWVmMmNmZDJjYWNi
OGVkMzUuLjk1MGFlOGUwMGQzMGE0NTIwOWY5YWRkYTNjMmIzM2YxMzEwMDIyYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0
Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9k
ZUhpZ2hsaWdodFZpZXcubW0KQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgIldlYk5vZGVIaWdo
bGlnaHRWaWV3LmgiCiAjaW1wb3J0ICJXZWJOb2RlSGlnaGxpZ2h0LmgiCiAKLSNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KICNpbXBvcnQg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTk4LDcgKzk4LDcgQEAgLSAodm9pZClkcmF3UmVjdDoo
TlNSZWN0KXJlY3QKIAogICAgICAgICBBU1NFUlQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gaXNGbGlwcGVkXSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
W1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgICAg
IEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0gQ0dDb250ZXh0XSk7CiAgICAgICAgIFtfd2ViTm9kZUhpZ2hsaWdodCBpbnNwZWN0b3JD
b250cm9sbGVyXS0+ZHJhd0hpZ2hsaWdodChjb250ZXh0KTsKICAgICAgICAgW05TR3JhcGhpY3ND
b250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBmMzVkN2JkNWEyMzUxYjJiMDFiNjhiYjFl
MjE2Zjc0NTdlNDE4YTcxLi45NWJkYTM5MGNhNjliYTZiOTYyMGY1MWJlZTY5NmIyMTIzOWFiMTRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTgx
LDcgKzgxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVUcmVlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRnJhbWVP
d25lckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hpc3RvcnlJdGVtLmg+CkBAIC02MTMsNyArNjEzLDcgQEAgLSAodm9pZClfZHJhd1Jl
Y3Q6KE5TUmVjdClyZWN0IGNvbnRlbnRzT25seTooQk9PTCljb250ZW50c09ubHkKICNlbHNlCiAg
ICAgQ0dDb250ZXh0UmVmIGN0eCA9IFdLR2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dCgpOwogI2Vu
ZGlmCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY3R4KTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KGN0eCk7CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggN2M0MzYxYTNhY2Fk
MTMzNDAxODI3ODgxM2ZiM2I2MDVjZDZmNmVmMC4uMTdlZDJmNGE5ZjhiZThkNjEwZmIwNDkzMmI3
ZTk4YzNiNzZiOTE5OSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3Ro
eV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDUtMjQgIENvbW1pdCBRdWV1ZSAgPGNv
bW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyBy
Mjc3OTQwLgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nn
L0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAppbmRleCAxMmI5OTY5YzYzNGViNzQ5NTI4ZmMx
NjhlMTY1MzRlZDdmNjQ4YzgwLi4zNWZkYTMyOTE3OTRkZTFiMTkxYzg1NDY3MDlkZmMzNGI3MGU2
N2E3IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlz
cGxheUxpc3RUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3RSZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDgsNyArNDksNyBAQCBURVNUKERpc3BsYXlM
aXN0VGVzdHMsIFJlcGxheVdpdGhNaXNzaW5nUmVzb3VyY2UpCiAKICAgICBhdXRvIGNvbG9yU3Bh
Y2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdC
KSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShu
dWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgs
IGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0byBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgPSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRl
KCk7CiAKQEAgLTExMiw3ICsxMTMsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIE91dE9mTGlu
ZUl0ZW1EZWNvZGluZ0ZhaWx1cmUpCiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENH
Q29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBj
Z0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0
V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0
KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29u
dGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgRGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0
OwogICAgIFdyaXRpbmdDbGllbnQgd3JpdGVyOwpAQCAtMTQzLDcgKzE0NCw3IEBAIFRFU1QoRGlz
cGxheUxpc3RUZXN0cywgSW5saW5lSXRlbVZhbGlkYXRpb25GYWlsdXJlKQogCiAgICAgYXV0byBj
b2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNw
YWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4
dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qp
KTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAg
IEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1
dG8gcnVuVGVzdFdpdGhJbnZhbGlkSWRlbnRpZmllciA9IFsmXShGbHVzaElkZW50aWZpZXIgaWRl
bnRpZmllcikgewogICAgICAgICBFWFBFQ1RfRkFMU0UoaWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429612</attachid>
            <date>2021-05-24 19:19:44 -0700</date>
            <delta_ts>2021-05-24 21:35:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524191943.patch</filename>
            <type>text/plain</type>
            <size>378231</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjRiY2E3ZWJlMzQ2ZDU0ZDk4OGY3MTFkMmRhZjU1MWJi
ZTczNjM5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCA9IDA7CisjaWYg
UExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNoaWxkIHdpbmRvd3Mgc2hv
dWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8gcmF0aGVyIHRoYW4gYWxs
b3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBEZWZhdWx0cyB0bwogICAg
IC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgogI2lmIFVTRShESVJFQ1Qy
RCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiosIFJFQ1Qs
IGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRh
cmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZhY3RvcnkoKTsKKyAgICBz
dGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBiZWdpbkRyYXcoKTsKICAg
ICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2b2lkIGVuZERyYXcoKTsK
ICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNoKCkg
Y29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gUExBVEZPUk0o
V0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5l
VG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBz
dHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlu
a3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGltcGwoKSB7IHJldHVybiBt
X2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBib29sIGhhc0FscGhhID0g
ZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBwbGF0Zm9ybUlu
aXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhhc0FscGhhID0gZmFsc2Up
OwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiwgQml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0
YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwotCi0gICAgdm9pZCBzZXRQ
bGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0KLSAgICB2b2lk
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIHNldFBsYXRm
b3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7Ci0gICAgdm9pZCBzZXRQ
bGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwotCi0gICAg
dm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtQ29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAor
cHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAg
dm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxh
dGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBwbGF0Zm9y
bUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
LQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0gICAg
dm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmlu
dGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9r
ZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBAIHByaXZhdGU6CiAgICAg
ZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgoZmxv
YXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CiAgICAgVmVjdG9yPEZs
b2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUs
IGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2ludCBwb2ludDIp
IGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBu
dWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+IG1faW1w
bDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisKK3ByaXZhdGU6CiAgICAg
VmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCi0gICAgY29uc3QgUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lD
b3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07
CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9OworICAgIGJvb2wg
bV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5ZGI4MjNjZWEzNTIxYjRj
NWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRl
eHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dElt
cGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjJmZmI0NTQ1YWUy
MzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHRJbXBsKTsKLXB1Ymxp
YzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZpcnR1
YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQ7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwotI2VuZGlmCi0K
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJv
dW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmIGRyYXdpbmdG
dW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQ
bGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5k
aW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIyYjBhNjYyMDg1Li4xMzgw
ZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4LDkgQEAgSW1hZ2VEcmF3
UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8v
IEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVoYXZpb3IgZGlmZmVyZW5j
ZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1MsIGl0J3Mg
ZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0LgotICAgIGlmIChjdHh0
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5yZW5kZXJpbmdNb2RlKCkg
PT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAgaWYgKHNpemUoKS53aWR0
aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkg
PT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3Jj
UmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYxN2QxMDAxNmVmNTM4MGZk
ODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZkZGM5NzFhYzJiZWI5ODA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTcxLDcgKzcx
LDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZs
b2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dElt
cGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwogCkBAIC04MCw3ICs3OSw2
IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDogcHVibGljIFJlZkNvdW50
ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVu
ZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdl
KCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9O
dWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9O
dWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2YjIxMTI5YzAzYTBiMGIw
ZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDE1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDogdWludDhfdCB7
CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50cywKKyAgICAg
ICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAgICAgICAgRGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5h
bCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQ
YWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29sIGludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
OyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CisgICAg
Ym9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVj
dGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0
SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNU
MkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFw
cGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVz
KSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3Qg
RmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tl
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxl
ID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25z
dCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVy
biB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwg
eyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWdu
ZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKworICAgIHZvaWQgZHJh
d0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGlu
Z01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFs
IHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyBy
ZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBm
aW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYs
IEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsg
fQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJs
ZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lk
IGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9CisgICAg
dm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsg
fQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQor
I2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6CisgICAgY29uc3QgUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmlu
ZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1M2QuLjE4OTVjMjE5Mzc2
NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyArMTk4LDkgQEAgU2hhZG93
Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAg
LCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykg
eworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGgg
cmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBu
ZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtp
dC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9M
ZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZs
b2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRl
eCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2MxLi4xZjRjZDQ0NTQzZjBl
OTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE3NDAsOSAr
MTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENv
bW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9h
dFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihjb250ZXh0
LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFm
ZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNv
cmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0
aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4YWYwNGZhMjU1ZTRmODQz
ZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRmMzRmNDE2NjNkZGQ3NGUx
Mjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMyw3ICszMyw3IEBACiAj
aW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENH
RmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2MpLCAw
LCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBj
Zyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsKICAgICBjZy5z
ZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVu
KHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMwNTJkNmE5ODkz
MWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJlNTMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNp
ZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJU
aWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQK
IAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMu
c2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAK
ICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwg
YmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUg
bGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXll
clJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0g
Y2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3Jh
cGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJU
aWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJi
NDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2RjZjIzZjc4NTQ5MDViMjc2
MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAt
MjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNB
TGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFj
a2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpk
aXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZgogICAgIFBs
YXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3duZXIoKTsKICAgICBHcmFw
aGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24g
PSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250
ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQg
dG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25p
ZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxl
ZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggY2Y0ODM3NjAzZTBh
YjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uYmE1OTRhZThjYzJhODAyYjY1NjA2MGZiMGUz
YmJhMjIxODY5ODQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogCiAjaWYgVVNFKENB
SVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dENh
aXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1f
cGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQog
ewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rh
dGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9ybUNvbnRleHQp
OwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUo
bV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7
CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZh
dGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQu
Y3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3QqIGNhaXJvQ29u
dGV4dCkKKyAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNv
bnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293
bmVkUGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCiB7Ci0gICAgaWYgKG1f
ZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRl
eHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgIH0KKyAgICBt
X3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQo
KSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsK
IH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdyYXBo
aWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFuc2Zv
cm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAm
bV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUoKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogLy8g
RHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tu
ZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUlt
YWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFn
ZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIC8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3
IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwg
cG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJv
OjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRy
YXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxs
UGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0
cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
Q2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUo
KSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJu
KDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0dGVy
bikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29s
b3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0
Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Cisg
ICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9y
bWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBDYWly
bzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwg
Y2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRz
KCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBjb25z
dAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRz
KCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRo
ZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNFRF9Q
QVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vs
c2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBh
dGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jpbmco
KnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBh
aW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsK
ICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9yVGV4
dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lk
dGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVz
Rm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgp
LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBt
X3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRD
YWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5n
TW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBs
LT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4g
Q2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsKLSAg
ICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBj
b2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxs
IG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VD
b2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0
IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNldCB0
aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAvLyBXZSBmbGlwIHRo
ZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwor
ICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAg
ICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAt
c2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUo
KnBsYXRmb3JtQ29udGV4dCgpLCBzdHJva2VTdHlsZSk7Ci19CisgICAgaWYgKGZsYWdzICYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRB
bnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNv
bmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNz
IGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAg
ICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZl
IG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zmc2V0
LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpw
bGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpl
bmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3JtQ29u
dGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRh
c2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1D
b250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lSm9p
bigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5
YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0
TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9y
bUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xpcFBh
dGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRlKCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBz
aXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlz
VmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJu
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBD
YWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50U2l6
ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBu
YXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVu
YWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUo
KSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJldHVy
biBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAg
ICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4
dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fp
cm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1dG8g
eU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1H
bHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwg
eE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53
aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKKyAg
ICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2Nh
bGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJsZSBz
eW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAgICBp
ZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcgPSBG
b250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJv
OjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAg
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNC
b2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdp
bmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUu
c2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmNjMWVlYzA2
ZDMzMzg5NGVhZGI4YjFkZTQ2NmQ2N2JiMTAyYWJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApA
QCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0cnVj
dCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9y
bUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGlj
c0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29udGV4
dENhaXJvKGNhaXJvX3QqKTsKKyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRDYWlybygpOwor
CisgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICBQbGF0Zm9y
bUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXAp
IGZpbmFsOworICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZp
bmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0
TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRp
ZW50JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQg
ZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKwor
ICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCos
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxv
YXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAg
ICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKwor
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOwor
ICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFs
OworCisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJv
dGF0ZShmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bDsKKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAg
ICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgZmluYWw7
CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFsOworCisgICAgdm9pZCBjbGlw
KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZv
aWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5hbDsKKyAgICBJbnRSZWN0IGNs
aXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgCisgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9k
ZSkgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1f
b3duZWRQbGF0Zm9ybUNvbnRleHQ7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZv
cm1Db250ZXh0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZT4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMmEwNDgxN2JmZDRlZDBmMjA2Nzc1YWMyODYy
MjQ5OTcyNWFkNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzMSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5o
IgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBs
RmFjdG9yeSgKLSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQot
ewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5
KAotICAgICAgICBbY2Fpcm9Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybz4oY29udGV4dCwgY2Fpcm9Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKLSAgICA6
IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KHBs
YXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1D
b250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBt
X3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29u
dGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1
ZTxQbGF0Zm9ybUNvbnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKLSAgICAsIG1fcGxhdGZvcm1D
b250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCi17
Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZh
dGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQu
Y3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6fkdyYXBoaWNzQ29udGV4dElt
cGxDYWlybygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZShudWxscHRyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86Omhhc1Bs
YXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3Jt
Q29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
Ci17Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0
Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxl
KTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
IHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAg
ICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQg
d2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhl
IGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0g
ICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4
dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRvJiBz
aGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxlU3Rh
dGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5o
ZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBv
c2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGVhclNoYWRv
dygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICBDYWlybzo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4
dCwgbGluZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBD
YWlybzo6c2V0TGluZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNvbnRleHQs
IGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldE1pdGVy
TGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdChtX3Bs
YXRmb3JtQ29udGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpT
aGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRp
ZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0
YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLSAgICBD
YWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRlcm4uZ2V0KCkpOwot
ICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRp
b24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotICAg
IENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1h
bCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvcjsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAg
IENhaXJvOjpTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7Ci0gICAgaWYgKHJlY3QuaXNS
b3VuZGVkKCkpCi0gICAgICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBDYWlybzo6
ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBjb2xvciwgc2hhZG93U3Rh
dGUpOwotCi0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIHsgfSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpmaWxsUGF0aCht
X3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0g
ICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUGF0aChtX3BsYXRmb3JtQ29udGV4dCwg
cGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxs
aXBzZShyZWN0KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBD
YWlybzo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFu
Y2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21v
b3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEo
KS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8geE9mZnNldCA9IHBvaW50Lngo
KTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKLSAg
ICB7Ci0gICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICAgICAgY2Fpcm9HbHlwaHNb
aV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OwotICAgICAgICAgICAgeE9mZnNl
dCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwotICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNl
c1tpXS5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNhaXJvX3NjYWxlZF9mb250
X3QqIHNjYWxlZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKTsKLSAgICBk
b3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwot
Ci0gICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQotICAgICAgICBmb250U21vb3Ro
aW5nID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwotCi0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3R2x5cGhzKG1fcGxh
dGZvcm1Db250ZXh0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUpLAotICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2Nh
bGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCi0gICAg
ICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAotICAgICAgICBmb250U21vb3RoaW5nKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aW1hZ2UuZHJhdyhncmFwaGljc0NvbnRleHQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpk
cmF3UGxhdGZvcm1JbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgp
LmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXR0ZXJuKE5hdGl2ZUlt
YWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwotICAgIENhaXJvOjpkcmF3UGF0dGVybihtX3BsYXRm
b3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBJbnRTaXplKGltYWdlU2l6
ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRl
LnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdMaW5lKG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEs
IHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZVVuZGVybGluZXMpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1D
b250ZXh0LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgQ2Fpcm86OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAg
Q2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENv
bG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0aChj
b25zdCBQYXRoJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJv
OjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCB3aWR0aCwgY29sb3IpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6
ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdHMsIHdpZHRoLCBjb2xvcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzYXZlKCkKLXsKLSAgICBDYWlybzo6
c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpyZXN0b3JlKCkKLXsKLSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwg
ZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKG1fcGxhdGZvcm1Db250ZXh0LCB4LCB5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykKLXsKLSAgICBDYWlybzo6cm90YXRlKG1fcGxhdGZvcm1Db250ZXh0LCBhbmds
ZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ2Fpcm86OnNjYWxlKG1fcGxhdGZvcm1Db250
ZXh0LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6Y29uY2F0
Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQot
ewotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0p
OwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCi17Ci0gICAgcmV0dXJuIENhaXJv
OjpTdGF0ZTo6Z2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsK
LSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCwgb3Bh
Y2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjplbmRUcmFuc3BhcmVu
Y3lMYXllcigpCi17Ci0gICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1D
b250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwKG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBPdXQoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwg
cGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBDYWlybzo6Y2xpcFBhdGgo
bV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQotSW50UmVjdCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBCb3VuZHMoKQotewotICAgIHJldHVybiBDYWlybzo6U3Rh
dGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBpZiAoYXV0byBuYXRpdmVJbWFnZSA9
IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICBD
YWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRleHQsIG5hdGl2ZUltYWdlLT5w
bGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0
UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICBy
ZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
LCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxv
YXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFl
ZGU1ZDJhN2U5OGRiYmJlYTI2N2FiMDU0YzBkZmYxNDI1NmNmMmIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShD
QUlSTykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotdHlwZWRlZiBzdHJ1
Y3QgX2NhaXJvIGNhaXJvX3Q7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZv
cm1Db250ZXh0Q2Fpcm87Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyBmaW5hbCA6
IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVh
dGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFj
dG9yeShjYWlyb190Kik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3ND
b250ZXh0JiwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mKTsKLSAgICBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8oR3JhcGhpY3NDb250ZXh0JiwgY2Fpcm9fdCopOwotICAgIHZpcnR1YWwgfkdyYXBoaWNz
Q29udGV4dEltcGxDYWlybygpOwotCi0gICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBv
dmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0
aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9p
ZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3Qg
R2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd05hdGl2ZUlt
YWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxv
YXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZv
aWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJy
aWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRl
RGV2aWNlU2NhbGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChj
b25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAg
dm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25z
dCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYK
LSAgICAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwot
Ci0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3Jh
cGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9vd25lZFBsYXRmb3JtQ29udGV4
dDsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7Ci0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKaW5kZXggZDM3ZmI2NjM3M2FhYzkzMmE3
MTQ4MjUzNDg1ZjMzNDkxMTg2ODVkNC4uYTU4ZGRiOTY4Mjc1MmU3OTUwMGYzMjJiYzUzY2YwNGQ2
MDcwM2M3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMzUsNyAr
MzUsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JUcmFuc2ZlckZ1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgogI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggM2JlNzU1NjllOTcz
YzJiMTY4OTlhNTA3NjI3NWY1MjNmYTgwNzFlYS4uOWI1YzBhZDA3NDQ1MTg4MGRlZmRkM2M0ODky
ZTRmNzNjMjg2NDJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNs
dWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC01MSw3ICs1MSw3IEBA
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kKGNvbnN0IFBhcmFtZXRlcnMmCiAKICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRl
eHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3ND
b250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9y
bUNvbnRleHQpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENh
aXJvPihtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCmluZGV4IDgxZDE1
OGUyZGZmN2U1YmYwM2M3YjY1ZDAzNmRkYTg5OWYwZjkwMWYuLjJhMTllNDdhOWFhY2VjMjA5NmE2
MGU5N2UzYjVjNDg3NDUzZGFhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1
ZGUgIkNhaXJvVW5pcXVlUHRyLmgiCiAjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgPG1hdGguaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgpAQCAtNDIxLDcgKzQyMSw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKIAogICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpIHsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGdjKEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ2MobV9w
YXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdjKTsKICAgICB9CiAKQEAg
LTQ1MCw3ICs0NTAsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQobV9wYXRoLmdldCgp
KTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKaW5kZXggZWYzYWMyZTEzNzFiOGUxYzkwN2RhMTI0MmE3NmNlNmU2
MTQ3ODcwZS4uZmRiMWFlMDY1NzRiZGY4MTVjNjE2NzBlMDZjYjY3N2EwNzIzODlhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcApAQCAtNTUsMTcgKzU1LDEyIEBAIHN0YXRpYyB2b2lkIHNldENHRmlsbENv
bG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgQ0dDb250
ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsK
IH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENv
bG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsKLX0KLQogaW5saW5lIENHQWZmaW5l
VHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmIGNvbnRleHQpCiB7CiAgICAg
cmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KENHQ29udGV4dEdldENUTShjb250ZXh0KSwg
Q0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0QmFzZUNUTShjb250ZXh0KSkpOwog
fQogCi1zdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29udmVydEludGVycG9sYXRpb25RdWFs
aXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3N0YXRpYyBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBx
dWFsaXR5KQogewogICAgIHN3aXRjaCAocXVhbGl0eSkgewogICAgIGNhc2Uga0NHSW50ZXJwb2xh
dGlvbkRlZmF1bHQ6CkBAIC04Miw2ICs3NywzNCBAQCBzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxp
dHkgY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcQog
ICAgIHJldHVybiBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDsKIH0KIAorc3RhdGljIENH
SW50ZXJwb2xhdGlvblF1YWxpdHkgY2dJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9u
UXVhbGl0eSBxdWFsaXR5KQoreworICAgIHN3aXRjaCAocXVhbGl0eSkgeworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0
aW9uRGVmYXVsdDsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9s
YXRlOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk5vbmU7CisgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkxv
dzsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgIHJldHVy
biBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkhpZ2g6CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uSGlnaDsKKyAgICB9CisgICAg
cmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OworfQorCitzdGF0aWMgQ0dUZXh0RHJhd2lu
Z01vZGUgY2dUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKK3sKKyAg
ICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6RmlsbCk7CisgICAg
Ym9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3aW5nTW9kZTo6U3Ryb2tlKTsKKyAg
ICBpZiAoZmlsbCAmJiBzdHJva2UpCisgICAgICAgIHJldHVybiBrQ0dUZXh0RmlsbFN0cm9rZTsK
KyAgICBpZiAoZmlsbCkKKyAgICAgICAgcmV0dXJuIGtDR1RleHRGaWxsOworICAgIHJldHVybiBr
Q0dUZXh0U3Ryb2tlOworfQorCiBzdGF0aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUo
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
CiB7CiAgICAgc3dpdGNoIChibGVuZE1vZGUpIHsKQEAgLTE1NiwzNSArMTc5LDM5IEBAIHN0YXRp
YyBDR0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9kZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNCiAgICAgcmV0dXJuIGtDR0JsZW5kTW9kZU5vcm1hbDsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0NvbnRleHRSZWYgY2dDb250ZXh0
KQorR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
ZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoY2dDb250ZXh0KTsKICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUu
Ci0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAgIHNldFBsYXRmb3Jt
U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VUaGlja25l
c3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIG5v
dCBncmVhdCwgYmVjYXVzZSBpdCBzZXRzIGl0IGJhY2sgb24gdGhlIEdyYXBoaWNzQ29udGV4dCwg
YnV0IG1heWJlIGl0IGRvZXNuJ3QgbWF0dGVyPworICAgIHNldEZpbGxDb2xvcihmaWxsQ29sb3Io
KSk7CisgICAgc2V0U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgc2V0U3Ryb2tlVGhp
Y2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKKyAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkgPSBjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xh
dGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDRzo6fkdyYXBoaWNzQ29udGV4
dENHKCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1DR0NvbnRleHRSZWYgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6
aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworQ0dD
b250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewot
ICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICBBU1NFUlQobV9kYXRhLT5tX2Nn
Q29udGV4dCk7CiAgICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUo
KTsKIAogICAgIC8vIE5vdGU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gdGhpcyBj
bGFzcyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0cmEKICAg
ICAvLyBzYXZlIG9mIHRoZSBzZWNvbmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ0cuaCkuCkBAIC0xOTIsMTAgKzIxOSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiAgICAgbV9kYXRhLT5zYXZlKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmUoKTsKIAogICAgIC8vIE5vdGU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4g
dGhpcyBjbGFzcyBpbXBsZW1lbnRhdGlvbiwgc2luY2Ugd2Ugd2FudCB0byBhdm9pZCB0aGUgZXh0
cmEKICAgICAvLyByZXN0b3JlIG9mIHRoZSBzZWNvbmRhcnkgY29udGV4dCAoaW4gR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCkuCkBAIC0yMDQsMTAgKzIzMCw5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiAgICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBp
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1h
Z2UoKTsKIAogI2lmICFMT0dfRElTQUJMRUQKICAgICBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwpAQCAtMjk4LDcgKzMyMyw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvCiAKICAgICBhdXRvIG9sZENvbXBvc2l0ZU9wZXJhdG9yID0gY29tcG9zaXRlT3Bl
cmF0aW9uKCk7CiAgICAgYXV0byBvbGRCbGVuZE1vZGUgPSBibGVuZE1vZGVPcGVyYXRpb24oKTsK
LSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihv
cHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAg
Ly8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApCiAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QueCgpLCBh
ZGp1c3RlZERlc3RSZWN0LnkoKSk7CkBAIC0zMjUsMTAgKzM1MCwxMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2Us
IGNvbnN0IEZsbwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIENHQ29udGV4dFNl
dFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB3YXNBbnRpYWxpYXNlZCk7CiAjZW5kaWYKLSAgICAg
ICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9s
ZEJsZW5kTW9kZSk7CisgICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvbGRDb21wb3NpdGVP
cGVyYXRvciwgb2xkQmxlbmRNb2RlKTsKICAgICB9CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oSW1h
Z2VzLCBzdHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlICIgPDwgaW1h
Z2UuZ2V0KCkgPDwgIiBzaXplICIgPDwgaW1hZ2VTaXplIDw8ICIgaW50byAiIDw8IGRlc3RSZWN0
IDw8ICIgdG9vayAiIDw8IChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWlsbGlz
ZWNvbmRzKCkgPDwgIm1zIik7CisgICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8
ICJHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlICIgPDwgaW1hZ2UuZ2V0KCkgPDwg
IiBzaXplICIgPDwgaW1hZ2VTaXplIDw8ICIgaW50byAiIDw8IGRlc3RSZWN0IDw8ICIgdG9vayAi
IDw8IChNb25vdG9uaWNUaW1lOjpub3coKSAtIHN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkgPDwg
Im1zIik7CiB9CiAKIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywg
Q0dDb250ZXh0UmVmIGNvbnRleHQpCkBAIC0zMzksNyArMzY0LDcgQEAgc3RhdGljIHZvaWQgZHJh
d1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBD
R0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIDAsIC1oZWlnaHQpOwogI2VuZGlmCi0gICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZs
b2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpLCBoZWlnaHQpKSwgaW1hZ2UpOwor
ICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0
KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UpLCBoZWlnaHQpKSwgaW1hZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBwYXR0ZXJuUmVsZWFzZUNh
bGxiYWNrKHZvaWQqIGluZm8pCkBAIC0zNDcsMTYgKzM3MiwxOCBAQCBzdGF0aWMgdm9pZCBwYXR0
ZXJuUmVsZWFzZUNhbGxiYWNrKHZvaWQqIGluZm8pCiAgICAgY2FsbE9uTWFpblRocmVhZChbaW1h
Z2UgPSBhZG9wdENGKHN0YXRpY19jYXN0PENHSW1hZ2VSZWY+KGluZm8pKV0geyB9KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQor
ICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJu
OwogCisgICAgYXV0byBpbWFnZSA9IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKTsKKwogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dCwgZGVzdFJlY3QpOwogCi0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24o
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBz
ZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25z
LmJsZW5kTW9kZSgpKTsKIAogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0
UmVjdC54KCksIGRlc3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICBDR0NvbnRl
eHRTY2FsZUNUTShjb250ZXh0LCAxLCAtMSk7CkBAIC00MjMsMTYgKzQ1MCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGCiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEg
c3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIC8vIEZJWE1FOiB0aGlzIGZ1
bmN0aW9uIGRvZXMgbm90IGhhbmRsZSBwYXR0ZXJucyBhbmQgZ3JhZGllbnRzIGxpa2UgZHJhd1Bh
dGggZG9lcywgaXQgcHJvYmFibHkgc2hvdWxkLgogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkp
OwogCkBAIC00NTgsMTkgKzQ3NywxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB9CiAKIC8vIFRo
aXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ry
b2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgZmxvYXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CiAgICAgYm9vbCBpc1ZlcnRp
Y2FsTGluZSA9IChwb2ludDEueCgpICsgdGhpY2tuZXNzID09IHBvaW50Mi54KCkpOwogICAgIGZs
b2F0IHN0cm9rZVdpZHRoID0gaXNWZXJ0aWNhbExpbmUgPyBwb2ludDIueSgpIC0gcG9pbnQxLnko
KSA6IHBvaW50Mi54KCkgLSBwb2ludDEueCgpOwpAQCAtNTI2LDMxICs1MzcsMTUgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNv
bnRleHQsIHRydWUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFBhdGggcGF0aDsK
ICAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7CiAgICAgZHJhd1BhdGgocGF0aCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+YXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShj
Z0NvbnRleHQpKTsKIApAQCAtNTY1LDE2ICs1NjAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlTdHJva2VQYXR0ZXJuKCkKICAgICBDR0NvbnRleHRTZXRTdHJva2VQYXR0ZXJuKGNnQ29u
dGV4dCwgcGxhdGZvcm1QYXR0ZXJuLmdldCgpLCAmcGF0dGVybkFscGhhKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5
RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNl
clRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkp
OwogCkBAIC02MTYsMTUgKzYwMywxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY2FsY3VsYXRlRHJh
d2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBDR1BhdAogICAgIHJl
dHVybiBzaG91bGRGaWxsIHx8IHNob3VsZFN0cm9rZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkg
fHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5kcmF3UGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9
IG1fc3RhdGU7CkBAIC02NTQsMTYgKzYzNiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtNzE4
LDE1ICs2OTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogCkBAIC03OTQsMTYgKzc2Niw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUu
ZmlsbEdyYWRpZW50KSB7CkBAIC04MzMsNyArNzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0
dGVybikKICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwogCi0gICAgYm9vbCBkcmF3T3duU2hh
ZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFt
X3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBm
b3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgp
ID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAm
JiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25T
aGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTg0NiwyMyArODEw
LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZp
bGxDb2xvciA9IGZpbGxDb2xvcigpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikK
ICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3
T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygp
ICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93
Qmx1ciBmb3IgY2FudmFzIHlldC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFk
b3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRy
YXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTg4MSwy
MCArODM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29u
dGV4dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
RmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAog
ICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNv
bnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVk
Q29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAg
Ym9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRl
eHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8v
IFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05MjQsMTYgKzg3NSw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVS
ZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgUGF0aCBwYXRoOwpAQCAtOTUxLDcg
Kzg5NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0CiAgICAgc2V0RmlsbENvbG9yKGNvbG9y
KTsKIAogICAgIC8vIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCkgYXNzdW1lcyB0aGF0IHRoZSBl
ZGdlcyBvZiByZWN0IGFyZSBjbGlwcGVkIG91dCwgc28gd2Ugb25seSBjYXJlIGFib3V0IHNoYWRv
d3MgY2FzdCBhcm91bmQgaW5zaWRlIHRoZSBob2xlLgotICAgIGJvb2wgZHJhd093blNoYWRvdyA9
ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVu
ZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJy
ZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAg
aWYgKGRyYXdPd25TaGFkb3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAg
LTk3MCw1MiArOTEzLDI4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0CiAgICAgc2V0RmlsbENv
bG9yKG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXAoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCk7CiAgICAgbV9kYXRhLT5jbGlwKHJlY3QpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIC8vIEZJWE1FOiBVc2luZyBDR1JlY3RJbmZpbml0ZSBpcyBtdWNoIGZhc3RlciB0aGFu
IGdldHRpbmcgdGhlIGNsaXAgYm91bmRpbmcgYm94LiBIb3dldmVyLCBkdWUKICAgICAvLyB0byA8
cmRhcjovL3Byb2JsZW0vMTI1ODQ0OTI+LCBDR1JlY3RJbmZpbml0ZSBjYW4ndCBiZSB1c2VkIHdp
dGggYW4gYWNjZWxlcmF0ZWQgY29udGV4dCB0aGF0CiAgICAgLy8gaGFzIGNlcnRhaW4gdHJhbnNm
b3JtcyB0aGF0IGFyZW4ndCBqdXN0IGEgdHJhbnNsYXRpb24gb3IgYSBzY2FsZS4gQW5kIGR1ZSB0
byA8cmRhcjovL3Byb2JsZW0vMTQ2MzQ0NTM+CiAgICAgLy8gd2UgY2Fubm90IHVzZSBpdCBpbiBm
b3IgYSBwcmludGluZyBjb250ZXh0IGVpdGhlci4KICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGN0bSA9IGdldENUTSgpOwotICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRl
eHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAoIWlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CisgICAgYm9v
bCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0
KCkpICE9IGtDR0NvbnRleHRUeXBlUERGICYmIChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsKICAgICBDR1Jl
Y3QgcmVjdHNbMl0gPSB7IGNhblVzZUNHUmVjdEluZmluaXRlID8gQ0dSZWN0SW5maW5pdGUgOiBD
R0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpLCByZWN0IH07CiAg
ICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRleHRB
ZGRSZWN0cyhwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdHMsIDIpOwogICAgIENHQ29udGV4dEVPQ2xp
cChwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENHQ29udGV4dEFkZFJlY3QocGxhdGZvcm1Db250ZXh0KCksIENH
Q29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwogICAgIGlmICgh
cGF0aC5pc0VtcHR5KCkpCkBAIC0xMDIzLDE2ICs5NDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogICAgIENHQ29udGV4dEVPQ2xpcChwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LCBDR1JlY3RaZXJvKTsKQEAgLTEwNDksMjMgKzk2MCwxNCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiAg
ICAgbV9kYXRhLT5jbGlwKHBhdGgpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xp
cEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzKCkg
Y29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJv
dW5kcygpOwotCiAgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoQ0dDb250ZXh0R2V0Q2xpcEJv
dW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgIHNhdmUoKTsKIApAQCAtMTA3NSwxMiArOTc3
LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93
blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxh
dGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxh
eWVyKGNvbnRleHQpOwpAQCAtMTA4OCwxMSArOTg3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQogICAgIHJlc3RvcmUoKTsKIH0KIAotYm9v
bCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQogc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBDR0Zsb2F0JiB4T2Zmc2V0
LCBDR0Zsb2F0JiB5T2Zmc2V0KQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRG
T1JNKFdJTikKQEAgLTExMDAsNyArOTk0LDcgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZz
ZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogICAg
IFVOVVNFRF9QQVJBTSh4T2Zmc2V0KTsKICAgICBVTlVTRURfUEFSQU0oeU9mZnNldCk7CiAjZWxz
ZQotICAgIGlmIChjb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCisgICAgaWYgKGNvbnRl
eHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAoQ0dDb250ZXh0RHJhd3NXaXRoQ29ycmVjdFNoYWRvd09mZnNl
dHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCkBAIC0xMTIxLDIxICsxMDE1LDIyIEBAIHN0
YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyB2b2lkIHNldENHU2hhZG93KGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250
ZXh0KCk7CisKKyAgICBpZiAob2Zmc2V0LmlzWmVybygpICYmICFibHVyKSB7CisgICAgICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVaZXJvLCAwLCAwKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0gICAgCiAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGF2b2lkIHRoZSBzaGFkb3cgc2V0dXAgY29z
dCB3aGVuIHdlIGtub3cgd2UnbGwgcmVuZGVyIHRoZSBzaGFkb3cgb3Vyc2VsdmVzLgogCiAgICAg
Q0dGbG9hdCB4T2Zmc2V0ID0gb2Zmc2V0LndpZHRoKCk7CiAgICAgQ0dGbG9hdCB5T2Zmc2V0ID0g
b2Zmc2V0LmhlaWdodCgpOwogICAgIENHRmxvYXQgYmx1clJhZGl1cyA9IGJsdXI7Ci0gICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAotICAgIGlmICghbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgIGlmICghZ3JhcGhpY3NDb250ZXh0LnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkpIHsKICAgICAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gdXNl
clRvQmFzZUNUTSA9IGdldFVzZXJUb0Jhc2VDVE0oY29udGV4dCk7CiAKICAgICAgICAgQ0dGbG9h
dCBBID0gdXNlclRvQmFzZUNUTS5hICogdXNlclRvQmFzZUNUTS5hICsgdXNlclRvQmFzZUNUTS5i
ICogdXNlclRvQmFzZUNUTS5iOwpAQCAtMTE1Niw3ICsxMDUxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBi
bHVyLCBjb24KICAgICAvLyBFeHRyZW1lICJibHVyIiB2YWx1ZXMgY2FuIG1ha2UgdGV4dCBkcmF3
aW5nIGNyYXNoIG9yIHRha2UgY3JhenkgbG9uZyB0aW1lcywgc28gY2xhbXAKICAgICBibHVyUmFk
aXVzID0gc3RkOjptaW4oYmx1clJhZGl1cywgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KDEwMDAu
MCkpOwogCi0gICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoKnRoaXMsIHhP
ZmZzZXQsIHlPZmZzZXQpOworICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVk
KGdyYXBoaWNzQ29udGV4dCwgeE9mZnNldCwgeU9mZnNldCk7CiAKICAgICAvLyBDaGVjayBmb3Ig
YW4gaW52YWxpZCBjb2xvciwgYXMgdGhpcyBtZWFucyB0aGF0IHRoZSBjb2xvciB3YXMgbm90IHNl
dCBmb3IgdGhlIHNoYWRvdwogICAgIC8vIGFuZCB3ZSBzaG91bGQgdGhlcmVmb3JlIGp1c3QgdXNl
IHRoZSBkZWZhdWx0IHNoYWRvdyBjb2xvci4KQEAgLTExNjYsNTAgKzEwNjEsNTMgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCBibHVyLCBjb24KICAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNv
bnRleHQsIENHU2l6ZU1ha2UoeE9mZnNldCwgeU9mZnNldCksIGJsdXJSYWRpdXMsIGNhY2hlZENH
Q29sb3IoY29sb3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1T
aGFkb3coKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyBmbGFncykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBD
R1NpemVaZXJvLCAwLCAwKTsKLX0KKyAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KSkKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIHN0ZDo6bWF4KHN0YXRl
LnN0cm9rZVRoaWNrbmVzcywgMC5mKSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8v
IE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwt
PnNldE1pdGVyTGltaXQobGltaXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKQor
ICAgICAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRD
R0NvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKSk7CiAKLSAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0
KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKQorICAgICAgICBzZXRDR0ZpbGxD
b2xvcihjb250ZXh0LCBzdGF0ZS5maWxsQ29sb3IpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRl
eHQsIHN0YXRlLmFscGhhKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
bGVhclJlY3Qocik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGZsYWdzLmNvbnRh
aW5zQW55KHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkJsZW5kTW9kZUNoYW5nZSB9KSkKKyAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsIHNlbGVjdENHQmxlbmRNb2RlKHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpKTsKIAotICAgIENHQ29udGV4dENsZWFyUmVjdChw
bGF0Zm9ybUNvbnRleHQoKSwgcik7CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRU
ZXh0RHJhd2luZ01vZGUoY29udGV4dCwgY2dUZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdp
bmdNb2RlKSk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhjb250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOworCisgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpCisg
ICAgICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNvbnRleHQsIHN0YXRlLnNob3Vs
ZFNtb290aEZvbnRzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpCisgICAgICAgIENHQ29udGV4
dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQsIGNnSW50ZXJwb2xhdGlvblF1YWxpdHko
c3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAgICBzZXRDR1No
YWRvdygqdGhpcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3Rh
dGUuc2hhZG93Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQocGxh
dGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
KQoreworICAgIENHQ29udGV4dENsZWFyUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcik7Cit9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CkBAIC0xMjY5
LDE2ICsxMTY3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChj
b250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBj
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGNhcCkgewogICAgIGNhc2UgQnV0dENhcDoKICAgICAg
ICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQp
OwpAQCAtMTI5MiwxNiArMTE4Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2Fw
KExpbmVDYXAgY2FwKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRh
c2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFz
aE9mZnNldCA8IDApIHsKICAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCkBAIC0xMzEyLDE2ICsxMTk0LDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogICAgIENHQ29udGV4dFNldExpbmVEYXNoKHBsYXRmb3Jt
Q29udGV4dCgpLCBkYXNoT2Zmc2V0LCBkYXNoZXMuZGF0YSgpLCBkYXNoZXMuc2l6ZSgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihqb2luKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIHN3aXRjaCAoam9pbikgewogICAgIGNhc2UgTWl0ZXJKb2luOgogICAgICAg
ICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRl
cik7CkBAIC0xMzM1LDk0ICsxMjA5LDQzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBqb2luKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgY2xp
cFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShz
aXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFNjYWxlQ1RNKHBs
YXRmb3JtQ29udGV4dCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogICAgIG1fZGF0
YS0+c2NhbGUoc2l6ZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUo
ZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUoZmxvYXQgYW5nbGUp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnJvdGF0ZShhbmdsZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSb3RhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCks
IGFuZ2xlKTsKICAgICBtX2RhdGEtPnJvdGF0ZShhbmdsZSk7CiAgICAgbV9kYXRhLT5tX3VzZXJU
b0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBDR0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIG1f
ZGF0YS0+dHJhbnNsYXRlKHgsIHkpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zv
cm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENvbmNhdENUTShwbGF0Zm9ybUNvbnRl
eHQoKSwgdHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRD
VE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFNl
dENUTShwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPnNldENUTSh0
cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJ
ZGVudGl0eSA9IGZhbHNlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Ojpn
ZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRyYW5z
Zm9ybSBHcmFwaGljc0NvbnRleHRDRzo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRl
U2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJu
IG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Ci0KICAgICAvLyBUaGUgQ1RNIHVzdWFsbHkg
aW5jbHVkZXMgdGhlIGRldmljZVNjYWxlRmFjdG9yIGV4Y2VwdCBpbiBXZWJLaXQgMSB3aGVuIHRo
ZQogICAgIC8vIGNvbnRlbnQgaXMgbm9uLWNvbXBvc2l0ZWQsIHNpbmNlIHRoZSBzY2FsZSBmYWN0
b3IgaXMgaW50ZWdyYXRlZCBhdCBhIGxvd2VyCiAgICAgLy8gbGV2ZWwuIFRvIGd1YXJhbnRlZSB0
aGUgZGV2aWNlU2NhbGUgaXMgaW5jbHVkZWQsIHdlIGNhbiB1c2UgdGhpcyBDRyBBUEkuCkBAIC0x
NDMyLDE0ICsxMjU1LDggQEAgQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
KEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiAgICAgcmV0dXJuIENHQ29u
dGV4dEdldENUTShwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGlu
Z01vZGUgcm91bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dENHOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5n
TW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVj
dDsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZp
Y2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIC8vIEl0IGlzIG5vdCBlbm91Z2gg
anVzdCB0byByb3VuZCB0byBwaXhlbHMgaW4gZGV2aWNlIHNwYWNlLiBUaGUgcm90YXRpb24gcGFy
dCBvZiB0aGUKICAgICAvLyBhZmZpbmUgdHJhbnNmb3JtIG1hdHJpeCB0byBkZXZpY2Ugc3BhY2Ug
Y2FuIG1lc3Mgd2l0aCB0aGlzIGNvbnZlcnNpb24gaWYgd2UgaGF2ZSBhCiAgICAgLy8gcm90YXRp
bmcgaW1hZ2UgbGlrZSB0aGUgaGFuZHMgb2YgdGhlIHdvcmxkIGNsb2NrIHdpZGdldC4gV2UganVz
dCBuZWVkIHRoZSBzY2FsZSwgc28KQEAgLTE0ODIsMjcgKzEyOTksMTEgQEAgRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW8KICAgICByZXR1cm4gRmxvYXRSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRM
b3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBEYXNoQXJyYXkg
d2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQoMCk7Ci0gICAgd2lkdGhzLmFwcGVuZChyZWN0Lndp
ZHRoKCkpOwotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdo
dCgpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5n
LCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5z
aXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcs
IGRvdWJsZUxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENvbG9yIGxvY2Fs
U3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CiAKICAgICBGbG9hdFJlY3QgYm91bmRzID0gY29t
cHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChGbG9hdFJlY3QocG9pbnQs
IEZsb2F0U2l6ZSh3aWR0aHMubGFzdCgpLCB0aGlja25lc3MpKSwgcHJpbnRpbmcsIGxvY2FsU3Ry
b2tlQ29sb3IpOwpAQCAtMTU1NiwxNiArMTM1Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
CiAgICAgICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBmaWxsQ29sb3IoKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGlu
aywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNl
dFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJHcmFwaGljc0NvbnRleHQ6OnNldFVS
TEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUgd2l0aCByZWNvcmRpbmcgY29udGV4dHMu
Iik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUgZm9yIGRpc3BsYXkgbGlzdHMuCi0gICAgfQot
CiAgICAgUmV0YWluUHRyPENGVVJMUmVmPiB1cmxSZWYgPSBsaW5rLmNyZWF0ZUNGVVJMKCk7CiAg
ICAgaWYgKCF1cmxSZWYpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NzksMzYgKzEzNzIsOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiAgICAgQ0dQREZDb250ZXh0U2V0VVJMRm9yUmVjdChjb250
ZXh0LCB1cmxSZWYuZ2V0KCksIENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKHJlY3QsIENHQ29u
dGV4dEdldENUTShjb250ZXh0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IG1vZGUp
Ci17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotCi0gICAgQ0dJbnRlcnBvbGF0
aW9uUXVhbGl0eSBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci0gICAgc3dpdGNo
IChtb2RlKSB7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAgICAg
ICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBx
dWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbk5vbmU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9s
YXRpb25Mb3c7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
Ok1lZGl1bToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25NZWRpdW07Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAg
IHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uSGlnaDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBx
dWFsaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQo
Ym9vbCBpc0xheWVyQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBTaG91bGQgYmUgY2FsbGVkIGZvciBDQSBD
b250ZXh0LgogICAgIEFTU0VSVChtX2RhdGEpOwogICAgIGlmIChpc0xheWVyQ29udGV4dCkKQEAg
LTE2MTcsMTI5ICsxMzgyLDI4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0Rmxh
Z3MgJj0gfklzTGF5ZXJDR0NvbnRleHQ7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OmlzQ0FMYXllckNv
bnRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2RhdGEgJiYgKG1fZGF0YS0+bV9jb250ZXh0
RmxhZ3MgJiBJc0xheWVyQ0dDb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBT
aG91bGQgYmUgY2FsbGVkIGZvciBDQSBDb250ZXh0LgotICAgIEFTU0VSVChtX2RhdGEpOwogICAg
IGlmIChpc0FjY2VsZXJhdGVkKQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzIHw9IElz
QWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiAgICAgZWxzZQogICAgICAgICBtX2RhdGEtPm1fY29udGV4
dEZsYWdzICY9IH5Jc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIHJldHVybiBtX2ltcGwtPnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsKLQotICAgIHJldHVybiBtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNBY2NlbGVy
YXRlZENHQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4
dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0gICAgCi0gICAgYm9vbCBmaWxsID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6
OkZpbGwpOwotICAgIGJvb2wgc3Ryb2tlID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6
OlN0cm9rZSk7Ci0gICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQotICAgICAgICBDR0NvbnRleHRTZXRU
ZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dEZpbGxTdHJva2UpOwotICAgIGVsc2UgaWYg
KGZpbGwpCi0gICAgICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dU
ZXh0RmlsbCk7Ci0gICAgZWxzZSBpZiAoc3Ryb2tlKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0
RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dFN0cm9rZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgc2V0Q0dTdHJva2VDb2xvcihwbGF0Zm9ybUNv
bnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0KLSAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgocGxhdGZvcm1Db250ZXh0KCksIHN0ZDo6
bWF4KHRoaWNrbmVzcywgMC5mKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLQotICAgIHNldENHRmlsbENvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29s
IGVuYWJsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0
U2hvdWxkQW50aWFsaWFzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sIGVuYWJsZSkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0U2hvdWxkU21v
b3RoRm9udHMocGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRBbHBoYShwbGF0Zm9ybUNvbnRleHQoKSwgYWxw
aGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVu
ZE1vZGUpCitSZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENHOjpyZW5kZXJpbmdNb2RlKCkg
Y29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShwbGF0Zm9ybUNvbnRleHQoKSwgc2VsZWN0Q0dCbGVuZE1vZGUoY29tcG9zaXRlT3BlcmF0
b3IsIGJsZW5kTW9kZSkpOworICAgIHJldHVybiBtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNB
Y2NlbGVyYXRlZENHQ29udGV4dCA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwogCiAgICAgLy8g
Q29yZUdyYXBoaWNzIGV4cGVjdHMgdGhlIGJhc2UgQ1RNIG9mIGEgSGlEUEkgY29udGV4dCB0byBo
YXZlIHRoZSBzY2FsZSBmYWN0b3IgYXBwbGllZCB0byBpdC4KICAgICAvLyBGYWlsaW5nIHRvIGNo
YW5nZSB0aGUgYmFzZSBsZXZlbCBDVE0gd2lsbCBjYXVzZSBjZXJ0YWluIENHIGZlYXR1cmVzLCBz
dWNoIGFzIGZvY3VzIHJpbmdzLApAQCAtMTc0NywxMyArMTQxMSw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCiAgICAgQ0dDb250ZXh0U2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgQ0dBZmZp
bmVUcmFuc2Zvcm1TY2FsZShDR0NvbnRleHRHZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgpKSwg
ZGV2aWNlU2NhbGVGYWN0b3IsIGRldmljZVNjYWxlRmFjdG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0Rmls
bEVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xpZCBjb2xvcnMuCiAgICAgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgZmlsbEVs
bGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBAIC0xNzY0LDEzICsxNDIzLDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQog
ICAgIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0KGNvbnRleHQsIGVsbGlwc2UpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICAv
LyBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3Jz
LgogICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVy
bikgewogICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc4MSwxOCAr
MTQzNSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0
KGNvbnRleHQsIGVsbGlwc2UpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJ
bnRlcm5hbExpbmtzKCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6OnN1cHBvcnRzSW50
ZXJuYWxMaW5rcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0RGVzdGlu
YXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIEZsb2F0UmVjdCByZWN0ID0gZGVzdFJlY3Q7
CkBAIC0xODAyLDE1ICsxNDUxLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0
aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYKICAgICBDR1BE
RkNvbnRleHRTZXREZXN0aW5hdGlvbkZvclJlY3QoY29udGV4dCwgbmFtZS5jcmVhdGVDRlN0cmlu
ZygpLmdldCgpLCB0cmFuc2Zvcm1lZFJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKLQogICAgIENHUG9pbnQgdHJhbnNmb3JtZWRQb2ludCA9IENHUG9pbnRB
cHBseUFmZmluZVRyYW5zZm9ybShwb3NpdGlvbiwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKTsK
ICAgICBDR1BERkNvbnRleHRBZGREZXN0aW5hdGlvbkF0UG9pbnQoY29udGV4dCwgbmFtZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCB0cmFuc2Zvcm1lZFBvaW50KTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCmlu
ZGV4IDI1YTA4NjZlMmYzODY5ZTFlN2UxZjllNjYyNmJlYzIwNWJiMGRjNzUuLjVlMjA2NzY5ZWJm
ZjhhZDkxMDI5MTkzNjIyY2ZkMWMyZWM0ZjI4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaApAQCAtNzIsNSAr
NzIsMTA4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NhdmVBbmRSZXN0b3JlOwogfTsKIAorY2xh
c3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q0cgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYpOworCisj
aWYgUExBVEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENHKEhEQywgYm9vbCBoYXNBbHBo
YSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCisjZW5kaWYKKworICAgIH5HcmFw
aGljc0NvbnRleHRDRygpOworCisgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICBDR0NvbnRleHRSZWYgcGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2
b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgZmlu
YWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisKKyAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgYXBwbHlG
aWxsUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IGZpbmFsOworCisgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3Rvcikg
ZmluYWw7CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0
aCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7CisKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Cisg
ICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKworICAgIElu
dFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApIGZpbmFsOworICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxv
YXQgZGFzaE9mZnNldCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmlu
YWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4o
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
OworCisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIHJv
dGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7CisgICAgdm9pZCB0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkgZmluYWw7CisKKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSBmaW5hbDsKKworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxl
ID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRS
ZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0g
Um91bmRBbGxTaWRlcykgZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9y
JikgZmluYWw7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25z
dCBDb2xvciYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKwor
ICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29u
c3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0
aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOwor
ICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
RmxvYXRQb2ludCYpIGZpbmFsOworCisgICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisK
KyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWw7CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsK
K307CisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCmluZGV4IDVmZmNl
MTJmZWEyMTlmMzEwMGE4YmViOTYyMzMwODA4NzhjYTdiYTYuLjY4NjVmMGJkNDFiYjQ4NDYwZGJh
MWY0ZjZiYTU4MDc4NGNjYWVlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNn
Q29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihjZ0NvbnRleHQuZ2V0KCkpOwog
CiAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEobnVsbHB0ciwgZGF0YSwgbnVtQnl0ZXMsIFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90KSB7CiAgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4
IGNlZDNhZGJhMmI0YzEyZjBlODIzYTA4OGQyNWZjMTVhYTg4OWE0MjcuLmYzM2RjZTkxNmRlYjM2
ZTliMjUyYTI1YjgyODRlZDVkMWE4YWIxZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRl
ICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjQ0LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29u
dGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1QYXRoKCkpOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFw
aGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29u
dGV4dCk7CiAKICAgICBib29sIGhpdFN1Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2lu
dChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxv
YXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBo
aWNzQ29udGV4dCYpPiYgc3Ryb2sKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRm
b3JtUGF0aCgpKTsKIAogICAgIGlmIChzdHJva2VTdHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBzdHJva2VTdHlsZUFw
cGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQx
YTg5N2ZhYTNlNWRmZGFiMjNkZjgxMzQuLjA1YTM5MTY1NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRk
MDg4YzhkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0dGVybkNHLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQzLDcgKzQzLDcgQEAgc3RhdGljIHZvaWQgcGF0dGVy
bkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQogICAgIGlmICghcGxh
dGZvcm1JbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGlj
c0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscygKKyAgICBDR1JlY3QgcmVjdCA9
IEdyYXBoaWNzQ29udGV4dENHKGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCiAgICAgICAg
IEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VH
ZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4
dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCBlMjlh
ZWNkZmJmZTY4MDA2N2ZjYmExOTM5ZmFlNTFlZGM4NzkyZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3
OGFiY2E4N2JlNDIyZmI1ODFjZjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTIzLDcgKzIz
LDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKIAotI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCmluZGV4IDE0MjFlYjkwZDdhNDlk
MWU0ODI0YjVhYzg5Njg4MTNhMzA1NDNmN2QuLjM4OGFmY2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5
NjdmMGU1MzU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCkBAIC0xMDYsNDggKzEw
NiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBj
b250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aAogICAgIGRyYXdGb2N1c1JpbmcoY29udGV4
dCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKKyAgICBpZiAocGF0aC5pc051bGwoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdG
b2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0
aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3IpOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQogCi1zdGF0
aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3N0YXRpYyBib29sIGRyYXdGb2N1c1JpbmdUb0NvbnRleHRBdFRpbWUoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1JpbmdQYXRoLCBkb3VibGUsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBVTlVTRURfUEFSQU0odGltZU9mZnNldCk7CiAgICAgQ0dDb250
ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9j
dXNSaW5nUGF0aCk7CiAgICAgcmV0dXJuIGRyYXdGb2N1c1JpbmdBdFRpbWUoY29udGV4dCwgc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSwgY29sb3IpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSAvLyBGSVhNRTogaW1wbGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcg
ZHJhd2luZy4KKyAgICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4
dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCB0aW1lT2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmlt
YXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCi0gICAgICAgIHJldHVybjsKLQogICAgIFJldGFpblB0
cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVN
dXRhYmxlKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBD
R1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdChyZWN0KSk7CkBAIC0x
NTcsMTYgKzE0Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPCiAKICNlbmRpZiAvLyBQTEFU
Rk9STShNQUMpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhy
ZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IGZvY3VzUmluZ1BhdGggPSBhZG9wdENGKENH
UGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCiAgICAg
ICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVj
dCwgLW9mZnNldCwgLW9mZnNldCkpOwpAQCAtMTk5LDExICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xv
clJlZiBjb2xvckZvck1hcmtlckxpbmVTdHlsZShEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9k
ZSBzdHlsZSwgYgogICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICAvLyBXZSB3YW50IHRvIGZpbmQgdGhlIG51bWJlciBvZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNv
bHZpbmcgdGhlIGVxdWF0aW9uczoKICAgICAvLyBkb3REaWFtZXRlciA9IGhlaWdodAogICAgIC8v
IGRvdERpYW1ldGVyIC8gZG90R2FwID0gMTMuMjQ3IC8gOS40NTcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCA1OGM1MTI0
ZDRiNmM2MTM2NGU4ZDM2OTZmMzQ5NWZkYjI2NDU5N2EwLi5lMTM4YzMyMDFkZGU2NDUwMDViODZk
MGE5ZjYxYThmNDBmNzQ2ODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zNzEsNyArMzcxLDcgQEAgR3JhcGhpY3ND
b250ZXh0JiBJT1N1cmZhY2U6OmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpCiAgICAgaWYgKG1fZ3Jh
cGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwogCi0gICAg
bV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oZW5zdXJlUGxh
dGZvcm1Db250ZXh0KCkpOworICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHRDRz4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3ND
b250ZXh0LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dCh0cnVlKTsKIAogICAgIHJldHVybiAqbV9n
cmFwaGljc0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdH
bHlwaHNSZWNvcmRlci5oCmluZGV4IDIwZGFlZjRiYjQxZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAw
NGYzZjcuLjNlNTUxYjg1NzY2Njc0NDg1NTg1OWVjOThiMWVjYTA2MzU5YzI5ZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0
dGVybi5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KIAogI2lmIFVTRShDT1JFX1RFWFQpCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgpAQCAtNjgsNyArNjksOSBAQCBwdWJsaWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0ds
eXBoc0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNy
ZWF0ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVTRShDT1JFX1RFWFQpCisgICAgVW5pcXVlUmVm
PEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CisjZW5kaWYKIAogICAg
IHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7
CiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwpAQCAtOTEsNyArOTQsMTEgQEAgcHJpdmF0ZToKIAogICAgIFJlY29yZGVyJiBtX293
bmVyOwogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjsKLSAgICBHcmFwaGljc0NvbnRleHQgbV9pbnRlcm5hbENvbnRleHQ7CisKKyNpZiBVU0Uo
Q09SRV9URVhUKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250
ZXh0OworI2VuZGlmCisKICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIg
fTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5n
TW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4
dE1hdHJpeDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzlj
ZTU5OGI1Mjc3MDJjOGFhMzNkLi5jYWNmNzY0ZjVkZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkx
Yzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAi
Rm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQv
Q29yZVRleHQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0
YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dS
ZW5kZXJpbmdTdGF0ZVJlZiByc3RhCiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAot
R3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0
KCkKK1VuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRl
SW50ZXJuYWxDb250ZXh0KCkKIHsKICAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0Yo
Q0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0
Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcg
Kzg1LDcgQEAgR3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJu
YWxDb250ZXh0KCkKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxl
Z2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVn
YXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENH
Q29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJ
bWFnZSwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0lt
YWdlKSk7CiAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVs
ZWdhdGUoY29udGV4dERlbGVnYXRlLmdldCgpLCBrQ0dDb250ZXh0VHlwZVVua25vd24sIG51bGxw
dHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkp
OworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0Lmdl
dCgpKTsKIH0KIAogRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3Jk
ZXImIG93bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uKQpAQCAtMTE5LDM0ICsxMjAsMzEgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVs
YXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQg
RHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQogewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOworICAgICAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29s
b3IpOwogICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0g
ICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVu
dCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNT
RVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsK
KyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAg
ICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVu
dCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUu
c3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdy
YWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9y
bSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0
dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
cGF0dGVybik7CiAgICAgfQogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2lu
YWxTdGF0ZS5jdG0pOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0
YXRlLmN0bSk7CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNm
b3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChj
b250ZXh0U3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENv
bnRleHQuc2V0TGVnYWN5U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29y
aWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cuY29sb3IpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMp
OworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5jb2xvciwgY29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRl
cm5hbENvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01v
ZGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0
YXRlLnRleHREcmF3aW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVw
YXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNt
b290aGluZ01vZGUpCkBAIC0zMDIsNyArMzAwLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6
OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQK
ICAgICAgICAgcmV0dXJuOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3Np
dGlvbiA9IENHQ29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKSk7CisgICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9z
aXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQo
IXRleHRQb3NpdGlvbi54KTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpA
QCAtMzIxLDcgKzMxOSw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5
cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91
IHNldCB0aGVzZSB0d28gZXF1YWwgdG8gZWFjaCBvdGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3Ug
Z2V0CiAgICAgLy8gQ1RNICogY3VycmVudFRleHRNYXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5h
bFRleHRNYXRyaXgKICAgICAvLyBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5h
bFRleHRNYXRyaXgpID0gWAotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9
IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdl
dFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gY3RtRml4dXA7CiAgICAgaWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRl
eHRNYXRyaXggPSBtX29yaWdpbmFsVGV4dE1hdHJpeC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZp
eHVwID0gY3VycmVudFRleHRNYXRyaXggKiBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3Bw
CmluZGV4IDU0ZDg1NDcxMjNmODk0N2Q2ZjJmYWNkN2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3
NmZlOTEyZDY4MTAyMDc2MTAwMWNjMjRmNjg2ODg2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6
OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgUmVjb3JkZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAg
ICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwg
bV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9n
aWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4
dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBs
b2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVnYXRlKQogewogfQogCkBAIC00NiwxMyArNDQs
NiBAQCB2b2lkIERyYXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29s
IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogICAgIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNl
dCgpOwogfQogCi1SZWNvcmRlciYgRHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBh
dXRvKiBncmFwaGljc0NvbnRleHRJbXBsID0gY29udGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQo
Z3JhcGhpY3NDb250ZXh0SW1wbCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4o
KmdyYXBoaWNzQ29udGV4dEltcGwpOwotfQotCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlE
aXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewogICAgIGlmIChtX2Rp
c3BsYXlMaXN0LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oCmluZGV4IGQzN2MwNzM1YmViNTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVm
NTguLmQ5NWRkZGVmODU3NTI4YzgyNzllNGYxZWZiZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksOCArMzksOSBA
QCBjbGFzcyBEcmF3aW5nQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJh
d2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBSZWNvcmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7
CiAKKyAgICAvLyBGSVhNRTogRGVkdXBsaWNhdGUgdGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0
aGlzKS5tX2NvbnRleHQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIo
KTsKKyAgICBSZWNvcmRlciYgcmVjb3JkZXIoKSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAg
RGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rp
c3BsYXlMaXN0LCB7IH0pOyB9CiAgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1
cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250
ZXh0Jik7CiAKIHByb3RlY3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAg
IFJlY29yZGVyIG1fY29udGV4dDsKICAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbk1lbW9yeURpc3BsYXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxp
c3Q7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3
OWZjZWNlZmI0NmIxODJjMGEzLi5mMjIyZTIxODNhMzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5
MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYw
NSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBEcmF3RWxsaXBzZSYgaXRlbSkKIAogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAogewotI2lmIFVTRShDRykKICAgICBjb250ZXh0LmRyYXdQYXRo
KG1fcGF0aCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQog
CiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJh
d1BhdGgmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggMDc0MDQxZjI2YTFl
OTY0ZGM0Yzc2ZjQ4MmJjNGM5OTNlODdlZTMxNS4uZjExN2NmYTgzOTM2MDg5ZTcxZmQwNWFiNzg2
NDhiZDI0OGQ1ZTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzks
MTAgKzI3OSw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ry
b2tlUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVy
bi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVy
IGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVy
bi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUo
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3Rh
dGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXIm
KTsKIApAQCAtMzM1LDkgKzMzMSw3IEBAIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0
YXRlLnNoYWRvd0NvbG9yOwotI2lmIFVTRShDRykKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5z
aGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkK
QEAgLTQ2MywxNCArNDU3LDEyIEBAIE9wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2Rl
KERlY29kZXImIGRlY29kZXIpCiAKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dD
b2xvciA9ICpzaGFkb3dDb2xvcjsKIAotI2lmIFVTRShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9v
bD4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNl
TGVnYWN5UmFkaXVzOwotICAgICAgICBpZiAoIXNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAg
ICAgIE9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAg
IGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNN
b2RlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNo
YW5nZS5tX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cpCisgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hh
ZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwogICAgIH0KIAogICAg
IGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RSZWNvcmRlci5jcHAKaW5kZXggNjk0NDgyOGRmYzY0Yjg3NGI5MzdjZWVhZGYyYWVkYzJhNjcz
ODExNS4uMzExMWI5MTcxMzAyMDBmOTFmMWQ4MWJkYWZmMGI0YzA2YWY0ZTkxNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0
Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVj
b3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0
aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVs
ZWdhdGUsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkK
LSAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlw
aHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3Bs
YXlMaXN0KGRpc3BsYXlMaXN0KQogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1f
aXNOZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0ds
eXBoc0RlY29uc3RydWN0aW9uKQpAQCAtNTAsOSArNTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0
IEdyYQogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlh
bENsaXAgfSk7CiB9CiAKLVJlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
Y29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0
aWFsQ1RNKQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNw
bGF5TGlzdChwYXJlbnQubV9kaXNwbGF5TGlzdCkKK1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRl
ciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0
UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAg
ICA6IG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRl
KHBhcmVudC5tX2RlbGVnYXRlKQogICAgICwgbV9pc05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3
R2x5cGhzUmVjb3JkZXIoKnRoaXMsIHBhcmVudC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb24oKSkKQEAgLTE2NiwxMSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBS
ZWNvcmRlcjo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBt
X2RlbGVnYXRlLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFy
U2hhZG93PigpOwotfQotCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKIHsKICAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDEx
IEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29u
c3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMg
d2hhdCB1c2VkIHRvIGhhcHBlbi4KKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1
ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICBtX2Rpc3BsYXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAg
IGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRl
bnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5
LDcgQEAgdm9pZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQogICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9y
bSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQor
QWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRl
RGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZh
bHVlIG9mIEluY2x1ZGVEZXZpY2VTY2FsZS4KICAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3Rt
OwpAQCAtMjk4LDggKzI5Nyw5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3
TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7CisgICAgLy8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHls
ZSBub3QgdXNlZD8KICAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0
b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGlu
ZXMpOwogfQogCkBAIC0zMjgsNiArMzI4LDE4IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAg
ICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3Ip
OwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwx
MCArNDUyLDkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2lu
ZFJ1bGUgd2luZFJ1bGUpCiAgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9
CiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xp
cEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJv
dW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAg
ICByZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOworICAgIHJldHVybiBl
bmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJl
Y29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC00NTIsMzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVy
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdAogICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFw
aGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBU
b0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYg
Y29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVu
Y3Rpb24pCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQoWyZdKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRvIGluaXRpYWxDbGlw
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAg
ICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgot
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4
dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2Fs
ZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci0gICAgICAg
IGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBz
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOwotICAgICAg
ICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENUTS50cmFuc2xhdGUo
MCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxl
ZFNpemUgLyBkZXN0aW5hdGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRj
aGVzIEltYWdlQnVmZmVyJ3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOworICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5z
Zm9ybS55U2NhbGUoKSk7CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRl
c3RpbmF0aW9uLnNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW5p
dGlhbENUTTsKKyAgICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBpbml0aWFsQ1RNLnRy
YW5zbGF0ZSgwLCAtc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlhbENUTS5zY2FsZShz
Y2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPFJlY29yZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0gICAgfSk7CisgICAg
UmVjb3JkZXIgbmVzdGVkQ29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5p
dGlhbENsaXAsIGluaXRpYWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBUb0RyYXdpbmdDb21t
YW5kcz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdGdW5jdGlvbihuZXN0
ZWRDb250ZXh0KTsKICAgICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5h
dGlvbik7Ci19CiAKLSNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVyOjpjYW5QYWludEZy
YW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QKLXsKLSAgICByZXR1
cm4gISFwbGF5ZXIuaWRlbnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2b2lkIFJlY29yZGVy
OjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikKIHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlv
bik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVy
KCkpOwogICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24p
OwogfQpAQCAtNTE3LDcgKzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxv
Y2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBGbG9hdFNpemUgc2hh
ZG93T2Zmc2V0OwogICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xv
cjsKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNl
dCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxvYXRSZWN0IHNoYWRv
d0V4dGVudCA9IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0
KTsKICAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hh
ZG93UmFkaXVzKSk7CkBAIC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
UmVjb3JkZXI6OmN0bSgpIGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKIH0K
IAotY29uc3QgRmxvYXRSZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6OkNv
bnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgY3RtLnRyYW5z
bGF0ZSh4LCB5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGI4
NzZkNmFkYjUxNDczZjFmMzBhYWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2MWMxNzljN2NhOWM3
YzlkMjFmMTk0MzQwYzk3YmI5OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5j
bHVkZSAiRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5
TGlzdEl0ZW1zLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGls
ZVJ1bGUuCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CkBAIC01MCwxMiArNTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBu
YW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHRJbXBsIHsKK2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UmVjb3JkZXIpOwogcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0Rl
Y29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIo
RGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxw
dHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0ds
eXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3NywyNCBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNSZWNvcmRlcjsKLSAg
ICBSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVu
dCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxD
bGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAgICAgYm9vbCBoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJv
b2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2FuRHJhd0ltYWdl
QnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7
IH0KICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKIAor
I2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4
dChib29sKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZSB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KKwogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KExpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSNpZiBVU0Uo
Q0cpCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBh
dHRlcm4oKSBvdmVycmlkZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBvdmVycmlkZTsK
ICNlbmRpZgpAQCAtMTIwLDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgdm9pZCBzYXZl
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNiw3ICsx
NTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkgb3ZlcnJpZGU7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFu
c3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJp
ZGU7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
bGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKwogI2lm
IEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFp
bnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5k
aWYKIAogICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CkBA
IC0xNzMsNyArMTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgICAgIGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAg
ICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4
dCgpKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlz
KSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4
dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byBy
ZWN0ID0gaXRlbS5nbG9iYWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0
LmFkZERyYXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRl
OgogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0Jikg
Y29uc3Q7CiAgICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAg
ICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250
ZXh0U3RhdGUgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjky
ODZkMjVhMTk1MTkyMWI4NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAx
ZjMzZDJmYjIwMzFmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvQ29sb3JNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAK
KyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1w
b3J0IDx3dGYvTG9jay5oPgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8
dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAg
ICAgICBSZXRhaW5QdHI8TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhb
W05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4
ZWxzV2lkZToxIHBpeGVsc0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBs
ZXNQZXJQaXhlbDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0Rl
dmljZVJHQkNvbG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250
ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5n
ZXQoKV0uQ0dDb250ZXh0KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChiaXRtYXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaElu
UmVjdDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1
ZDliM2NhNGQxY2UwZmViOWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1
NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2Vi
TGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxh
eWVyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldl
YkxheWVyLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxh
dGZvcm1DQUxheWVyLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUx
LDcgKzUxLDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAog
ewogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FM
YXllckZvckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAg
ICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsK
KyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpOwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCBy
ZWN0c1RvUGFpbnQgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFp
bnQoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllcjo6ZHJhd0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQo
KSwgcmVjdHNUb1BhaW50LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3Jh
cGhpY3NMYXllclBhaW50U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
Tm9ybWFsKTsKICAgICB9CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0
OihDR0NvbnRleHRSZWYpY29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
YXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9y
TGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3du
ZXIoKSkgewotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0Nv
bnRleHQoY29udGV4dCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250
ZXh0KHRydWUpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQobGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1
MWNjN2UwMWQ0NzBjNTcwZDlkOWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQwOTJkODRiNzMyZTk4
NDM5MDYzNjNlMDU2MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNv
bW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRh
PD4sIFQ+Ojp2YQogICAgIHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBQYWludGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250
ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRp
b25zJiBjb21tYW5kTGlzdCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAg
ICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVj
dCgpIH0pOwogfQpAQCAtMTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAog
ICAgIH0KIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17
Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxp
bmVDYXApCiB7CiAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlv
biwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRp
ZW50JiBncmFkaWVudCkKQEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4w
LCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMx
MSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVj
dCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSksIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0
Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7
Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhv
bGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7
CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKQEAgLTM4Niw3ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhp
cy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fp
cm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAK
QEAgLTQwOCw3ICs0MDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0
LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsK
IH0KIApAQCAtNDI4LDcgKzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMs
NyArNTE4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBo
cz4oQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwK
ICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0
cjxjYWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSks
CkBAIC01NTMsNyArNTQ4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAg
ICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3Jt
SW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMs
IHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3Ms
IHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7
CiB9CiAKQEAgLTYxMywxMSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxp
YXMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0
IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAg
ICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYy
OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JU
ZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBzdGF0ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17
Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgc3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQog
Ci1BZmZpbmVUcmFuc2Zvcm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMy
LDcgKzEwMjMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRl
U3RhY2subGFzdCgpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVy
c2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGlu
Z09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShj
b21tYW5kKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGljc0NvbnRleHQ6OkNs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhN
RTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1
bHQ6OlN1Y2Nlc3M7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1l
Rm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYx
ZmY2MzY1NmFkYTQwOWYwZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhm
ZGY3YzVjMzM5OTcyNzdiYmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29z
aWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21h
IG9uY2UKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAog
bmFtZXNwYWNlIE5pY29zaWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFs
IDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewog
cHVibGljOgotICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0JiwgUGFpbnRpbmdPcGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQ
YWludGluZ09wZXJhdGlvbnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFw
aGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51
bGxwdHI7IH0KIAogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAt
NTMsNiArNTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25z
dCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpC
bGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBX
ZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlk
ZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2Vi
Q29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxv
YXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2lu
dCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0
cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVy
cmlkZTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0m
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zv
cm0mKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBX
ZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lM
YXllcigpIG92ZXJyaWRlOwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xp
cE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdl
YkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
LCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsK
KyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3Vs
dCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5h
dGlvbiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9p
ZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJ
REVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9v
bCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1
YjhjMWQ4N2EyYzZjMzdjY2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBj
ZmJkMDZhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0Nv
bnRleHRDYWlyby5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29z
aWFCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgog
I2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3
ICs3MSw3IEBAIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmco
QnVmZmVyJiBidWZmZXIpCiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUobV9jYWlyby5zdXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBt
YWtlVW5pcXVlPFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQu
Z2V0KCkpOwotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ+KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeSgqbV9wbGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VV
bmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7
CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkK
QEAgLTEwNCwxMSArMTA0LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRp
bmc6OnJlcGxheShjb25zdCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdD
b250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9u
cyYgcGFpbnRpbmdPcGVyYXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVu
aXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0
aW9uc10oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0
LCBwYWludGluZ09wZXJhdGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4
dCA9IG1ha2VVbmlxdWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25z
KTsKIH0KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGlu
ZygpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJm
NTc1ZDUyYzhiZGJkMWNlMjgyYjhlYmE3ZDUwYmIuLjBmOWQ4NzI5ZTcxZGQ0MmU4MGU1OWVlYjM4
YmE4MWMwNGJlY2YzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjks
NyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUg
IlBhdGguaCIKIApAQCAtNjcsMzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0
UmVmPiBDR0NvbnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJu
IGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMs
IGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERD
IGhkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdp
dGhIREMoaGRjLCBoYXNBbHBoYSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wg
aGFzQWxwaGEpCi17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0
YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyho
ZGMsIGhhc0FscGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRh
LT5tX2NnQ29udGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRz
IGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZp
bGxDb2xvcigpKTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigp
KTsKLSAgICB9CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5k
b3dzQ29udGV4dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8g
c3VpdGFibGUgZm9yIGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VX
aW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBv
cnRBbHBoYUJsZW5kKQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9k
YXRhLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRC
aXRtYXAgPSAhZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3Bh
cmVuY3lMYXllcigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEt
PnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0
JiBkc3RSZWN0LCBib28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGlt
YWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0Lmdl
dCgpKSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCks
IGRzdFJlY3QsIGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRl
ZFByaXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQo
KSk7CiAgICAgCiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhk
Yyk7CkBAIC0xMjQsMjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRv
d3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJl
dGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUo
KS53aWR0aCgpLCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVy
Um93KCksIHNSR0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8
IGtDR0ltYWdlQWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9j
Z0NvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5z
aXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAg
IAorICAgIENHQ29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9j
Z0NvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5z
aXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAg
IAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhN
RTogaW1wbGVtZW50CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8g
dGhlIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0Nv
bnRleHRNYWMubW0uCiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENH
LmNwcCBhbmQgYmUgc2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4w
ZjsKICAgICBvZmZzZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xv
ci5pc1ZhbGlkKCkgPyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEg
KzE0OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBp
ZiAoc3R5bGUubW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcg
JiYgc3R5bGUubW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRl
eHQuZ2V0KCkpOwogfQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNz
Q29udGV4dENHOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RhdGE7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAK
aW5kZXggZjE0NDI1NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjgyNGYzMWZj
MjhmMmJmMWM2NTQzMWI5ZmM5OWRhNjc5NWEwOWJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fp
cm9XaW4uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJ
bXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRo
LmgiCiAKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtMTI3LDkgKzEyNyw5IEBAIHN0YXRp
YyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRElCCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxw
aGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+
bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFw
ID0gbV9pbXBsIHx8ICFkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRy
YW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFoZGMgfHwgIWNyZWF0ZWRCaXRtYXApIHsKLSAg
ICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3OCw0ICsxNzgs
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQogfQogI2Vu
ZGlmCiAKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS5nZXQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKaW5kZXgg
MjlhODJhODk3ODIyOWIwZjU4NzNhYmRmODJiZmFmODA2Y2YxNjU5OC4uZTNjNmY3YzYyNGFlNmY5
OTU4MjczNGIwZjg4OWM4ZmYwNmExODZhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwCkBAIC00NywxNyArNDcsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhh
KQogewogICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKIH0KIAotR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRl
clRhcmdldCwgUkVDVCByZWN0LCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVy
VGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgLy8gQ3JlYXRlIGEgREMg
cmVuZGVyIHRhcmdldC4KICAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVu
ZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4
dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGll
cywgcmVuZGVyVGFyZ2V0KTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRp
ZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAK
ICAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMsICZyZWN0KTsKQEAgLTY3LDEyICs2Nywx
MiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRQogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUg
cmVuZGVyZXJUeXBlKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKIHsKICAgICBwbGF0Zm9ybUluaXQocGxh
dGZvcm1HcmFwaGljc0NvbnRleHQsIHJlbmRlcmVyVHlwZSk7CiB9CiAKLUlEMkQxRmFjdG9yeSog
R3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKK0lEMkQxRmFjdG9yeSogR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKQogewogICAgIHN0YXRpYyBJRDJEMUZhY3Rv
cnkqIGRpcmVjdDJERmFjdG9yeSA9IG51bGxwdHI7CiAgICAgaWYgKCFkaXJlY3QyREZhY3Rvcnkp
IHsKQEAgLTg5LDcgKzg5LDcgQEAgSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkoKQogICAgIHJldHVybiBkaXJlY3QyREZhY3Rvcnk7CiB9CiAKLUlEMkQxUmVuZGVy
VGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQorSUQyRDFSZW5k
ZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkK
IHsKICAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBu
dWxscHRyOwogICAgIGlmICghZGVmYXVsdFJlbmRlclRhcmdldCkgewpAQCAtMTA0LDcgKzEwNCw3
IEBAIElEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJn
ZXQoKQogICAgIHJldHVybiBkZWZhdWx0UmVuZGVyVGFyZ2V0OwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkK
IHsKICAgICBpZiAoIWhkYykKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2LDEyICsxMzYsMTIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhh
KQogICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252
ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtQ29udGV4dCwg
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
Q29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJp
bmdUeXBlKQogewogICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm47CkBA
IC0xNTUsMTYgKzE1NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdAogICAgIC8vIEZJWE1F
OiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlv
blF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0
KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6fkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKCkKIHsKICAgICBk
ZWxldGUgbV9kYXRhOwogfQogCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAg
IEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZv
cm1Db250ZXh0KCk7CiB9CiAKQEAgLTE5NSwzMyArMTkyLDI4IEBAIGZsb2F0IEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y3VycmVudEdsb2JhbEFscGhhKCkgY29uc3QKICAgICByZXR1
cm4gbV9hbHBoYTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRl
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNhdmUoKQogewotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAg
RGlyZWN0MkQ6OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnJlc3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRm
b3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUlt
YWdlKGNvbnN0IENPTVB0cjxJRDJEMUJpdG1hcD4mIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBpbWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywg
c3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIERpcmVjdDJE
OjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0
YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0
JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRz
dFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7CiAgICAgYm9vbCBjcmVhdGVkQml0bWFw
ID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwog
ICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDM0ICsyNTQsMzUgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBk
c3RSZWN0LCBib28KICAgICA6OkRlbGV0ZURDKGhkYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9p
bnQmIHBvaW50KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1dpbmRvd3NCaXRt
YXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsK
KyAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgc3R5bGUpOwogfQogCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
IHJlbmRlcmluZ1R5cGUpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4
dCkKICAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFtX3Bs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCiAgICAg
ICAgIGJlZ2luRHJhdygpOwogfQogCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25lZFBsYXRmb3JtQ29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmlu
Z1R5cGUpCiAgICAgOiBtX293bmVkUGxhdGZvcm1Db250ZXh0KFdURk1vdmUob3duZWRQbGF0Zm9y
bUNvbnRleHQpKQogICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCiAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJpbmdUeXBlKQpAQCAtMjk3LDcgKzI5MCw3
IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQCiAgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBl
ID09IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9y
eSkKKyAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2luRHJhdygp
OwogfQogCkBAIC0zMTAsOSArMzAzLDggQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Ojp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKICAgICAgICAgZW5kRHJhdygpOwog
fQogCi1JRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpicnVzaFdpdGhDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCitJRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQo
KS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoY29sb3IpKS5nZXQoKTsKIH0K
IApAQCAtMzcyLDczICszNjQsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKIH0KIAotRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29u
dGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorRDJE
MV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxBbHBoYShj
b25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xv
ci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBi
LCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdy
YXBoaWNzQ29udGV4dDo6c29saWRTdHJva2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlE
MkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAorSUQyRDFC
cnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2guZ2V0KCk7CiB9
CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29u
c3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ryb2tlQnJ1
c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ry
b2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6cGF0dGVy
bkZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgp
LT5tX3BhdHRlcm5GaWxsQnJ1c2guZ2V0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpbkRyYXcoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKIHsK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5iZWdpbkRyYXcoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZERyYXcoKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCiB7Ci0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZW5kRHJhdygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmx1c2goKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Zmx1c2goKQogewogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
RGlyZWN0MkQ6OmZsdXNoKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAg
IGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvIHRpbGVJbWFnZSA9
IGltYWdlOwogICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdU
Rk1vdmUodGlsZUltYWdlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUg
d2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJl
Y3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBBU1NF
UlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd1JlY3Qo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKIH0KQEAgLTQ5MCw1MiAr
NDY5LDI5IEBAIEQyRDFfU1RST0tFX1NUWUxFX1BST1BFUlRJRVMgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzdHJva2VTdHlsZVByb3BlcnRpCiAgICAgcmV0dXJuIEQyRDE6OlN0cm9r
ZVN0eWxlUHJvcGVydGllcyhtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1D
b250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3Jt
Q29udGV4dC5tX2xpbmVKb2luLCBtX3BsYXRmb3JtQ29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFf
REFTSF9TVFlMRV9TT0xJRCwgMC4wZik7CiB9CiAKLUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0CitJRDJEMVN0cm9rZVN0eWxlKiBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGUoKSBjb25zdAogewogICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5z
dHJva2VTdHlsZSgpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMu
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpk
cmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VT
dHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3Qs
IHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJh
bnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQg
b24gV2luZG93cwogCkBAIC01NDMsMTEgKzQ5OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0cm9rZVBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJv
a2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1Q
YXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlz
bid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCkBAIC01NTUsMTc5ICs1MDgsMTA0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0p
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UGF0
aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIERpcmVjdDJEOjpkcmF3UGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291
cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0
MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAq
dGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OnN0
cm9rZVBhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRo
aXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIERpcmVjdDJEOjpmaWxsUmVjdChjb250ZXh0LCByZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
RmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCisgICAgYXV0byBicnVzaCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIWJydXNoKQogICAgICAgICByZXR1
cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdy
YWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Cit9CiAKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQor
eworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7
CisKKyAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3Jt
Q29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgRGlyZWN0MkQ6OmZp
bGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24o
bV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CiAgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsUm91bmRlZFJl
Y3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERp
cmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwT3V0
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNs
aXBSdWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlw
UnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBh
dGgsIGNsaXBSdWxlKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMo
KSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcygpIGNv
bnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJl
Y3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3Vu
ZHMoKTsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERp
cmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCkBA
IC03MzUsMTggKzYxMywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIHNhdmUoKTsKIAogICAgIG1fc3RhdGUu
YWxwaGEgPSBvcGFjaXR5OwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCksIG9w
YWNpdHkpOwogfQogCkBAIC03NTQsMTE5ICs2MjcsMTEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKICAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgp
KTsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKLQogICAgIG1fc3RhdGUuYWxwaGEgPSBtX2RhdGEt
PmN1cnJlbnRHbG9iYWxBbHBoYSgpOwogCiAgICAgcmVzdG9yZSgpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQorYm9vbCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQogewogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
IGZsYWdzKQogewotICAgICh2b2lkKW9mZnNldDsKLSAgICAodm9pZClibHVyOwotICAgICh2b2lk
KWNvbG9yOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93
KCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tl
U3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAgICAgaWYg
KHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5n
IHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBD
RyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhdXRv
JiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKSk7CisgICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBz
dGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0
ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAg
ICAgICB9CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3R5bGUp
OwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVy
YXRpb25DaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxl
bmRNb2RlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGlt
aXQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2Up
CisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1D
b250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAg
bV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7
CisgICAgICAgIEFTU0VSVChtX3N0YXRlLnN0cm9rZUNvbG9yID09IGNvbG9yKTsKKyAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENvbG9yKHN0
cm9rZUNvbG9yKCkpOyAgICAKKyAgICB9CisgICAgCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVCht
X3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5t
X3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOwogICAgIH0KIAot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVy
TGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgeworICAgICAgICBh
dXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RF
X0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOworICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZv
bnRTbW9vdGhpbmdNb2RlKTsKKyAgICB9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpIHsKKyAgICAgICAgQVNT
RVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOworICAgICAgICBtX2RhdGEtPnNldEFscGhhKGFs
cGhhKTsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERp
cmVjdDJEOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKKyAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHlDaGFuZ2UpKSB7CisgICAgICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworCisgICAgICAgIHN3aXRj
aCAobW9kZSkgeworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0Ogor
ICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJ
R0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVh
bGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgICAgIHF1YWxpdHkg
PSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICAgICAgcXVh
bGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFNldEludGVycG9s
YXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKKyAgICB9CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgbGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBsaW1pdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBs
aW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVj
dChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAg
ICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Cit9CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkK
K3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9
ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb250ZXh0LCBy
ZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0
TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGlu
ZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0
KCksIGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNo
T2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMs
IGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZz
ZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAtODc1LDM0MSArNzQyLDE3MyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMs
IGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zm
c2V0LCBsZW5ndGgpICsgbGVuZ3RoOwogICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaGVzLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVK
b2luKExpbmVKb2luIGpvaW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBqb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5l
Sm9pbihqb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNldExpbmVKb2luKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgam9pbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGNsaXBQYXRoKHBhdGgs
IGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIERpcmVjdDJEOjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwogICAgIC8v
IEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkg
PSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKGFuZ2xlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKICAgICAvLyBGSVhNRTogbV9kYXRh
LT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVj
dDJEOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICAvLyBGSVhNRTog
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb25jYXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y29uY2F0Q1RN
KCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5t
X3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldENUTSh0
cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTSgqcGxhdGZvcm1Db250
ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VU
cmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0g
R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkg
Y29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Z2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6
U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91
bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9k
ZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5y
b3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gRGly
ZWN0MkQ6OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKLXsKLSAgICBEYXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBl
bmQoMCk7Ci0gICAgd2lkdGhzLmFwcGVuZChyZWN0LndpZHRoKCkpOwotICAgIGRyYXdMaW5lc0Zv
clRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBj
b25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxp
bmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
VW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVV
bmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3Jt
Q29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRl
cmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwm
IGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBX
VEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQg
Y29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBjb250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAv
LyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0cy4KLSAgICB9Ci0KICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IG1vZGUpCi17Ci0gICAgQVNTRVJUKCFwYWlu
dGluZ0Rpc2FibGVkKCkpOwotCi0gICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0KLSAgICBzd2l0Y2gg
KG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgotICAgICAg
ICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBv
bGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1Rf
TkVJR0hCT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgot
ICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgIHF1
YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJv
YmFiYWx5IG5vdCBuZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUUKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FCi0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKK2Jv
b2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QK
IHsKLSAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1U
ZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCiB7Ci0gICAgKHZvaWQpbW9kZTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOwotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1f
c29saWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIC8v
IFRoaXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQuCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
CiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID09IHRoaWNrbmVzcyk7Ci0g
ICAgbV9kYXRhLT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KKyAgICBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikgeworICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlsbCBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3Jh
ZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIEFTU0VSVChtX3N0YXRl
LmZpbGxDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0aENvbG9y
KGZpbGxDb2xvcigpKTsKKyAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9z
dGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChtX3N0
YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVy
bi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KKyAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFTU0VSVCghbV9pbXBsKTsK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0U2hvdWxkQW50aWFsaWFzKCpwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKKyAgICBEaXJl
Y3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0
cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRz
KGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyhj
b25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRT
bW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7CisgICAgaWYgKCFmb250LnBsYXRm
b3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2ltcGwp
OworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgc2hv
cnQ+IGdseXBocyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFu
Y2VzKG51bUdseXBocyk7CisgICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zm
c2V0cyhudW1HbHlwaHMpOwogCi0gICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJsZSA/
IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFMSUFT
X01PREVfQUxJQVNFRDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNl
dFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdNb2RlKTsKLX0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgaWYgKGkgKyBmcm9tID49
IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQoKSkKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gYWR2
YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9tKTsKKyAgICAgICAgaWYgKCFhZHZh
bmNlKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9
PSBhbHBoYSk7Ci0gICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGdseXBoc1tpXSA9IGds
eXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOworICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNb
aV0gPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9m
ZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRl
ck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOworICAgIH0KIAotICAgIEFTU0VSVCghbV9pbXBs
KTsKKyAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9m
ZnNldCgpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3Qy
RDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCksIGNvbXBv
c2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKKyAgICBEaXJlY3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4
dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0
MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAorICAgICAgICBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNl
dCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKKyAg
ICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRl
LnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKQogewotICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQuCisgICAg
Ly8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1G
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0YXRlLmZp
bGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBi
cnVzaGVzIGluIEQyRC4KLSAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxh
dGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9r
ZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Cisg
ICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoYXV0byBzdXJm
YWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnRleHQpKQorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1T
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKKyNpZiBFTkFCTEUoVklERU8p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQ
bGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0
YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgewotICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVy
bi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChl
bGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9z
dGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCiB9
CisjZW5kaWYKKwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjcwYzNjMTczYzkxYTc2YmViZDJlOGU2ZGYy
MTU1ZjFhMTU0YWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJ
UkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxv
YXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
LSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRD4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsK
LSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KElEMkQxUmVu
ZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6
R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtyZW5kZXJUYXJnZXRdKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEPihjb250ZXh0LCByZW5kZXJUYXJnZXQp
OwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1w
bChjb250ZXh0KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAg
ICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiht
X3BsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0Nv
bnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4
dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwo
Y29udGV4dCkKLSAgICAsIG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRD4ocmVuZGVyVGFyZ2V0KSkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0
KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBt
X3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQo
KSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6fkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RCgpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShu
dWxscHRyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6Omhhc1BsYXRm
b3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mg
ZmxhZ3MpCi17Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25l
c3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlz
IGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8v
IFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3Np
dGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdy
YXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAg
ICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAg
ICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNo
YWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAg
ICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAg
ICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBEaXJlY3QyRDo6
c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4dCwgbGluZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2gobV9wbGF0
Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBE
aXJlY3QyRDo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0
ZXJMaW1pdCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChtX3BsYXRmb3JtQ29udGV4
dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4
dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0
byBicnVzaCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKTsKLSAgICBpZiAoIWJydXNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdl
dCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRv
ciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
cHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBv
c2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwot
ICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAgIENv
bXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
cjsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3Jt
Q29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAgIERpcmVjdDJEOjpT
aGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkp
Ci0gICAgICAgIERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBEaXJlY3QyRDo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBjb2xvciwgc2hhZG93U3RhdGUp
OwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVS
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOwotCi0gICAgRGlyZWN0MkQ6OkZpbGxTb3VyY2UgZmlsbFNvdXJjZShz
dGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpOwotICAgIGZpbGxTb3VyY2UuYnJ1c2ggPSBtX3BsYXRm
b3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgZmlsbFNvdXJjZSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0
aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KG1fcGxhdGZv
cm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUs
IGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3Qy
RDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwot
ICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdHbHlwaHMo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21v
b3RoaW5nKTsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2ln
bmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250
YWxBZHZhbmNlcyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBn
bHlwaE9mZnNldHMobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgewotICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNl
ID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2Up
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZl
ci5nbHlwaEF0KGkgKyBmcm9tKTsKLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2
YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBh
ZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQg
PSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9m
ZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxh
dGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0
KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0g
ICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4
T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNr
bmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2Um
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1h
Z2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UGF0dGVybigoTmF0aXZlSW1h
Z2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGF1
dG8gc3VyZmFjZSA9IGltYWdlLnBsYXRmb3JtSW1hZ2UoKSkKLSAgICAgICAgRGlyZWN0MkQ6OmRy
YXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKHN1cmZhY2UpLCBJbnRTaXplKGlt
YWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9w
dGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ry
b2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50
MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQobV9w
bGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBEaXJlY3QyRDo6
ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgp
LCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKG9mZnNldCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNhdmUoKQotewotICAgIERpcmVj
dDJEOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnJlc3RvcmUoKQotewotICAgIERpcmVjdDJEOjpyZXN0b3JlKG1fcGxhdGZv
cm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUobV9wbGF0
Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIERpcmVjdDJEOjpyb3RhdGUo
bV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBE
aXJlY3QyRDo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtKQotewotICAgIERpcmVjdDJEOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNvbnRleHQs
IHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpn
ZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIERp
cmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKCkKLXsKLSAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXAobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9w
bGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0
KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQot
ewotICAgIERpcmVjdDJEOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgY2xpcFJ1
bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcEJvdW5k
cygpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRm
b3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXIuY29weUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29udGV4dCgpOwotICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCi0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIERp
cmVjdDJEOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVt
ZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotI2VuZGlmCi0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Vi
MDQ1MDUzMTcwM2ZiOTBlZWE3YjQyZjI0NzRmNTkzNmJkM2JhMi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEIGZp
bmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgewotcHVibGljOgotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5
IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBj
cmVhdGVGYWN0b3J5KElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsK
LSAgICBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiwgSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQo
KTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhj
b25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0
IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwotICAgIGJvb2wgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9h
dCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3Qg
Y2xpcEJvdW5kcygpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOwotI2lm
IEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFp
bnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBt
X3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggMWQ4
MDQyMGNmN2VjNmNkNzc1YTYyYmFlYTIyZjk5MDYwN2ViNGNiZC4uNmRiYmU5NjZkMzk2OTkyNTll
NjVjNmY4NTBlZTZlN2MzNWNkZDkxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKQEAgLTU2LDEy
ICs1NiwxMiBAQCBzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXAp
CiAjaWYgUExBVEZPUk0oV0lOKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEluY2x1
ZGVDaGlsZFdpbmRvd3MoYm9vbCBpbmNsdWRlKQogewotICAgIG1fZGF0YS0+bV9zaG91bGRJbmNs
dWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVkZTsKKyAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVkZTsKIH0KIAogYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93czsKKyAgICByZXR1cm4gZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93czsKIH0K
IAogR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKEhEQyBoZGMs
IGNvbnN0IEludFNpemUmIHNpemUpCkBAIC05NSw3ICs5NSw3IEBAIEdyYXBoaWNzQ29udGV4dDo6
V2luZG93c0JpdG1hcDo6fldpbmRvd3NCaXRtYXAoKQogCiBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NDb250ZXh0OjpXaW5kb3dzQml0bWFwPiBHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRvd3NC
aXRtYXAoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxXaW5k
b3dzQml0bWFwPihtX2RhdGEtPm1faGRjLCBzaXplKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxX
aW5kb3dzQml0bWFwPihkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMsIHNpemUpOwog
fQogI2VuZGlmCiAKQEAgLTEwMyw3ICsxMDMsNyBAQCBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRX
aW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYQog
ewogICAgIEhEQyBoZGMgPSBudWxscHRyOwogICAgIGlmICghbV9pbXBsKQotICAgICAgICBoZGMg
PSBtX2RhdGEtPm1faGRjOworICAgICAgICBoZGMgPSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KS0+bV9oZGM7CiAgICAgLy8gRklYTUU6IFNob3VsZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28g
d2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAgICAgaWYgKCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxh
eWVyKCkpIHsKICAgICAgICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzUs
MTcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVj
dCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEKICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxl
YWsoKTsKICAgICB9CiAKLSAgICBtX2RhdGEtPmZsdXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7
Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCktPmZsdXNoKCk7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAg
ICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3Jh
cGhpY3NDb250ZXh0OjpoZGMoKSBjb25zdAogewotICAgIGlmICghbV9kYXRhKQorICAgIGlmICgh
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpLT5tX2hkYzsKIH0KIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTk5YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNj
NzljMGNiYzBjNDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjZGVmaW5lIEdy
YXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHRDRworCisjZWxpZiBVU0UoRElSRUNUMkQp
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHREaXJlY3QyRC5oIgorI2RlZmluZSBHcmFwaGlj
c0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKKworI2VsaWYgVVNFKENBSVJPKQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250
ZXh0V2luIEdyYXBoaWNzQ29udGV4dENhaXJvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhj
NDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAg
aWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEw
ZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2UyYmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDll
N2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRt
YXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6
ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJt
cEluZm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAg
IDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAg
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsKIAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUg
PSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJj
ZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNi
ZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2lu
Y2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcg
QEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3Qg
SW50U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1h
Z2UpOwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJl
ZikpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9h
dFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3Qy
RC5jcHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRjYTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEy
OWExN2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIz
Miw3ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3Jh
dGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgm
c2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENv
bnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNo
Q29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0
UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGlj
c0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJn
ZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4
dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRj
aENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6
OkdQVU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJv
a2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2
MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNiZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5
NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdl
LCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uCiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGlj
c0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1h
Z2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1h
Z2UgKmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhp
Y3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBH
cmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAg
ICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29u
dGV4dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2FsZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsK
ICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50
YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAog
ICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8g
aW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRl
cmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRl
eHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRl
eHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxv
YXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29s
b3I6OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGljYQog
CiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VS
ZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplKCldKTsKICAgICBy
ZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJl
ckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6
IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dl
c3RzIHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBp
bml0aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJpbHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4
dC4KICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAg
LTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJh
bWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdl
ID0gKnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRv
cHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0
aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIu
Z2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdlXShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNv
bnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3
SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAgICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
LCBjb25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTpp
bWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0
aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4
dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5D
R0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVy
Q29udGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0
R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7
CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApp
bmRleCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDczYmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFi
ZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2Nv
YS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisj
aW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBk
MDIyZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNiODg3M2Y1NTA5Li5hYzZlMjQ0ZDA0MWU5ZmU2
YmY2MmYxZTYxNWFmOTllNmNmMjUwMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNj
cmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgIkhX
bmREQy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgi
CkBAIC0xODYsNyArMTg3LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmso
RWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGluTGFiZWwsIFQKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1h
Z2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNvbnRleHRSZWYpOworICAg
IEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGNvbnRleHRSZWYpOwogICAgIC8vIE9uIE1hYyBh
bHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZlciB3ZSBjYW4ndCBjb250cm9sIGFs
cGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwgc28gd2UgdXNlIDEKICAgICBjb25z
dGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBTUkdCQTx1aW50OF90PiB7IDE0MCwgMTQwLCAx
NDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5k
ZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2FiNmIxM2FmODM0NzJlNy4uMjQ4ZTNkYzFlMzgy
MTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCkBA
IC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3Qm
IGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAgIDo6U2VsZWN0T2JqZWN0KG1fREMuZ2V0KCks
IG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX0RD
LmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChtX0RDLmdldCgpKTsKIAog
ICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VSZWN0IHRyYW5zbGF0ZWQgaW50byB0aGUgY29v
cmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxpc3QgKHdoaWNoIGlzIGxpc3RTaXplICogbV9p
dGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIEludFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENo
ZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNr
ZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2YzA5YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjFi
MTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1ZjQzYjc2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKQEAgLTIzLDYg
KzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM5LDcgQEAgYm9vbCBD
b250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVW
aWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhh
dmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRz
RW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRl
eHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0Nv
bnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChO
dWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0Nv
bnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFt
ZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0
UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJi
MzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2MwYi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZh
N2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAsMTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFw
cGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAg
RmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKSwgYm94U2hhZG93LT55KCkpOwot
ICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpKQotICAgICAgICBjb250ZXh0
LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9y
QnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAg
ICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJh
ZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9y
KCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFk
aXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3Io
KSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6Okxl
Z2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBj
b25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQzOSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29u
c3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4g
PSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2
aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCks
IGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRv
d09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0
KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hh
ZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBz
aGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNz
YXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQz
LDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3co
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBl
eHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3co
KSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8g
U2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAg
ICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91
dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2N2NjNjZlZTVhMjVjNzRkZmUuLjI5YWExOTA2
Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5j
bHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgog
I2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBAIC0xNzg5LDcgKzE3OTAsNyBAQCB2b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRv
IHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NM
YXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQobnVsbHB0cik7Cisg
ICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4
dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24g
ZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJl
bmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5
Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYxNTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2
ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVy
YXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcg
KzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1h
cENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1
cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lk
IFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJ
bnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMx
NTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQwNmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5
OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxl
Qml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1h
cENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsK
ICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkp
OworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0
LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hh
cmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJl
YWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAwOGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1
NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQyNDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJl
Y3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0
YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+
CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmICghc3VyZmFjZUNv
bnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rv
cnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJl
YWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2lu
dCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4
MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRmNi4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2
NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fp
cm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldl
YlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJv
SW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENh
aXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJv
Lmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0
ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWlu
dCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBvaW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVw
ZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190
PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNl
KCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFw
aGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAog
ICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJhd3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJp
dG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdl
YnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwgYml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcg
Q29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4
IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJm
YmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMwLDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJB
UElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5o
IgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNp
bXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5j
ZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsu
aCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5
ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9y
aWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkgPSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFy
Z2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0gKHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3Qp
bnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBh
Z2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50
KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3Jl
OjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRl
eCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgz
N2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGls
aXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgog
I2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmluZGV4IDNjYWNiOWFlYzY0Yzg5YTUxMjA4NzAw
MGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4NjI5ZjYxM2QzMWI4NDczOTkzM2UyOTIzMWIx
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQ
cm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVu
dVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dESVV0aWxp
dGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVu
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KQEAgLTg1Miw3ICs4NTMs
NyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNlbGVjdE9iamVjdChtX0RDLmdldCgpLCBtX2Jt
cC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQo
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQobV9EQy5nZXQoKSk7CiAjZWxzZQog
ICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAogICAgIEhSRVNVTFQgaHIg
PSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKQEAgLTg2Nyw3ICs4NjgsNyBA
QCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250
ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0LnNldEQzRERldmlj
ZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRm
b3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6
R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dCgmcGxhdGZvcm1Db250
ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1v
cnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRyYW5zbGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdl
UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1Yjk4Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0
N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNkZjZmMGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUs
NiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRn
ZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0
U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAi
UERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9ydCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5o
IgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVs
ZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktp
dFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElTKQogQGludGVyZmFj
ZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRh
UHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAtMTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQ
bHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0Nv
bnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBw
ZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRD
RyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0
SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4
MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2JkYjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRm
MDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxl
bWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6
OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVjdCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAg
ICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBkZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkp
OwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0
LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBk
ZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEg
fSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVp
Z2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKaW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2
YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIz
ZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2lu
Z0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMGE3NmU3
MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQxYzVjMy4uMDA5ZmU4OTA5NjU3MGZjNzM1NjAy
NDdhNDIwZjU0NDZhODdkOTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJl
bmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJl
YWxseSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5n
IGNvZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzNzUsNyArNTM4MCw3IEBAIHZvaWQg
V2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZyYW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25z
dCBQcmludEluZm8mIHByaW50CiAgICAgICAgICAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwg
JmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNh
bGxCYWNrcykpOwogICAgICAgICAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0
LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQgY3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENH
IGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRl
eHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICBtX3ByaW50Q29u
dGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2Up
LndpZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZk
ZmZjNWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUw
YWM5OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9u
R3RrOjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3
KCk7CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lk
dGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fY2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250
ZXh0LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4
dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9zY2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3Jl
KG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9N
aXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJj
ZmU2NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBiN2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcmlu
dENvbnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBAQCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6
KENHQ29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdpZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAog
ICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3Jh
cGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAgUHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2Vz
V2l0aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3JhcGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFn
ZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAy
YmEwMDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0
ZTg4ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAog
I2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2Fk
ZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRy
YXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBv
aW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9udCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9y
ICoKIAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IFtuc0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNz
Q29udGV4dCB7IGNnQ29udGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGlj
c0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAgICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEg
ZmxpcHBlZCBncmFwaGljcyBjb250ZXh0LgogICAgICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250
ZXh0IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJ
bnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5
ZWNmMWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4uOTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2My
YjMzZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5z
cGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBA
QAogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdo
bGlnaHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9y
Q29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgs
NyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogCiAgICAgICAgIEFTU0VSVChbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBDR0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICAgICAgW193ZWJO
b2RlSGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xsZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQp
OwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYz
NWQ3YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5
NjIwZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZUxvYWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
VE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2
MTMsNyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09M
KWNvbnRlbnRzT25seQogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50
R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQg
Y29udGV4dChjdHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4
KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1l
ID0gY29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCAwNTA2OThiMGJhZmRiZTAyODc1YjMzNzg4NzRmOTRiZGY3YWQzZjhmLi44Nzk1
Mjk2MGJhODk0ODBlMmFiOWUyZDEyYmQwYzIxY2Y3MzkyNDdmIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUt
MjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmly
dHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlM
aXN0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5nIGEgcGxh
dGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0Yy4pCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxp
c3RUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNw
bGF5TGlzdFRlc3RzQ0cuY3BwCmluZGV4IDg3YTM2YWNmZTZhMTAwY2MzMjNlMjQ4OTdmY2UzODAz
ZjIzNGE3NzguLmE1OThkNTRhMjc1Mjk1OGM0MmU0ZTJiNzllNTMzN2M1N2IxNzRiNDYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRl
c3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNw
bGF5TGlzdFRlc3RzQ0cuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVy
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFkaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Q0cuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC00OSw3ICs1MCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywg
UmVwbGF5V2l0aE1pc3NpbmdSZXNvdXJjZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQg
eyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gaW1hZ2VCdWZmZXJJZGVudGlmaWVyID0g
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwogCkBAIC0xMTMsNyArMTE0
LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBPdXRPZkxpbmVJdGVtRGVjb2RpbmdGYWlsdXJl
KQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRo
TmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4
dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0
KCkgfTsKIAogICAgIERpc3BsYXlMaXN0IG9yaWdpbmFsTGlzdDsKICAgICBXcml0aW5nQ2xpZW50
IHdyaXRlcjsKQEAgLTE0NCw3ICsxNDUsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIElubGlu
ZUl0ZW1WYWxpZGF0aW9uRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0Yo
Q0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAgICBhdXRv
IGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5n
ZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBj
b250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRvIHJ1blRlc3RXaXRoSW52YWxp
ZElkZW50aWZpZXIgPSBbJl0oRmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGlkZW50aWZpZXIuaXNWYWxpZCgpKTsK
</data>
<flag name="commit-queue"
          id="450857"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429623</attachid>
            <date>2021-05-24 20:49:37 -0700</date>
            <delta_ts>2021-05-24 23:50:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524204936.patch</filename>
            <type>text/plain</type>
            <size>379383</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjRiY2E3ZWJlMzQ2ZDU0ZDk4OGY3MTFkMmRhZjU1MWJi
ZTczNjM5NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCA9IDA7CisjaWYg
UExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNoaWxkIHdpbmRvd3Mgc2hv
dWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8gcmF0aGVyIHRoYW4gYWxs
b3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBEZWZhdWx0cyB0bwogICAg
IC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgogI2lmIFVTRShESVJFQ1Qy
RCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiosIFJFQ1Qs
IGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVtRmFjdG9yeSgpOwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRh
cmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZhY3RvcnkoKTsKKyAgICBz
dGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBiZWdpbkRyYXcoKTsKICAg
ICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2b2lkIGVuZERyYXcoKTsK
ICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xpZFN0cm9rZUJydXNoKCkg
Y29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYgLy8gUExBVEZPUk0o
V0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5l
VG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBz
dHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlu
a3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGltcGwoKSB7IHJldHVybiBt
X2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7Ci0KLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBib29sIGhhc0FscGhhID0g
ZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBwbGF0Zm9ybUlu
aXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhhc0FscGhhID0gZmFsc2Up
OwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiwgQml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0
YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwotCi0gICAgdm9pZCBzZXRQ
bGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0KLSAgICB2b2lk
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIHNldFBsYXRm
b3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBD
b2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7Ci0gICAgdm9pZCBzZXRQ
bGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwotCi0gICAg
dm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtQ29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBz
dGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOworICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAor
cHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAg
dm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgcGxh
dGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9pZCBwbGF0Zm9y
bUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
LQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0gICAg
dm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmlu
dGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9r
ZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBAIHByaXZhdGU6CiAgICAg
ZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgoZmxv
YXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CiAgICAgVmVjdG9yPEZs
b2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpbmUs
IGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2ludCBwb2ludDIp
IGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBu
dWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dEltcGw+IG1faW1w
bDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisKK3ByaXZhdGU6CiAgICAg
VmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCi0gICAgY29uc3QgUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lD
b3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07
CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9OworICAgIGJvb2wg
bV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCiBjbGFzcyBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBwcml2YXRlOgogICAgIHVu
c2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRlcnBvbGF0aW9u
UXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5ZGI4MjNjZWEzNTIxYjRj
NWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRl
eHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dElt
cGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjJmZmI0NTQ1YWUy
MzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHRJbXBsKTsKLXB1Ymxp
YzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYpOwotICAgIHZpcnR1
YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQ7IH0KLQotICAgIHZp
cnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBi
b29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
JiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xl
UmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQ
YXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwotI2VuZGlmCi0K
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKSA9IDA7Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2Um
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0g
MDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXN0
b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0gICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIEludFJlY3QgY2xpcEJv
dW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmIGRyYXdpbmdG
dW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQ
bGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5k
aW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIyYjBhNjYyMDg1Li4xMzgw
ZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4LDkgQEAgSW1hZ2VEcmF3
UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIC8v
IEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVoYXZpb3IgZGlmZmVyZW5j
ZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1MsIGl0J3Mg
ZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0LgotICAgIGlmIChjdHh0
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5yZW5kZXJpbmdNb2RlKCkg
PT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAgaWYgKHNpemUoKS53aWR0
aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkg
PT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3Jj
UmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYxN2QxMDAxNmVmNTM4MGZk
ODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZkZGM5NzFhYzJiZWI5ODA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTcxLDcgKzcx
LDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZs
b2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dElt
cGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwogCkBAIC04MCw3ICs3OSw2
IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDogcHVibGljIFJlZkNvdW50
ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVu
ZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdl
KCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9O
dWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9O
dWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2YjIxMTI5YzAzYTBiMGIw
ZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDE1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVi
bGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDogdWludDhfdCB7
CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50cywKKyAgICAg
ICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAgICAgICAgRGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5h
bCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRp
b24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQ
YWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29sIGludmFsaWRhdGluZ0Nv
bnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRz
OyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CisgICAg
Ym9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVj
dGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0
SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBm
aW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNU
MkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFw
cGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgm
KSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYp
IGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBX
aW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQ
aXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVz
KSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3Qg
RmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tl
KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxl
ID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KKyAgICB2
b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25z
dCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCB0cmFuc2xh
dGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVy
biB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwg
eyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWdu
ZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKworICAgIHZvaWQgZHJh
d0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBo
QnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGlu
Z01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQ
b2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0
IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RS
ZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFs
IHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVj
dCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEltYWdlRHJhd1Jl
c3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyBy
ZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBm
aW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFn
ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYs
IEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsg
fQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2lm
IFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJs
ZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lk
IGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9CisgICAg
dm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsg
fQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlv
bjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29u
c3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQor
I2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVs
bHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6CisgICAgY29uc3QgUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmlu
ZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1M2QuLjE4OTVjMjE5Mzc2
NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyArMTk4LDkgQEAgU2hhZG93
Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAg
LCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykg
eworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGgg
cmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBu
ZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtp
dC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9M
ZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZs
b2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRl
eCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2MxLi4xZjRjZDQ0NTQzZjBl
OTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE3NDAsOSAr
MTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENv
bW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9h
dFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihjb250ZXh0
LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFm
ZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNv
cmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0
aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJD
b250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4YWYwNGZhMjU1ZTRmODQz
ZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRmMzRmNDE2NjNkZGQ3NGUx
Mjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMyw3ICszMyw3IEBACiAj
aW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIK
ICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmlt
YXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENH
RmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2MpLCAw
LCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBj
Zyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsKICAgICBjZy5z
ZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVu
KHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMwNTJkNmE5ODkz
MWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJlNTMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNp
ZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJU
aWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQK
IAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMu
c2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAK
ICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwg
YmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUg
bGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXll
clJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0g
Y2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3Jh
cGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJU
aWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJi
NDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2RjZjIzZjc4NTQ5MDViMjc2
MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAt
MjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNB
TGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFj
a2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpk
aXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZgogICAgIFBs
YXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3duZXIoKTsKICAgICBHcmFw
aGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24g
PSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250
ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQg
dG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25p
ZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxl
ZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggY2Y0ODM3NjAzZTBh
YjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uYmE1OTRhZThjYzJhODAyYjY1NjA2MGZiMGUz
YmJhMjIxODY5ODQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogCiAjaWYgVVNFKENB
SVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dENh
aXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1f
cGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQog
ewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rh
dGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9ybUNvbnRleHQp
OwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUo
bV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7
CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZh
dGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQu
Y3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3QqIGNhaXJvQ29u
dGV4dCkKKyAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNv
bnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293
bmVkUGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCiB7Ci0gICAgaWYgKG1f
ZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRl
eHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgIH0KKyAgICBt
X3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQo
KSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsK
IH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdyYXBo
aWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFuc2Zv
cm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAm
bV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUoKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogLy8g
RHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tu
ZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
cik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUlt
YWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFn
ZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIC8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3
IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwg
cG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJv
OjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRy
YXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxs
UGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0
cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
Q2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUo
KSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJu
KDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0dGVy
bikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29s
b3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0
Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Cisg
ICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9y
bWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBDYWly
bzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwg
Y2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRz
KCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBjb25z
dAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRz
KCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRo
ZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNFRF9Q
QVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vs
c2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBh
dGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jpbmco
KnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBh
aW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsK
ICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBv
ZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9yVGV4
dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lk
dGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVz
Rm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxp
bmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgp
LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBt
X3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRD
YWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5n
TW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBs
LT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4g
Q2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQg
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsKLSAg
ICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBj
b2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxs
IG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VD
b2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0
IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNldCB0
aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAg
ICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxl
IHN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAgICAvLyBXZSBmbGlwIHRo
ZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwor
ICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OworICAg
ICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAt
c2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUo
KnBsYXRmb3JtQ29udGV4dCgpLCBzdHJva2VTdHlsZSk7Ci19CisgICAgaWYgKGZsYWdzICYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRB
bnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNv
bmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNz
IGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAg
ICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZl
IG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zmc2V0
LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpw
bGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpl
bmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3JtQ29u
dGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0
IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRh
c2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1D
b250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lSm9p
bigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5
YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0
TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9y
bUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xpcFBh
dGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChj
b25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRlKCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBz
aXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlz
VmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJu
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBD
YWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50U2l6
ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBu
YXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVu
YWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUo
KSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpz
ZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJldHVy
biBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAg
ICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4
dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fp
cm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1dG8g
eU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1H
bHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwg
eE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53
aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKKyAg
ICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2Nh
bGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJsZSBz
eW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAgICBp
ZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcgPSBG
b250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJv
OjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAg
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNC
b2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdp
bmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUu
c2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMWFjYWUxYzY4
OGY1N2IzZjAyNWZjYjgyYTViMDIwNmQ2MDAwNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApA
QCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0cnVj
dCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9y
bUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGlj
c0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29udGV4
dENhaXJvKGNhaXJvX3QqKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRl
eHRDYWlybyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1v
dmVkLgorI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0Q2Fpcm8oKTsK
KworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CisgICAgUGxhdGZv
cm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9p
ZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2Fw
KSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBm
aW5hbDsKKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKKyAgICB2b2lkIHNl
dE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFk
aWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisK
KyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgq
LCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZs
b2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7Cisg
ICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisK
KyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7
CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYs
IGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikg
ZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5h
bDsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBy
b3RhdGUoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7Cisg
ICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgQWZmaW5l
VHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29u
c3QgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFs
OworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01v
ZGUpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dENhaXJvPiBt
X293bmVkUGxhdGZvcm1Db250ZXh0OworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvJiBtX3BsYXRm
b3JtQ29udGV4dDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4MTdiZmQ0ZWQwZjIwNjc3NWFjMjg2
MjI0OTk3MjVhZDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChD
KSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMu
aCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2lu
Y2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1w
bEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybz4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkK
LXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSgKLSAgICAgICAgW2NhaXJvQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8+KGNvbnRleHQsIGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi0gICAg
OiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dChw
bGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRleHQpCi0gICAgOiBHcmFwaGljc0Nv
bnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlx
dWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3Jt
Q29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2
YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0
LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86On5HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8oKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFBy
aXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9y
bUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdAotewotICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdz
KQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6
U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHls
ZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRo
ZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwot
ICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRl
eHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYg
c2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0
YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpT
dGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRB
bnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJTaGFk
b3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRl
eHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAg
Q2Fpcm86OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUpvaW4oTGluZUpv
aW4gbGluZUpvaW4pCi17Ci0gICAgQ2Fpcm86OnNldExpbmVKb2luKG1fcGxhdGZvcm1Db250ZXh0
LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRNaXRl
ckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9w
bGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9w
bGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6
U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBz
dGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAg
Q2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsK
LSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvcjsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAg
ICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3Jt
YWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRp
b24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAg
ICBDYWlybzo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwotICAgIGlmIChyZWN0Lmlz
Um91bmRlZCgpKQotICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86
OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0
YXRlKTsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVj
dCwgY29uc3QgQ29sb3ImKQotewotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7IH0sIENhaXJvOjpTaGFk
b3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgo
bV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwot
ICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRl
eHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQs
IHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVs
bGlwc2UocmVjdCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
Q2Fpcm86OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNt
b290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRh
KCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54
KCk7Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0g
ICAgewotICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhz
W2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZz
ZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0uaGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9u
dF90KiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7Ci0gICAg
ZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsK
LQotICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAgICAgICAgZm9udFNtb290
aGluZyA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0dseXBocyhtX3Bs
YXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNj
YWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAg
ICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUu
c2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAgZm9udFNtb290aGluZyk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGltYWdlLmRyYXcoZ3JhcGhpY3NDb250ZXh0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShO
YXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6
ZHJhd1BsYXRmb3JtSW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2Uo
KS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4obV9wbGF0
Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNp
emUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQx
LCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3Jt
Q29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJs
aW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgo
Y29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWly
bzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgd2lkdGgsIGNvbG9yKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86
OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3aWR0aCwgY29sb3IpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSgpCi17Ci0gICAgQ2Fpcm86
OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6cmVzdG9yZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCi17Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwg
eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5n
bGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2NhbGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZShtX3BsYXRmb3JtQ29u
dGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNvbmNh
dENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3Jt
KTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Z2V0Q1RN
KEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewotICAgIHJldHVybiBDYWly
bzo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17
Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9w
YWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQotewotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3Jt
Q29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNv
bnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQs
IHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgQ2Fpcm86OmNsaXBQYXRo
KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0
YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2Ug
PSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAg
Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+
cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAg
cmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9EcmF3
aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTog
Tm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZs
b2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
ZWRlNWQyYTdlOThkYmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZjZjJiLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
Q0FJUk8pCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLXR5cGVkZWYgc3Ry
dWN0IF9jYWlybyBjYWlyb190OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRm
b3JtQ29udGV4dENhaXJvOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3Jl
YXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZh
Y3RvcnkoY2Fpcm9fdCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNz
Q29udGV4dCYsIFBsYXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIGNhaXJvX3QqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExp
bmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNo
QXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJ
bWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVy
cmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQo
Y29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdp
bmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsK
LQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0OwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRl
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGQzN2ZiNjYzNzNhYWM5MzJh
NzE0ODI1MzQ4NWYzMzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3NTJlNzk1MDBmMzIyYmM1M2NmMDRk
NjA3MDNjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTM1LDcg
KzM1LDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbG9yVHJhbnNmZXJGdW5j
dGlvbnMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDNiZTc1NTY5ZTk3
M2MyYjE2ODk5YTUwNzYyNzVmNTIzZmE4MDcxZWEuLjliNWMwYWQwNzQ0NTE4ODBkZWZkZDNjNDg5
MmU0ZjczYzI4NjQyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5j
bHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNyArNTEsNyBA
QCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJgogCiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRv
cHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250
ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZv
cm1Db250ZXh0KSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRD
YWlybz4obV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBHcmFwaGljc0NvbnRleHQmIEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAppbmRleCA4MWQx
NThlMmRmZjdlNWJmMDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFmLi4yYTE5ZTQ3YTlhYWNlYzIwOTZh
NjBlOTdlM2I1YzQ4NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNs
dWRlICJDYWlyb1VuaXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KQEAgLTQyMSw3ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0
KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZh
Y3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKG1f
cGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihnYyk7CiAgICAgfQogCkBA
IC00NTAsNyArNDUwLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fcGF0aC5nZXQo
KSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcxYjhlMWM5MDdkYTEyNDJhNzZjZTZl
NjE0Nzg3MGUuLmZkYjFhZTA2NTc0YmRmODE1YzYxNjcwZTA2Y2I2NzdhMDcyMzg5YTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZpbGxD
b2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29u
dGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7
CiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhD
b2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7Ci19Ci0KIGlubGluZSBDR0FmZmlu
ZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAg
IHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChDR0NvbnRleHRHZXRDVE0oY29udGV4dCks
IENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldEJhc2VDVE0oY29udGV4dCkpKTsK
IH0KIAotc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCitzdGF0aWMgSW50ZXJwb2xhdGlv
blF1YWxpdHkgY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkg
cXVhbGl0eSkKIHsKICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKICAgICBjYXNlIGtDR0ludGVycG9s
YXRpb25EZWZhdWx0OgpAQCAtODIsNiArNzcsMzQgQEAgc3RhdGljIEludGVycG9sYXRpb25RdWFs
aXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHEK
ICAgICByZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ7CiB9CiAKK3N0YXRpYyBD
R0ludGVycG9sYXRpb25RdWFsaXR5IGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKKyAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xh
dGlvbkRlZmF1bHQ7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBv
bGF0ZToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25lOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25M
b3c7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICByZXR1
cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5
OjpIaWdoOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7CisgICAgfQorICAg
IHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKworc3RhdGljIENHVGV4dERyYXdp
bmdNb2RlIGNnVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit7Cisg
ICAgYm9vbCBmaWxsID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOworICAg
IGJvb2wgc3Ryb2tlID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7Cisg
ICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQorICAgICAgICByZXR1cm4ga0NHVGV4dEZpbGxTdHJva2U7
CisgICAgaWYgKGZpbGwpCisgICAgICAgIHJldHVybiBrQ0dUZXh0RmlsbDsKKyAgICByZXR1cm4g
a0NHVGV4dFN0cm9rZTsKK30KKwogc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRNb2Rl
KENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewogICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xNTYsMzUgKzE3OSwzOSBAQCBzdGF0
aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTQogICAgIHJldHVybiBrQ0dCbGVuZE1vZGVOb3JtYWw7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCkKK0dyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dD
b250ZXh0KQogewogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBt
X2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRl
LgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xh
dGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBu
b3QgZ3JlYXQsIGJlY2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9uIHRoZSBHcmFwaGljc0NvbnRleHQs
IGJ1dCBtYXliZSBpdCBkb2Vzbid0IG1hdHRlcj8KKyAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9y
KCkpOworICAgIHNldFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIHNldFN0cm9rZVRo
aWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CisgICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9s
YXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRl
eHRDRygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dDb250ZXh0UmVmIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6
Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NH
Q29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsK
LSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9j
Z0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZl
KCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMg
Y2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAg
ICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTksOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2ZSgpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGlu
IHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4
dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsyMzAsOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUg
PSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2Us
IGNvbnN0IEZsbwogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9w
ZXJhdGlvbigpOwogICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7
Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24o
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAg
IC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQog
ICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LngoKSwg
YWRqdXN0ZWREZXN0UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNTAsMTAgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdl
LCBjb25zdCBGbG8KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBDR0NvbnRleHRT
ZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQpOwogI2VuZGlmCi0gICAg
ICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBv
bGRCbGVuZE1vZGUpOworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRl
T3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKElt
YWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGlt
YWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVj
dCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxp
c2Vjb25kcygpIDw8ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8
PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8
ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sg
IiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8
ICJtcyIpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8s
IENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2NCw3IEBAIHN0YXRpYyB2b2lkIGRy
YXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0
ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhG
bG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0Q0coY29udGV4
dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGlt
YWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQpAQCAtMzQ3LDE2ICszNzIsMTggQEAgc3RhdGljIHZvaWQgcGF0
dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxPbk1haW5UaHJlYWQoW2lt
YWdlID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZvKSldIHsgfSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3Jt
SW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkK
KyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAg
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9u
cy5ibGVuZE1vZGUoKSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVz
dFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0NTAsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBh
IHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRo
aWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogdGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQ
YXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgp
KTsKIApAQCAtNDU4LDE5ICs0NzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogfQogCiAvLyBU
aGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBw
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0
cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0
aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBm
bG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55
KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSArNTM3LDE1IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhj
b250ZXh0LCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBQYXRoIHBhdGg7
CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRy
YW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0o
Y2dDb250ZXh0KSk7CiAKQEAgLTU2NSwxNiArNTYwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0Nv
bnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVz
ZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQp
KTsKIApAQCAtNjE2LDE1ICs2MDMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURy
YXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICBy
ZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUg
PSBtX3N0YXRlOwpAQCAtNjU0LDE2ICs2MzYsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8
fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTcx
OCwxNSArNjk1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKIApAQCAtNzk0LDE2ICs3NjYsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRl
LmZpbGxHcmFkaWVudCkgewpAQCAtODMzLDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBh
dHRlcm4pCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAotICAgIGJvb2wgZHJhd093blNo
YWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAh
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIg
Zm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkg
JiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3du
U2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04NDYsMjMgKzgx
MCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRG
aWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3Ip
CiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJh
d093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3co
KSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRv
d0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hh
ZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChk
cmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04ODEs
MjAgKzgzNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNv
bnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAK
ICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihj
b250ZXh0LCBjb2xvcik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAg
IGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250
ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAv
LyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzUsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29ucwogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xl
UmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBhdGggcGF0aDsKQEAgLTk1MSw3
ICs4OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihjb2xv
cik7CiAKICAgICAvLyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpIGFzc3VtZXMgdGhhdCB0aGUg
ZWRnZXMgb2YgcmVjdCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9ubHkgY2FyZSBhYm91dCBzaGFk
b3dzIGNhc3QgYXJvdW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBib29sIGRyYXdPd25TaGFkb3cg
PSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJl
bmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVy
cmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dD
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAg
IGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBA
IC05NzAsNTIgKzkxMywyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxD
b2xvcihvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZv
cm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICAvLyBGSVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhh
biBnZXR0aW5nIHRoZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8gdG8g
PHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3
aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5z
Zm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUg
dG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4g
Zm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250
ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKCFp
c0FjY2VsZXJhdGVkQ29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIGJv
b2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4
dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CiAgICAgQ0dS
ZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDog
Q0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9Owog
ICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0
QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKICAgICBDR0NvbnRleHRFT0Ns
aXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25z
dCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBD
R0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICBpZiAo
IXBhdGguaXNFbXB0eSgpKQpAQCAtMTAyMywxNiArOTQyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZv
cm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dCwgQ0dSZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NjAsMTQgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQog
ICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygp
IGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElu
dFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBC
b3VuZHMoKTsKLQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBC
b3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7CiAKQEAgLTEwNzUsMTIgKzk3
Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQgb3BhY2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25v
d25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lM
YXllcihjb250ZXh0KTsKQEAgLTEwODgsMTEgKzk4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAKLWJv
b2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNl
dCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFU
Rk9STShXSU4pCkBAIC0xMTAwLDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zm
c2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAg
ICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vs
c2UKLSAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQorICAgIGlmIChjb250
ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZz
ZXRzKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEyMSwyMSArMTAxNSwyMiBAQCBz
dGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBj
b25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpOworCisgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgeworICAgICAgICBD
R0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGUgc2hhZG93IHNldHVwIGNv
c3Qgd2hlbiB3ZSBrbm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93IG91cnNlbHZlcy4KIAogICAg
IENHRmxvYXQgeE9mZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAgIENHRmxvYXQgeU9mZnNldCA9
IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwotICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVz
ZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxv
YXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0u
YiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTExNTYsNyArMTA1MSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQg
Ymx1ciwgY29uCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJh
d2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJh
ZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAw
LjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKCp0aGlzLCB4
T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRl
ZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9y
IGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBz
ZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVz
ZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUwICsxMDYxLDUzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCwgZmxvYXQgYmx1ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihj
b250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRD
R0NvbG9yKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwg
Q0dTaXplWmVybywgMCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5n
ZSkpCisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0
ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAv
LyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBs
LT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkK
KyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVk
Q0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1p
dChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOwotfQorICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250
ZXh0LCBzdGF0ZS5hbHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xlYXJSZWN0KHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250
YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2Us
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCisgICAgICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5kTW9kZShzdGF0ZS5jb21wb3Np
dGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBDR0NvbnRleHRDbGVhclJlY3Qo
cGxhdGZvcm1Db250ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3
aW5nTW9kZSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQor
ICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91
bGRTbW9vdGhGb250cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQorICAgICAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5
KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKworICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAgICAgc2V0Q0dT
aGFkb3coKnRoaXMsIHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0
YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBs
YXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cikKK3sKKyAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewpAQCAtMTI2
OSwxNiArMTE2Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgo
Y29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
Y2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNlIEJ1dHRDYXA6CiAgICAg
ICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0
KTsKQEAgLTEyOTIsMTYgKzExODIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNh
cChMaW5lQ2FwIGNhcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9h
dCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChk
YXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRh
c2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAtMTMxMiwxNiArMTE5NCw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRh
c2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9y
bUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKICAgICAg
ICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0
ZXIpOwpAQCAtMTMzNSw5NCArMTIwOSw0MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
YW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGNs
aXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUo
c2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTY2FsZUNUTShw
bGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBtX2Rh
dGEtPnNjYWxlKHNpemUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93
blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRl
KGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCBhbmdsZSk7CiAgICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAgIG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICBt
X2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250
ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKICAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRT
ZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5zZXRDVE0o
dHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0Jl
SWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6
Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVk
ZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAgLy8gVGhlIENUTSB1c3VhbGx5
IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0
aGUKICAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFj
dG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUg
dGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgpAQCAt
MTQzMiwxNCArMTI1NSw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogICAgIHJldHVybiBDR0Nv
bnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRp
bmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRU
b0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGlu
Z01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJl
Y3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2
aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAvLyBJdCBpcyBub3QgZW5vdWdo
IGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBh
cnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNl
IGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhhdmUgYQogICAgIC8vIHJvdGF0
aW5nIGltYWdlIGxpa2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBjbG9jayB3aWRnZXQuIFdlIGp1
c3QgbmVlZCB0aGUgc2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk5LDExIEBAIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVk
TG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFycmF5
IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVjdC53
aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWln
aHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMu
c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVMaW5lcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDb2xvciBsb2Nh
bFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNv
bXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50
LCBGbG9hdFNpemUod2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0
cm9rZUNvbG9yKTsKQEAgLTE1NTYsMTYgKzEzNTcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LAogICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxp
bmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRV
UkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRz
LiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgotICAgIH0K
LQogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5jcmVhdGVDRlVSTCgpOwog
ICAgIGlmICghdXJsUmVmKQogICAgICAgICByZXR1cm47CkBAIC0xNTc5LDM2ICsxMzcyLDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29u
dGV4dCwgdXJsUmVmLmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0Nv
bnRleHRHZXRDVE0oY29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBtb2Rl
KQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAgIENHSW50ZXJwb2xh
dGlvblF1YWxpdHkgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAg
ICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAg
cXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Ob25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBv
bGF0aW9uTG93OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5
OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAg
ICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwg
cXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0NBTGF5
ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0Eg
Q29udGV4dC4KICAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNMYXllckNvbnRleHQpCkBA
IC0xNjE3LDEyOSArMTM4MiwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVy
Q29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZs
YWdzICY9IH5Jc0xheWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXND
QUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjppc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYmIChtX2RhdGEtPm1fY29udGV4
dEZsYWdzICYgSXNMYXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8g
U2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBBU1NFUlQobV9kYXRhKTsKICAg
ICBpZiAoaXNBY2NlbGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyB8PSBJ
c0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5tX2NvbnRl
eHRGbGFncyAmPSB+SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9pbXBsKQotICAg
ICAgICByZXR1cm4gbV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQ7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxl
cmF0ZWRDR0NvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRl
eHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwotICAgIAotICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2Rl
OjpGaWxsKTsKLSAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2Rl
OjpTdHJva2UpOwotICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ryb2tlKTsKLSAgICBlbHNlIGlm
IChmaWxsKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NH
VGV4dEZpbGwpOwotICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4
dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNldENHU3Ryb2tlQ29sb3IocGxhdGZvcm1D
b250ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6
Om1heCh0aGlja25lc3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9v
bCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNl
dFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZFNt
b290aEZvbnRzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFs
cGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxl
bmRNb2RlKQorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgp
IGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUocGxhdGZvcm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRNb2RlKGNvbXBvc2l0ZU9wZXJh
dG9yLCBibGVuZE1vZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElz
QWNjZWxlcmF0ZWRDR0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250
ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgIC8v
IENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8g
aGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBj
aGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywg
c3VjaCBhcyBmb2N1cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MTEsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQogICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZm
aW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSks
IGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dEZp
bGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0
YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIGZpbGxF
bGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQyMyw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkK
ICAgICBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAg
Ly8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9y
cy4KICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRl
cm4pIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3ODEsMTgg
KzE0MzUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVj
dChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRz
SW50ZXJuYWxMaW5rcygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjpzdXBwb3J0c0lu
dGVybmFsTGlua3MoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldERlc3Rp
bmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3QgcmVjdCA9IGRlc3RSZWN0
OwpAQCAtMTgwMiwxNSArMTQ1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5h
dGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgQ0dQ
REZDb250ZXh0U2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJp
bmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBv
aW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBDR1BvaW50
QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7
CiAgICAgQ0dQREZDb250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnRleHQsIG5hbWUuY3Jl
YXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaApp
bmRleCAyNWEwODY2ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBkYzc1Li41ZTIwNjc2OWVi
ZmY4YWQ5MTAyOTE5MzYyMmNmZDFjMmVjNGYyODllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTcyLDUg
KzcyLDEwOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKIH07CiAKK2Ns
YXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29u
dGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKKwor
I2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhIREMsIGJvb2wgaGFzQWxw
aGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisKKyAgICB+R3Jh
cGhpY3NDb250ZXh0Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7
CisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZp
bmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5
RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9r
ZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3Ip
IGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7Cisg
ICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25z
dCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lk
dGgpIGZpbmFsOworCisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpIGZpbmFsOworCisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOwor
ICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJ
c0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChj
b25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJ
bnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChM
aW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZp
bmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5h
bDsKKworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCBy
b3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0IHgsIGZsb2F0IHkpIGZpbmFsOworCisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JikgZmluYWw7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2Fs
ZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisK
KyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNv
bnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5h
dGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsK
KyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UG9pbnQmKSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkg
Y29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOwor
CisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07
Cit9OworCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCA1ZmZj
ZTEyZmVhMjE5ZjMxMDBhOGJlYjk2MjMzMDgwODc4Y2E3YmE2Li42ODY1ZjBiZDQxYmI0ODQ2MGRi
YTFmNGY2YmE1ODA3ODRjY2FlZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwCkBAIC04NSw3ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFj
Z0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0g
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisgICAgYXV0byBj
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oY2dDb250ZXh0LmdldCgpKTsK
IAogICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKG51bGxwdHIsIGRhdGEsIG51bUJ5dGVzLCBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRh
dGEsIHNpemVfdCkgewogICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRl
eCBjZWQzYWRiYTJiNGMxMmYwZTgyM2EwODhkMjVmYzE1YWE4ODlhNDI3Li5mMzNkY2U5MTZkZWIz
NmU5YjI1MmEyNWI4Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTI0NCw3ICsyNDQsNyBAQCBib29sIFBhdGg6
OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0Nv
bnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0Nv
bnRleHQpOwogCiAgICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9p
bnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOwpAQCAtMzA1LDcgKzMwNSw3IEBAIEZs
b2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFw
aGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0
Zm9ybVBhdGgoKSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgc3Ryb2tlU3R5bGVB
cHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCA3NmVhOWFmNGQ0MjMyNDk0
MWE4OTdmYWEzZTVkZmRhYjIzZGY4MTM0Li4wNWEzOTE2NTQwYmI3NmRhM2YwYWJhYTMzOTRmYzhk
ZDA4OGM4ZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdHRlcm5DRy5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBhdHRl
cm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBpZiAoIXBs
YXRmb3JtSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVjdCByZWN0ID0gR3JhcGhp
Y3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCisgICAgQ0dSZWN0IHJlY3Qg
PSBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAogICAgICAg
ICBGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdl
R2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggZTI5
YWVjZGZiZmU2ODAwNjdmY2JhMTkzOWZhZTUxZWRjODc5MmQ0Yy4uZTFlNWI0NDhjYjI2ZmM3ZTAx
NzhhYmNhODdiZTQyMmZiNTgxY2Y3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC0yMyw3ICsy
Myw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQppbmRleCAxNDIxZWI5MGQ3YTQ5
ZDFlNDgyNGI1YWM4OTY4ODEzYTMwNTQzZjdkLi4zODhhZmNkNmY0NmFmYzQ1MjIxZjgwNzFkMzUw
OTY3ZjBlNTM1NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQpAQCAtMTA2LDQ4ICsx
MDYsMzMgQEAgc3RhdGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYg
Y29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgKICAgICBkcmF3Rm9jdXNSaW5nKGNvbnRl
eHQsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBw
YXRoLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBh
dGgucGxhdGZvcm1QYXRoKCksIGNvbG9yKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAotc3Rh
dGljIGJvb2wgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4
dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCitzdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlLCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZzZXQpOwogICAgIENHQ29u
dGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGZv
Y3VzUmluZ1BhdGgpOwogICAgIHJldHVybiBkcmF3Rm9jdXNSaW5nQXRUaW1lKGNvbnRleHQsIHN0
ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCksIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5n
IGRyYXdpbmcuCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG5lZWRzUmVkcmF3ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShwbGF0Zm9ybUNvbnRl
eHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCwgY29sb3IpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJh
dywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1FOiBpbXBsZW1lbnQgYW5p
bWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5nLgotICAgICAgICByZXR1cm47Ci0KICAgICBSZXRhaW5Q
dHI8Q0dNdXRhYmxlUGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRl
TXV0YWJsZSgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAg
Q0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1JlY3QocmVjdCkpOwpAQCAt
MTU3LDE2ICsxNDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lTwogCiAjZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1Jpbmco
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihD
R1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQogICAg
ICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJl
Y3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsKQEAgLTE5OSwxMSArMTc2LDggQEAgc3RhdGljIENHQ29s
b3JSZWYgY29sb3JGb3JNYXJrZXJMaW5lU3R5bGUoRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1v
ZGUgc3R5bGUsIGIKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5l
U3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgLy8gV2Ugd2FudCB0byBmaW5kIHRoZSBudW1iZXIgb2YgZnVsbCBkb3RzLCBzbyB3ZSdyZSBz
b2x2aW5nIHRoZSBlcXVhdGlvbnM6CiAgICAgLy8gZG90RGlhbWV0ZXIgPSBoZWlnaHQKICAgICAv
LyBkb3REaWFtZXRlciAvIGRvdEdhcCA9IDEzLjI0NyAvIDkuNDU3CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggNThjNTEy
NGQ0YjZjNjEzNjRlOGQzNjk2ZjM0OTVmZGIyNjQ1OTdhMC4uZTEzOGMzMjAxZGRlNjQ1MDA1Yjg2
ZDBhOWY2MWE4ZjQwZjc0Njg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzcxLDcgKzM3MSw3IEBAIEdyYXBoaWNz
Q29udGV4dCYgSU9TdXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmIChtX2dy
YXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKIAotICAg
IG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGVuc3VyZVBs
YXRmb3JtQ29udGV4dCgpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0Q0c+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBtX2dyYXBoaWNz
Q29udGV4dC0+c2V0SXNBY2NlbGVyYXRlZENvbnRleHQodHJ1ZSk7CiAKICAgICByZXR1cm4gKm1f
Z3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyMGRhZWY0YmI0MWY1MDY0ZjNjMWJkYTNjMmZjMzY3MzIw
MDRmM2Y3Li4zZTU1MWI4NTc2NjY3NDQ4NTU4NTllYzk4YjFlY2EwNjM1OWMyOWRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBh
dHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CiAKICNpZiBVU0UoQ09SRV9URVhUKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KQEAgLTY4LDcgKzY5LDkgQEAgcHVibGljOgogICAgIERyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbjsgfQogCiBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCBj
cmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNpZiBVU0UoQ09SRV9URVhUKQorICAgIFVuaXF1ZVJl
ZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dCgpOworI2VuZGlmCiAKICAg
ICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
OwogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmKTsKQEAgLTkxLDcgKzk0LDExIEBAIHByaXZhdGU6CiAKICAgICBSZWNvcmRlciYgbV9v
d25lcjsKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gbV9kcmF3R2x5cGhzRGVjb25zdHJ1
Y3Rpb247Ci0gICAgR3JhcGhpY3NDb250ZXh0IG1faW50ZXJuYWxDb250ZXh0OworCisjaWYgVVNF
KENPUkVfVEVYVCkKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29u
dGV4dDsKKyNlbmRpZgorCiAgICAgY29uc3QgRm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRy
IH07CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGlu
Z01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRl
eHRNYXRyaXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggYzA0ODY1MmY5YjBlNjVhYjVjMmM5
Y2U1OThiNTI3NzAyYzhhYTMzZC4uY2FjZjc2NGY1ZGUyYzhjZjZkM2Y0MDAwMmZlYWY1ZTEyMTY5
MWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKIAogI2luY2x1ZGUgPENvcmVUZXh0
L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNzYsNyArNzcsNyBAQCBz
dGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENH
UmVuZGVyaW5nU3RhdGVSZWYgcnN0YQogICAgIHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4
dCgpCitVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0
ZUludGVybmFsQ29udGV4dCgpCiB7CiAgICAgYXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENG
KENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKHRoaXMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNl
dENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJl
dF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxheWVyKSk7CkBAIC04NCw3
ICs4NSw3IEBAIEdyYXBoaWNzQ29udGV4dCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVy
bmFsQ29udGV4dCgpCiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVs
ZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBocywgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxl
Z2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmRyYXdHbHlwaHMpKTsKICAgICBD
R0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3
SW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmRyYXdJ
bWFnZSkpOwogICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dDb250ZXh0Q3JlYXRlV2l0aERl
bGVnYXRlKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwga0NHQ29udGV4dFR5cGVVbmtub3duLCBudWxs
cHRyLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dChjb250ZXh0LmdldCgp
KTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5n
ZXQoKSk7CiB9CiAKIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKFJlY29y
ZGVyJiBvd25lciwgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbikKQEAgLTExOSwzNCArMTIwLDMxIEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1
bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRlCiB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKIHsKICAgICBpZiAobV9vcmlnaW5hbFN0YXRl
LmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNl
dEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9p
bnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNv
bG9yKTsKICAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0
ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGll
bnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFT
U0VSVChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAobV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENv
bnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7
CisgICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2lu
YWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgfQogCiAgICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7Cisg
ICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUu
c3Ryb2tlU3R5bGUuY29sb3IpOwogICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VT
dHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlR3JhZGll
bnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRl
LnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBtX2ludGVybmFs
Q29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0
eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBh
dHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCpt
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LnBhdHRlcm4pOwogICAgIH0KIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNldENUTShtX29yaWdp
bmFsU3RhdGUuY3RtKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxT
dGF0ZS5jdG0pOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBpZiAo
Y29udGV4dFN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCi0gICAgICAgIG1faW50ZXJuYWxD
b250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9v
cmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsK
LSAgICBlbHNlCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFNoYWRvdyhtX29yaWdpbmFs
U3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdp
bmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1z
KTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsKIAotICAgIG1faW50
ZXJuYWxDb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdN
b2RlKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRT
dGF0ZS50ZXh0RHJhd2luZ01vZGUpOwogfQogCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJl
cGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBz
bW9vdGhpbmdNb2RlKQpAQCAtMzAyLDcgKzMwMCw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVy
OjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0
CiAgICAgICAgIHJldHVybjsKIAogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYXV0byB0ZXh0UG9z
aXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpOworICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBv
c2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQVNTRVJU
KCF0ZXh0UG9zaXRpb24ueCk7CiAgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueSk7CiAjZW5kaWYK
QEAgLTMyMSw3ICszMTksNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0ds
eXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgIC8vIElmIHlv
dSBzZXQgdGhlc2UgdHdvIGVxdWFsIHRvIGVhY2ggb3RoZXIsIGFuZCBzb2x2ZSBmb3IgWCwgeW91
IGdldAogICAgIC8vIENUTSAqIGN1cnJlbnRUZXh0TWF0cml4ID0gQ1RNICogWCAqIG1fb3JpZ2lu
YWxUZXh0TWF0cml4CiAgICAgLy8gY3VycmVudFRleHRNYXRyaXggKiBpbnZlcnNlKG1fb3JpZ2lu
YWxUZXh0TWF0cml4KSA9IFgKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRleHRNYXRyaXgg
PSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRH
ZXRUZXh0TWF0cml4KG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIGN0bUZpeHVwOwogICAgIGlmIChhdXRvIGludmVydGVkT3JpZ2luYWxU
ZXh0TWF0cml4ID0gbV9vcmlnaW5hbFRleHRNYXRyaXguaW52ZXJzZSgpKQogICAgICAgICBjdG1G
aXh1cCA9IGN1cnJlbnRUZXh0TWF0cml4ICogaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXgudmFs
dWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNw
cAppbmRleCA1NGQ4NTQ3MTIzZjg5NDdkNmYyZmFjZDdmY2E2Zjk5NTE4MWEyNjcxLi4zOTU3YzQ1
NzZmZTkxMmQ2ODEwMjA3NjEwMDFjYzI0ZjY4Njg4NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw5ICszNCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0
OjpEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIFJlY29yZGVyOjpEZWxlZ2F0ZSogZGVsZWdhdGUpCi0g
ICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7
Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQs
IG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxv
Z2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVsZWdhdGUpOwotICAgIH0pCisgICAgOiBtX2NvbnRl
eHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwg
bG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0ZSkKIHsKIH0KIApAQCAtNDYsMTMgKzQ0
LDYgQEAgdm9pZCBEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9v
bCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKICAgICBtX3JlcGxheWVkRGlzcGxheUxpc3QucmVz
ZXQoKTsKIH0KIAotUmVjb3JkZXImIERyYXdpbmdDb250ZXh0OjpyZWNvcmRlcigpCi17Ci0gICAg
YXV0byogZ3JhcGhpY3NDb250ZXh0SW1wbCA9IGNvbnRleHQoKS5pbXBsKCk7Ci0gICAgQVNTRVJU
KGdyYXBoaWNzQ29udGV4dEltcGwpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZWNvcmRlciY+
KCpncmFwaGljc0NvbnRleHRJbXBsKTsKLX0KLQogdm9pZCBEcmF3aW5nQ29udGV4dDo6cmVwbGF5
RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKIHsKICAgICBpZiAobV9k
aXNwbGF5TGlzdC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaAppbmRleCBkMzdjMDczNWJlYjU1NDkyZDkwZmY5ZWNlNGNhNGRiNzk5NWQ1
ZjU4Li5kOTVkZGRlZjg1NzUyOGM4Mjc5ZTRmMWVmYmYyZDI1ODhmNmNhNGIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTM5LDggKzM5LDkg
QEAgY2xhc3MgRHJhd2luZ0NvbnRleHQgewogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIERy
YXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgUmVjb3JkZXI6OkRlbGVnYXRlKiA9IG51bGxwdHIp
OwogCisgICAgLy8gRklYTUU6IERlZHVwbGljYXRlIHRoZXNlLgogICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigq
dGhpcykubV9jb250ZXh0OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXImIHJlY29yZGVy
KCk7CisgICAgUmVjb3JkZXImIHJlY29yZGVyKCkgeyByZXR1cm4gbV9jb250ZXh0OyB9OwogICAg
IERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9k
aXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0
dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CkBAIC01MCw3ICs1MSw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29u
dGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAg
ICBSZWNvcmRlciBtX2NvbnRleHQ7CiAgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1vcnlEaXNwbGF5TGlzdD4gbV9yZXBsYXllZERpc3BsYXlM
aXN0OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMWE0ZWE2ZGUzYjVhOGNlMzVkOGU3
NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIyMmUyMTgzYTM5MTAzYmQ2OTg1MzQ0NjRkZjNjYjBhOGZm
OTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcApAQCAtNjA1LDExICs2
MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAKIHZvaWQgRHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSNpZiBVU0UoQ0cpCiAgICAgY29udGV4dC5kcmF3UGF0
aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Ci0jZW5kaWYKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERy
YXdQYXRoJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmluZGV4IDA3NDA0MWYyNmEx
ZTk2NGRjNGM3NmY0ODJiYzRjOTkzZTg3ZWUzMTUuLmYxMTdjZmE4MzkzNjA4OWU3MWZkMDVhYjc4
NjQ4YmQyNDhkNWU3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjc5
LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHN0
cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3N0cm9rZVBhdHRl
cm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogICAgIFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmll
ciBmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsbFBhdHRl
cm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogCi0gICAgc3RhdGljIHZvaWQgYnVpbGRlclN0YXRl
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgc3RhdGljIHZvaWQgZHVtcFN0
YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKLQogICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVy
Jik7CiAKQEAgLTMzNSw5ICszMzEsNyBAQCB2b2lkIFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7CiAg
ICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKICAgICAgICAgZW5jb2RlciA8PCBz
dGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUu
c2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cpCisgICAgICAgIGVuY29k
ZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9CiAKICAgICBpZiAoY2hhbmdlRmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkp
CkBAIC00NjMsMTQgKzQ1NywxMiBAQCBPcHRpb25hbDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogCiAgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93
Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAKLSNpZiBVU0UoQ0cpCi0gICAgICAgIE9wdGlvbmFsPGJv
b2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0gICAgICAgIGRlY29kZXIgPj4gc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgaWYgKCFzaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAg
ICAgICBPcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRpdXNNb2RlOworICAgICAg
ICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGlmICghc2hhZG93UmFkaXVz
TW9kZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgc3RhdGVD
aGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gKnNoYWRvd3NVc2VMZWdhY3lS
YWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENHKQorICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
YWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2RlKTsKICAgICB9CiAKICAg
ICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwCmluZGV4IDY5NDQ4MjhkZmM2NGI4NzRiOTM3Y2VlYWRmMmFlZGMyYTY3
MzgxMTUuLjMxMTFiOTE3MTMwMjAwZjkxZjFkODFiZGFmZjBiNGMwNmFmNGU5MTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTMzLDE1ICszMywxNSBAQAog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUg
Ik1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJl
Y29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5p
dGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRl
bGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQp
Ci0gICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQorUmVjb3JkZXI6OlJlY29yZGVyKERp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRl
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGlu
aXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQorICAgIDogbV9kaXNw
bGF5TGlzdChkaXNwbGF5TGlzdCkKICAgICAsIG1fZGVsZWdhdGUoZGVsZWdhdGUpCiAgICAgLCBt
X2lzTmVzdGVkKGZhbHNlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTUwLDkgKzUwLDggQEAgUmVjb3JkZXI6OlJlY29yZGVy
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25z
dCBHcmEKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGluaXRpYWxDVE0sIGluaXRp
YWxDbGlwIH0pOwogfQogCi1SZWNvcmRlcjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlz
cGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoUmVjb3Jk
ZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisg
ICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rpc3BsYXlMaXN0KQogICAgICwgbV9kZWxlZ2F0
ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQodHJ1ZSkKICAgICAsIG1fZHJh
d0dseXBoc1JlY29yZGVyKCp0aGlzLCBwYXJlbnQubV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0ds
eXBoc0RlY29uc3RydWN0aW9uKCkpCkBAIC0xNjYsMTEgKzE2NSw2IEBAIFJlbmRlcmluZ01vZGUg
UmVjb3JkZXI6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogICAgIHJldHVybiBtX2RlbGVnYXRlID8g
bV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotICAgIGFwcGVuZDxDbGVh
clNoYWRvdz4oKTsKLX0KLQogdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCiB7CiAgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwpAQCAtMjA2LDYgKzIwMCwx
MSBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmREcmF3R2x5cGhzSXRlbVdpdGhDYWNoZWRGb250KGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQgogCiB2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VC
dWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGZlZWxzIG9kZCwgYnV0IGlz
IHdoYXQgdXNlZCB0byBoYXBwZW4uCisgICAgaWYgKCFjYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdl
QnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgbV9kaXNwbGF5TGlzdC5jYWNoZUltYWdlQnVmZmVyKGltYWdlQnVmZmVyKTsKICAg
ICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQpAQCAtMjcwLDcgKzI2
OSw3IEBAIHZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKICAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkK
K0FmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBSZXNwZWN0IHRoZSBnaXZlbiB2
YWx1ZSBvZiBJbmNsdWRlRGV2aWNlU2NhbGUuCiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0
bTsKQEAgLTI5OCw4ICsyOTcsOSBAQCB2b2lkIFJlY29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKICAgICBhcHBlbmQ8RHJh
d0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNo
QXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogeworICAgIC8vIEZJWE1FOiBXaHkgaXMgc3Ryb2tlU3R5
bGUgbm90IHVzZWQ/CiAgICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+KEZsb2F0UG9pbnQoKSwg
dG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxp
bmVzKTsKIH0KIApAQCAtMzI4LDYgKzMyOCwxOCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0CiAg
ICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9y
KTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewogICAgIGFwcGVuZDxGaWxsUmVjdD4ocmVjdCk7CkBAIC00NDAs
MTAgKzQ1Miw5IEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwog
fQogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgUmVjb3JkZXI6OmNs
aXBCb3VuZHMoKSBjb25zdAogewotICAgIFdURkxvZ0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBi
b3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0g
ICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0MDk2LCA0MDk2KTsKKyAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzKTsKIH0KIAogdm9pZCBS
ZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtNDUyLDM1ICs0NjMsMzQgQEAgdm9pZCBSZWNvcmRl
cjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3QKICAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJl
bmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQorR3JhcGhpY3NDb250ZXh0OjpDbGlw
VG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
IGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1
bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4dCBuZXN0ZWRDb250ZXh0KFsmXShHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CisgICAgYXV0byBpbml0aWFsQ2xp
cCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAg
ICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1hZ2VCdWZmZXIncyBpbml0aWFsIENUTS4K
LSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRl
eHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgICAgICBGbG9hdFNpemUgc2Nh
bGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOwotICAgICAg
ICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZEludFNpemUoZGVzdGluYXRpb24uc2l6ZSgpICog
c2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsKLSAgICAg
ICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0gICAgICAgIGluaXRpYWxDVE0udHJhbnNsYXRl
KDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZShzY2Fs
ZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0
Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgorICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNj
YWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFu
c2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShk
ZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgQWZmaW5lVHJhbnNmb3JtIGlu
aXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7CisgICAgaW5pdGlhbENUTS50
cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGluaXRpYWxDVE0uc2NhbGUo
c2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29yZGVyKCp0aGlzLCBjb250ZXh0LCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSkpOwotICAgIH0pOworICAg
IFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGlu
aXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBhcHBlbmQ8QmVnaW5DbGlwVG9EcmF3aW5nQ29t
bWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlKTsKICAgICBkcmF3aW5nRnVuY3Rpb24obmVz
dGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGlu
YXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBSZWNvcmRlcjo6Y2FuUGFpbnRG
cmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJiBwbGF5ZXIpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYgRU5BQkxFKFZJREVPKQogdm9pZCBSZWNvcmRl
cjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRp
b24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmll
cigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9u
KTsKIH0KQEAgLTUxNyw3ICs1MjcsNyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21M
b2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgRmxvYXRTaXplIHNo
YWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAgQ29sb3Igc2hhZG93Q29s
b3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBzaGFk
b3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNl
dCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNo
YWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTUsNiBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CiB9
CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAg
IHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOwotfQotCiB2b2lkIFJlY29yZGVyOjpD
b250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGN0bS50cmFu
c2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBi
ODc2ZDZhZGI1MTQ3M2YxZjMwYWFiZGMyYmEyNWFhM2I2MDI0MTliLi4wZDg2NjFjMTc5YzdjYTlj
N2M5ZDIxZjE5NDM0MGM5N2JiOTk0NWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJl
Y29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgogI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxh
eUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRp
bGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFzcyBEZWxlZ2F0ZTsKLSAgICBXRUJDT1JFX0VY
UE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNE
ZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVy
KERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxs
cHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdH
bHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CkBAIC03NywxNSArNzcsMjQgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBEcmF3R2x5cGhzUmVjb3JkZXI7Ci0g
ICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOworICAgIFJlY29yZGVyKFJlY29yZGVyJiBwYXJl
bnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKTsKIAogICAgIGJvb2wgaGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBi
b29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0IG92ZXJyaWRl
OworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhpcz8KKyAgICBib29sIGNhbkRyYXdJbWFn
ZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRy
OyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
KyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRl
eHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGUgeyBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZs
b2F0UmVjdCYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBvdmVycmlkZSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNh
cChMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRlOwpAQCAtMTA1LDcgKzExNCw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0jaWYgVVNF
KENHKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHZvaWQgYXBwbHlTdHJva2VQ
YXR0ZXJuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgb3ZlcnJpZGU7
CiAjZW5kaWYKQEAgLTEyMCwxNCArMTI5LDIwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVMaW5lcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIHZvaWQgc2F2
ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwogCkBAIC0xMzYsNyAr
MTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJy
aWRlOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRl
OwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAg
IEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2Nh
bGUpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTE0NSwxMiArMTYwLDEyIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQ
YXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJy
aWRlOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
Y2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFu
ZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNw
YWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisKICNp
ZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBh
aW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlOwogI2Vu
ZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpA
QCAtMTczLDcgKzE4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0g
ICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRl
eHQoKSkpCisgICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcygqdGhp
cykpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChl
eHRlbnRGcm9tTG9jYWxCb3VuZHMoKnJlY3QpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8g
cmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlz
dC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CkBAIC0xOTUsNyArMjEwLDYgQEAgcHJpdmF0
ZToKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYp
IGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0g
ICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgQ29u
dGV4dFN0YXRlIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQppbmRleCA2NWJjYTY3MGY5
Mjg2ZDI1YTE5NTE5MjFiODVmMGEwNWEwMTUyZDUxLi44OWQ4ODJjNTdmNDc2MWU1NDZkZDQyNDcw
MWYzM2QyZmIyMDMxZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbG9yTWFjLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBVU0UoQVBQS0lUKQog
CisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2lt
cG9ydCA8d3RmL0xvY2suaD4KQEAgLTg1LDcgKzg2LDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JB
PHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKICAg
ICAgICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VSZXA+IG9mZnNjcmVlblJlcCA9IGFkb3B0TlMo
W1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERhdGFQbGFuZXM6bmlsIHBp
eGVsc1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAgICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1w
bGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQbGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNE
ZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93OjQgYml0c1BlclBpeGVsOjMyXSk7CiAKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0IGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdy
YXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29u
dGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGJpdG1hcENvbnRleHQoW05TR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAu
Z2V0KCldLkNHQ29udGV4dCk7CiAgICAgICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQoYml0bWFwQ29udGV4dCk7CiAKICAgICAgICAgW2NvbG9yIGRyYXdTd2F0Y2hJ
blJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXggY2U3YWJkN2I0ZTk1ZWViMzg5NmFl
NWQ5YjNjYTRkMWNlMGZlYjllZi4uNTU0ODBiNTJiOTFlMDI4NjJmZjBiZmMxMzA2ZGE4MGQ2MDNj
NTQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJX
ZWJMYXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBs
YXRmb3JtQ0FMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CkBAIC01
MSw3ICs1MSw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQK
IHsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNB
TGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAgaWYgKGxheWVyKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpSZXBhaW50UmVjdExpc3Qg
cmVjdHNUb1BhaW50ID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpjb2xsZWN0UmVjdHNUb1Bh
aW50KGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCkpOwogICAgICAgICBXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0
KCksIHJlY3RzVG9QYWludCwgc2VsZi5pc1JlbmRlcmluZ0luQ29udGV4dCA/IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJQYWludFNuYXBzaG90dGluZyA6IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWlu
dE5vcm1hbCk7CiAgICAgfQpAQCAtMTI4LDcgKzEyOCw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4
dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZv
ckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93
bmVyKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29u
dGV4dCh0cnVlKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggZjMyNzY0MzY4
NTFjYzdlMDFkNDcwYzU3MGQ5ZDlmMDZjMjNkNWZjNS4uNTc3NGQwZGUwZTk0MDkyZDg0YjczMmU5
ODQzOTA2MzYzZTA1NjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTcyLDkgKzcyLDggQEAgYXV0byBjcmVhdGVD
b21tYW5kKCkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0
YTw+LCBUPjo6dmEKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUPigpOwogfQogCi1DYWlyb09wZXJh
dGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlzdCkKLSAgICA6IEdyYXBoaWNzQ29u
dGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCitDYWly
b09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0
aW9ucyYgY29tbWFuZExpc3QpCisgICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewog
ICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJl
Y3QoKSB9KTsKIH0KQEAgLTE1NCwxMCArMTUzLDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXAK
ICAgICB9CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQot
ewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBs
aW5lQ2FwKQogewogICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8TGluZUNhcD4gewpAQCAtMjUwLDcgKzI0NSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC0yNzAsNyArMjY1LDcgQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0Pihy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCkBAIC0yOTIsNyArMjg3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVu
dCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEu
MCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pKSk7CiB9CiAKQEAgLTMxNiw3ICsz
MTEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLAogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOwogfQogCkBAIC0zNDYsNyArMzQx
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVj
dD4ocm91bmRlZFJlY3QsIGNvbG9yLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2Rl
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTM2Nyw3ICszNjIsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogICAgIH07CiAKICAgICBVTlVTRURfUEFSQU0oY29sb3Ip
OwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0
LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkp
OwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCkBAIC0zODYsNyArMzgxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFBhdGg+KHBhdGgsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQog
CkBAIC00MDgsNyArNDAzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
CiB9CiAKQEAgLTQyOCw3ICs0MjMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQ0OCw3ICs0NDMsNyBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0
aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQ3MCw3ICs0NjUsNyBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTIz
LDcgKzUxOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25z
dCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlw
aHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
CiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LAogICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkp
LApAQCAtNTUzLDcgKzU0OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvCiAgICAgfTsKIAog
ICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25z
LCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTkzLDcgKzU4OCw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBi
b3JkZXJUaGlja25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNz
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikp
OwogfQogCkBAIC02MTMsMTEgKzYwOCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3Rh
dGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQordm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewogICAgIHN0cnVj
dCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRh
dGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKICAg
ICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKQEAgLTYzMyw3ICs2
MjgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9y
VGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5l
cywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIH0KIApAQCAtNjcyLDE0ICs2NjcsMTAgQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwog
fQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQot
ewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewogICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5nIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24s
IE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENvbG9yPiB7CkBAIC05MDMsNyArODk0LDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCiAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKIH0K
IAotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCkuY3RtOwogfQpAQCAtMTAz
Miw3ICsxMDIzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICB9CiB9CiAKLUludFJlY3QgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpCitJbnRSZWN0IENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0
ZVN0YWNrLmxhc3QoKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZl
cnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJvdW5kcykpOwpAQCAtMTA3NiwxNSArMTA2NywxNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRp
bmdPcGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUo
Y29tbWFuZCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2Um
LCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQorR3JhcGhpY3NDb250ZXh0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JT
cGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7CiAgICAgLy8gRklY
TUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVz
dWx0OjpTdWNjZXNzOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVk
aWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKICAgICAv
LyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFt
ZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCAzMDhm
MWZmNjM2NTZhZGE0MDlmMGQ1ZjUwMzZiYzkxZTI1ZDdiNmQyLi43N2FlNTBkZjA0OTJkM2FiZjg4
ZmRmN2M1YzMzOTk3Mjc3YmJjNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC0yOCwyMSArMjgsMjAgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uLmgiCiAK
IG5hbWVzcGFjZSBOaWNvc2lhIHsKIAotY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsK
IHB1YmxpYzoKLSAgICBDYWlyb09wZXJhdGlvblJlY29yZGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCYsIFBhaW50aW5nT3BlcmF0aW9ucyYpOworICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIo
UGFpbnRpbmdPcGVyYXRpb25zJik7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBu
dWxscHRyOyB9CiAKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNl
dExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKQEAg
LTUzLDYgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92
ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6
QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJp
ZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdl
YkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKQEAgLTcwLDEwICs3MCw5IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9p
bnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIHZv
aWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpT
dHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0
eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYp
IG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgm
LCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwpAQCAtODYsNyArODUsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtJikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTk1LDEyICs5NCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNs
aXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBX
ZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRS
ZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVm
ZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7
CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1
bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZv
aWQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShW
SURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYs
IGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJv
b2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IFdlYkNvcmU6Ok1lZGlhUGxheWVyJikgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAgICAgdm9pZCBhcHBseURl
dmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4
dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fp
cm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAppbmRleCAwMDExMDBmNzc3ODFlNGNm
NWI4YzFkODdhMmM2YzM3Y2NlOGFhZjU0Li40OWFiY2FhNDUyNTMxNDUzODRiMzU1ODg0Njg2N2Uw
Y2ZiZDA2YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9u
aWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdD
b250ZXh0Q2Fpcm8uY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaWYgVVNFKENBSVJPKQogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJOaWNv
c2lhQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCIK
ICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb25SZXBsYXlDYWlyby5oIgpAQCAtNzEs
NyArNzEsNyBAQCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OkZvclBhaW50aW5n
KEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgbV9jYWlyby5jb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG1fY2Fpcm8uc3VyZmFjZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0ID0g
bWFrZVVuaXF1ZTxXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRDYWlybz4obV9jYWlyby5jb250ZXh0
LmdldCgpKTsKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0PihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZh
Y3RvcnkoKm1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtl
VW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvPigqbV9wbGF0Zm9ybUNvbnRleHQp
OwogfQogCiBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6On5Gb3JQYWludGluZygp
CkBAIC0xMDQsMTEgKzEwNCw3IEBAIHZvaWQgUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclBhaW50
aW5nOjpyZXBsYXkoY29uc3QgUGFpbnRpbmdPcGVyYXRpb25zJiBwYWludGluCiAKIFBhaW50aW5n
Q29udGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6OkZvclJlY29yZGluZyhQYWludGluZ09wZXJhdGlv
bnMmIHBhaW50aW5nT3BlcmF0aW9ucykKIHsKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VV
bmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigKLSAgICAgICAgWyZwYWludGluZ09wZXJh
dGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4oY29udGV4
dCwgcGFpbnRpbmdPcGVyYXRpb25zKTsKLSAgICAgICAgfSk7CisgICAgbV9ncmFwaGljc0NvbnRl
eHQgPSBtYWtlVW5pcXVlPENhaXJvT3BlcmF0aW9uUmVjb3JkZXI+KHBhaW50aW5nT3BlcmF0aW9u
cyk7CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6On5Gb3JSZWNvcmRp
bmcoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcAppbmRleCA4MzBhZWQwODIy
ZjU3NWQ1MmM4YmRiZDFjZTI4MmI4ZWJhN2Q1MGJiLi4wZjlkODcyOWU3MWRkNDJlODBlNTllZWIz
OGJhODFjMDRiZWNmM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKQEAgLTI5LDcgKzI5
LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRl
ICJQYXRoLmgiCiAKQEAgLTY3LDMyICs2NywxOSBAQCBzdGF0aWMgUmV0YWluUHRyPENHQ29udGV4
dFJlZj4gQ0dDb250ZXh0V2l0aEhEQyhIREMgaGRjLCBib29sIGhhc0FscGhhKQogICAgIHJldHVy
biBjb250ZXh0OwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRj
LCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKEhE
QyBoZGMsIGJvb2wgaGFzQWxwaGEpCisgICAgOiBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRX
aXRoSERDKGhkYywgaGFzQWxwaGEpKQogewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhh
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29s
IGhhc0FscGhhKQotewotICAgIGlmICghaGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Rh
dGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMo
aGRjLCBoYXNBbHBoYSkpOwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7Ci0gICAgaWYgKG1fZGF0
YS0+bV9jZ0NvbnRleHQpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0
cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSk7Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3Io
KSk7Ci0gICAgfQogfQogCiAvLyBGSVhNRTogSXMgaXQgcG9zc2libGUgdG8gbWVyZ2UgZ2V0V2lu
ZG93c0NvbnRleHQgYW5kIGNyZWF0ZVdpbmRvd3NCaXRtYXAgaW50byBhIHNpbmdsZSBBUEkKIC8v
IHN1aXRhYmxlIGZvciBhbGwgY2xpZW50cz8KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNl
V2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBw
b3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1f
ZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVk
Qml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNw
YXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRh
LT5yZXN0b3JlKCk7CisgICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3Jl
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExMCw3ICs5Nyw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVj
dCYgZHN0UmVjdCwgYm9vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN1cHBvcnRBbHBoYUJsZW5kID8ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSkpOwogCiAgICAgYXV0byBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dC5n
ZXQoKSkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgp
LCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpLT5tX2NnQ29udGV4dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2UuZ2V0
KCkpOwogICAgIAogICAgIC8vIERlbGV0ZSBhbGwgb3VyIGp1bmsuCiAgICAgOjpEZWxldGVEQyho
ZGMpOwpAQCAtMTI0LDIxICsxMTEsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5k
b3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG8KICAgICBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGltYWdlRGF0YS5nZXQoKSkpOwogICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlLT5zaXpl
KCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIGltYWdlLT5ieXRlc1Bl
clJvdygpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUg
fCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1f
Y2dDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+
c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsg
ICAKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1f
Y2dDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+
c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsg
ICAKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYg
cGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgLy8gRklY
TUU6IGltcGxlbWVudAogfQogCiAvLyBGSVhNRTogVGhpcyBpcyBuZWFybHkgaWRlbnRpY2FsIHRv
IHRoZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcgZnVuY3Rpb24gaW4gR3JhcGhpY3ND
b250ZXh0TWFjLm1tLgogLy8gVGhlIGNvZGUgY291bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHRD
Ry5jcHAgYW5kIGJlIHNoYXJlZC4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICBmbG9hdCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDIu
MGY7CiAgICAgb2Zmc2V0ICs9IHJhZGl1czsKICAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29s
b3IuaXNWYWxpZCgpID8gY2FjaGVkQ0dDb2xvcihjb2xvcikgOiBudWxscHRyOwpAQCAtMTY0LDEx
ICsxNDgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLAogICAgIENHQ29udGV4dFJlc3RvcmVH
U3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKHN0eWxlLm1vZGUgIT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5n
ICYmIHN0eWxlLm1vZGUgIT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ0LDUgKzIyNSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQogICAgIENHQ29udGV4dEZsdXNoKG1fY2dDb250
ZXh0LmdldCgpKTsKIH0KIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGlj
c0NvbnRleHRDRzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9kYXRhOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CmluZGV4IGYxNDQyNTcyY2M2ZDFkNTRiYmVlNThiZGJjMzZlZGY3NzRhYWJiNjQuLjdmMTEwZjM1
MGE2OTdjZmJhZWNlOTA2OTJiZjIzMjk5Y2RkNzhhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENh
aXJvV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUGF0
aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTY2LDI4ICs2Niw5IEBAIHN0YXRp
YyBjYWlyb190KiBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxw
aGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFw
aGljc0NvbnRleHRDYWlybyhIREMgZGMsIGJvb2wgaGFzQWxwaGEpCisgICAgOiBHcmFwaGljc0Nv
bnRleHRDYWlybyhjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBoYXNBbHBoYSkpCiB7Ci0g
ICAgcGxhdGZvcm1Jbml0KGRjLCBoYXNBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpwbGF0Zm9ybUluaXQoSERDIGRjLCBib29sIGhhc0FscGhhKQotewotICAgIGlmICghZGMpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3QqIGNyID0gY3JlYXRlQ2Fpcm9Db250ZXh0V2l0
aEhEQyhkYywgaGFzQWxwaGEpOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjcikpOwotICAg
IG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRh
KTsKLSAgICBtX2RhdGEtPm1faGRjID0gZGM7Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT5j
cigpKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3
aXRoIG91ciBzdGF0ZS4KLSAgICAgICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkp
OwotICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIH0K
LSAgICBpZiAoY3IpCi0gICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwogfQogI2VuZGlmCiAKQEAg
LTEyNyw5ICsxMDgsOSBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9Db250ZXh0KFBsYXRmb3Jt
Q29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERJQgogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRz
dFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFw
ID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwor
ICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICghaGRjIHx8
ICFjcmVhdGVkQml0bWFwKSB7Ci0gICAgICAgIG1fZGF0YS0+cmVzdG9yZSgpOworICAgICAgICBk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+cmVzdG9yZSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNzgsNCArMTU5LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU6OmZsdXNoKCkKIH0KICNlbmRpZgogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuY3BwCmluZGV4IDI5YTgyYTg5NzgyMjliMGY1ODczYWJkZjgyYmZhZjgwNmNm
MTY1OTguLmVkMWU3MThiZTQxOWQ4ZmU0NzJmZWVkZTUyMjU2MThjM2ZmMzEzNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmNwcApAQCAtNDcsMTcgKzQ3LDE3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywg
Ym9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRE
aXJlY3QyRChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIHBsYXRmb3JtSW5pdChoZGMs
IGhhc0FscGhhKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhk
YywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29sIGhh
c0FscGhhKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJE
KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwg
Ym9vbCBoYXNBbHBoYSkKIHsKICAgICAvLyBDcmVhdGUgYSBEQyByZW5kZXIgdGFyZ2V0LgogICAg
IGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IERpcmVjdDJEOjpyZW5kZXJUYXJnZXRQcm9wZXJ0aWVz
KCk7CiAKLSAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkt
PkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwor
ICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsK
ICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAogICAgICgqcmVuZGVyVGFyZ2V0
KS0+QmluZERDKGhkYywgJnJlY3QpOwpAQCAtNjcsMTIgKzY3LDEyIEBAIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJU
YXJnZXQsIFJFCiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKIH0KIAotR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJlclR5cGUpCitHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZSByZW5kZXJlclR5cGUpCiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhp
Y3NDb250ZXh0LCByZW5kZXJlclR5cGUpOwogfQogCi1JRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29u
dGV4dDo6c3lzdGVtRmFjdG9yeSgpCitJRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzeXN0ZW1GYWN0b3J5KCkKIHsKICAgICBzdGF0aWMgSUQyRDFGYWN0b3J5KiBkaXJlY3Qy
REZhY3RvcnkgPSBudWxscHRyOwogICAgIGlmICghZGlyZWN0MkRGYWN0b3J5KSB7CkBAIC04OSw3
ICs4OSw3IEBAIElEMkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkK
ICAgICByZXR1cm4gZGlyZWN0MkRGYWN0b3J5OwogfQogCi1JRDJEMVJlbmRlclRhcmdldCogR3Jh
cGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKK0lEMkQxUmVuZGVyVGFyZ2V0KiBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiB7CiAgICAgc3Rh
dGljIElEMkQxUmVuZGVyVGFyZ2V0KiBkZWZhdWx0UmVuZGVyVGFyZ2V0ID0gbnVsbHB0cjsKICAg
ICBpZiAoIWRlZmF1bHRSZW5kZXJUYXJnZXQpIHsKQEAgLTEwNCw3ICsxMDQsNyBAQCBJRDJEMVJl
bmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKICAgICBy
ZXR1cm4gZGVmYXVsdFJlbmRlclRhcmdldDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgaWYg
KCFoZGMpCiAgICAgICAgIHJldHVybjsKQEAgLTEzNiwxMiArMTM2LDEyIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICAvLyBG
SVhNRTogbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9s
YXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29u
dGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1D
b250ZXh0KQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRm
b3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKIHsK
ICAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTU1LDE2ICsx
NTUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXQKICAgICAvLyBGSVhNRTogbV9zdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENH
Q29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHREaXJlY3QyRCgpCiB7CiAgICAgZGVsZXRlIG1fZGF0
YTsKIH0KIAotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1Db250ZXh0KCkgY29uc3QKK1BsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICByZXR1cm4gbV9pbXBsLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBBU1NFUlQoIXBh
aW50aW5nRGlzYWJsZWQoKSk7CiAgICAgcmV0dXJuICZtX2RhdGEtPnBsYXRmb3JtQ29udGV4dCgp
OwogfQogCkBAIC0xOTUsMzMgKzE5MiwyOCBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OmN1cnJlbnRHbG9iYWxBbHBoYSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWxwaGE7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogICAgIERpcmVjdDJEOjpz
YXZlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3Jl
KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZSgpOwogICAgIERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQo
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBD
T01QdHI8SUQyRDFCaXRtYXA+JiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2Uu
Z2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhh
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBEaXJlY3QyRDo6ZHJhd05hdGl2
ZUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwg
RGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwg
Ym9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJl
bGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29s
IHN1cHBvcnRBbHBoYUJsZW5kKQogewogICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8
fCAhbV9kYXRhLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNy
ZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTI2MiwzNCArMjU0LDM1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
CiAgICAgOjpEZWxldGVEQyhoZGMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dp
bmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NC
aXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7CisgICAgRGlyZWN0
MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0
eWxlKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdU
eXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmlu
Z1R5cGUpCiAgICAgOiBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBt
X3JlbmRlcmVyVHlwZShyZW5kZXJpbmdUeXBlKQogewogICAgIGlmICghbV9wbGF0Zm9ybUNvbnRl
eHQucmVuZGVyVGFyZ2V0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3JlbmRlcmVy
VHlwZSA9PSBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpCisgICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQogICAgICAgICBiZWdpbkRy
YXcoKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogICAg
IDogbV9vd25lZFBsYXRmb3JtQ29udGV4dChXVEZNb3ZlKG93bmVkUGxhdGZvcm1Db250ZXh0KSkK
ICAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQogICAgICwg
bV9yZW5kZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKQEAgLTI5Nyw3ICsyOTAsNyBAQCBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShz
dGQ6OnVuaXF1ZV9wdHI8UAogICAgIGlmICghbV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCisgICAgaWYg
KG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQogICAgICAgICBiZWdpbkRyYXcoKTsKIH0KIApAQCAt
MzEwLDkgKzMwMyw4IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiAgICAgICAgIGVuZERyYXcoKTsKIH0KIAotSUQyRDFT
b2xpZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQorSUQyRDFTb2xpZENvbG9yQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpicnVzaFdpdGhDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPmJydXNoV2l0
aENvbG9yKGNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbG9yKSkuZ2V0KCk7CiB9CiAKQEAgLTM3Miw3
MyArMzY0LDYwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpyb3RhdGUo
ZmxvYXQgYW5nbGUpCiB7CiB9CiAKLUQyRDFfQ09MT1JfRiBHcmFwaGljc0NvbnRleHQ6OmNvbG9y
V2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKK0QyRDFfQ09MT1JfRiBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3Im
IGNvbG9yKSBjb25zdAogewogICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29sb3IudG9TUkdCQUxv
c3N5PGZsb2F0PigpOwogICAgIHJldHVybiBEMkQxOjpDb2xvckYociwgZywgYiwgYSAqIG1fZGF0
YS0+Y3VycmVudEdsb2JhbEFscGhhKCkpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHQ6OnNvbGlkU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnNvbGlkU3Ryb2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoLmdldCgpOwogfQogCi1JRDJEMUJydXNoKiBH
cmFwaGljc0NvbnRleHQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoLmdldCgpOwogfQogCi1JRDJEMUJy
dXNoKiBHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CitJRDJEMUJy
dXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QK
IHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoLmdl
dCgpOwogfQogCi1JRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxsQnJ1c2go
KSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5GaWxs
QnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJu
RmlsbEJydXNoLmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5EcmF3KCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygpCiB7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+YmVnaW5EcmF3
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmREcmF3KCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmVuZERyYXcoKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZsdXNoKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZsdXNo
KCkKIHsKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpm
bHVzaCgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3UGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRl
cm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byB0aWxlSW1hZ2UgPSBpbWFnZTsKICAg
ICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBXVEZNb3ZlKHRpbGVJ
bWFnZSksIEludFNpemUoaW1hZ2Uuc2l6ZSgpKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJs
ZW5kTW9kZSgpKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJv
a2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJU
aGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0Lmlz
RW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdSZWN0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CkBAIC00OTAsNTIgKzQ2OSwyOSBAQCBE
MkQxX1NUUk9LRV9TVFlMRV9QUk9QRVJUSUVTIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6c3Ryb2tlU3R5bGVQcm9wZXJ0aQogICAgIHJldHVybiBEMkQxOjpTdHJva2VTdHlsZVByb3Bl
cnRpZXMobV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xp
bmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9s
aW5lSm9pbiwgbV9wbGF0Zm9ybUNvbnRleHQubV9taXRlckxpbWl0LCBEMkQxX0RBU0hfU1RZTEVf
U09MSUQsIDAuMGYpOwogfQogCi1JRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtU3Ryb2tlU3R5bGUoKSBjb25zdAorSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnN0cm9rZVN0eWxlKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+c3Ryb2tlU3R5bGUo
KTsKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0
cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd0xpbmUoKnBs
YXRmb3JtQ29udGV4dCgpLCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRl
LnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlh
cyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdFbGxp
cHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBE
aXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxs
Q29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseVN0cm9rZVBhdHRlcm4oKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vy
VG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkgbmVlZGVkIG9uIFdpbmRvd3MK
IApAQCAtNTQzLDExICs0OTksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQ
YXR0ZXJuKCkKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2ggPSBh
ZG9wdENPTShtX3N0YXRlLnN0cm9rZVBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybigqdGhp
cywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFw
cGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFm
ZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNOyAvLyBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkg
bmVlZGVkIG9uIFdpbmRvd3MKIApAQCAtNTU1LDE3OSArNTA4LDEwNCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0
dGVybkZpbGxCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRm
b3JtUGF0dGVybigqdGhpcywgcGF0dGVybkFscGhhLCB1c2VyVG9CYXNlQ1RNKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7Cisg
ICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3Qy
RDo6ZHJhd1BhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwg
KnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Zmls
bFBhdGgocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
dXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUGF0
aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBj
b250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKGNv
bnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0
aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUmVjdChyZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVj
dDJEOjpmaWxsUmVjdChjb250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIEdyYWRpZW50JiBncmFkaWVudCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgIGF1dG8gYnJ1c2ggPSBncmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKSk7CisgICAgaWYgKCFicnVzaCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
QVNTRVJUKCFtX2ltcGwpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOworfQogCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVy
YXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK3sKKyAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgQ29tcG9zaXRlT3BlcmF0
b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOworCisgICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNv
bXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OworICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1D
b250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpjbGlwKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6
Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcE91dCgqcGxhdGZvcm1D
b250ZXh0KCksIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBEaXJlY3QyRDo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVs
ZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0lu
dFJlY3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6U3Rh
dGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIApAQCAtNzM1LDE4ICs2
MTMsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVCghbV9pbXBsKTsKLQorICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihvcGFjaXR5KTsKICAgICBzYXZlKCk7CiAKICAgICBtX3N0YXRlLmFscGhhID0gb3Bh
Y2l0eTsKIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBvcGFjaXR5KTsKIH0K
IApAQCAtNzU0LDExOSArNjI3LDExMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgRGly
ZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAKLSAgICBB
U1NFUlQoIW1faW1wbCk7Ci0KICAgICBtX3N0YXRlLmFscGhhID0gbV9kYXRhLT5jdXJyZW50R2xv
YmFsQWxwaGEoKTsKIAogICAgIHJlc3RvcmUoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6
OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKIHsK
LSAgICAodm9pZClvZmZzZXQ7Ci0gICAgKHZvaWQpYmx1cjsKLSAgICAodm9pZCljb2xvcjsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3Mp
OwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0
eWxlQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtcykgeworICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMg
Z3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0CisgICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1
IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcworICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0
YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpOworICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93
T2Zmc2V0OworICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93
T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKKyAgICAgICAgfQorICAg
IH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRTdHJva2VTdHlsZSgqcGxhdGZvcm1Db250ZXh0KCksIHN0eWxlKTsKLX0KKyAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
KQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3Mg
JiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5
YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0
TWl0ZXJMaW1pdChsaW1pdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkgeworICAgICAgICBB
U1NFUlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigp
KTsgICAgCisgICAgfQorICAgIAorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5maWxs
Q29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxC
cnVzaCA9IGJydXNoV2l0aENvbG9yKGZpbGxDb2xvcigpKTsKICAgICB9CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgbGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSkpIHsKKyAgICAgICAgYXV0byBmb250U21v
b3RoaW5nTW9kZSA9IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUg
OiBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQUxJQVNFRDsKKyAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFsaWFzTW9kZShmb250U21vb3RoaW5n
TW9kZSk7CisgICAgfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFy
UmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRl
LmFscGhhID09IGFscGhhKTsKKyAgICAgICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7CiAgICAg
fQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6Y2xl
YXJSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisgICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkg
eworICAgICAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsK
KyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKKyAgICAgICAgICAg
IHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90
SW50ZXJwb2xhdGU6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpMb3c6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRF
UlBPTEFUSU9OX01PREVfTElORUFSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQy
RDFfSU5URVJQT0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0
eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7CisgICAgfQogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGlt
aXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGlu
ZVdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgRGlyZWN0MkQ6
OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworfQogCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit7CiAgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29udGV4dCwgcmVjdCwgbGluZVdp
ZHRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVDYXAoTGlu
ZUNhcCBjYXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2FwKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgRGlyZWN0MkQ6OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBjYXApOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgewog
ICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGRhc2hlcy5zaXplKCk7ICsraSkKQEAgLTg3NSwzNDEgKzc0MiwxNzMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNo
T2Zmc2V0KQogICAgICAgICAgICAgZGFzaE9mZnNldCA9IGZtb2QoZGFzaE9mZnNldCwgbGVuZ3Ro
KSArIGxlbmd0aDsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFz
aE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBqb2luKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIERpcmVjdDJEOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGpvaW4p
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSBmaWxsUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKICAgICAvLyBGSVhNRTogbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5nbGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5nbGUpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnJvdGF0ZShhbmdsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpyb3RhdGUoKnBs
YXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9E
ZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6dHJhbnNs
YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25j
YXRDVE0odHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNvbmNhdENUTSgqcGxhdGZvcm1D
b250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZp
Y2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRDVE0odHJhbnNmb3JtKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFu
c2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25v
d25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZp
bmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmdldENUTShJbmNsdWRlRGV2aWNl
U2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRD
VE0oKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6
cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSBy
b3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiByZWN0
OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRUb0Rldmlj
ZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwotCiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0
ZTo6cm91bmRUb0RldmljZVBpeGVscygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUpCi17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAg
IHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3Qu
bG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMs
IHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFy
cmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tl
U3R5bGUgc3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMs
IFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRl
eHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwg
cG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9z
dGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JS
ZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgV1RGTG9nQWx3YXlz
KCJHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoKSBpcyBub3QgeWV0IGNvbXBhdGlibGUg
d2l0aCByZWNvcmRpbmcgY29udGV4dHMuIik7Ci0gICAgICAgIHJldHVybjsgLy8gRklYTUUgZm9y
IGRpc3BsYXkgbGlzdHMuCi0gICAgfQotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJ
bnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxl
ZCgpKTsKLQotICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotCi0gICAgc3dpdGNoIChtb2RlKSB7Ci0g
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoKLSAgICAgICAgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0gICAg
ICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAg
ICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Ok1lZGl1bToKLSAgICAgICAgcXVh
bGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0gRDJE
MV9JTlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgLy8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29u
dGV4dCgpLCBxdWFsaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXll
ckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICByZXR1cm47Ci0KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3Qg
bmVlZGVkLgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
Ojppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJh
bHkgbm90IG5lZWRlZC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wg
aXNBY2NlbGVyYXRlZCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxl
cmF0ZWRDb250ZXh0KGJvb2wgaXNBY2NlbGVyYXRlZCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYg
KCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgcmV0
dXJuIERpcmVjdDJEOjpTdGF0ZTo6aXNBY2NlbGVyYXRlZENvbnRleHQoKnBsYXRmb3JtQ29udGV4
dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdN
b2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewot
ICAgICh2b2lkKW1vZGU7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIEFTU0VSVChtX3N0YXRlLnN0cm9rZUNvbG9yID09IGNvbG9yKTsKLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tl
QnJ1c2ggPSBicnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcigpKTsKKyAgICAvLyBUaGlzIGlzIGEg
bm8tb3AgZm9yIERpcmVjdDJELgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIEFT
U0VSVChtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyA9PSB0aGlja25lc3MpOwotICAgIG1fZGF0YS0+
c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19CisgICAgaWYgKG1fc3RhdGUuZmlsbEdy
YWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBiZSBhYmxlIHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNo
ZXMgaW4gRDJELgorICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZS5maWxsQ29sb3Ig
PT0gY29sb3IpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcGxhdGZv
cm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3Io
KSk7CisgICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBz
ZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAobV9zdGF0ZS5zdHJva2VH
cmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKKyAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQg
YnJ1c2hlcyBpbiBEMkQuCisgICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFNob3VsZEFu
dGlhbGlhcygqcGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7CisgICAgRGlyZWN0MkQ6OmRyYXdF
bGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwg
bV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29sIGVuYWJs
ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9k
ZSBmb250U21vb3RoaW5nKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgVU5V
U0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOworICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5z
aXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBhdXRv
IHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMo
bnVtR2x5cGhzKTsKKyAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlw
aHMpOworICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5
cGhzKTsKIAotICAgIGF1dG8gZm9udFNtb290aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRf
QU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFT
RUQ7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5TZXRUZXh0QW50aWFs
aWFzTW9kZShmb250U21vb3RoaW5nTW9kZSk7Ci19CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlc0NvdW50KCkpCisgICAgICAgICAgICBicmVhazsKIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7CisgICAgICAgIGlmICghYWR2YW5jZSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOwot
ICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5n
bHlwaEF0KGkgKyBmcm9tKTsKKyAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5j
ZS0+d2lkdGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZh
bmNlLT53aWR0aCgpOworICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBh
ZHZhbmNlLT5oZWlnaHQoKTsKKyAgICB9CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgZG91
YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKIAot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRv
ciwgYmxlbmRNb2RlKTsKKyAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJE
OjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VT
b3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKKyAgICAgICAgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywg
aG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCisgICAgICAgIHN0YXRl
LnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZz
ZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKK0dyYXBo
aWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikK
IHsKLSAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIERpcmVjdDJELgorICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCisgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6
U3VjY2VzczsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQg
fHwgbV9zdGF0ZS5maWxsUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJl
IGFibGUgdG8gZmlsbCBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBE
MkQuCi0gICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBidWZmZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICBp
ZiAoIWltYWdlKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9z
dGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIGF1dG8qIGNv
bnRleHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdl
LT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0KLSAgICBpZiAobV9zdGF0ZS5zdHJva2VH
cmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBiZSBhYmxlIHRvIHN0cm9rZSBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQg
YnJ1c2hlcyBpbiBEMkQuCi0gICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2Us
IG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzKTsKKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgogfQorI2VuZGlmCisK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMmI3MGMzYzE3M2M5MWE3NmJlYmQyZThlNmRmMjE1NWYxYTE1NGFj
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQot
I2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJl
Y3QuaCIKLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6Y3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250
ZXh0KQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxG
YWN0b3J5KAotICAgICAgICBbJnBsYXRmb3JtQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHBsYXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0p
OwotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y3JlYXRlRmFjdG9yeShJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dEltcGxGYWN0b3J5KAotICAgICAgICBbcmVuZGVyVGFyZ2V0XShHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRD4oY29udGV4dCwgcmVuZGVyVGFyZ2V0KTsKLSAgICAgICAg
fSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkK
LSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0
ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNv
bnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1l
bW9yeSkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0
ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0g
ICAgLCBtX293bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ+KHJlbmRlclRhcmdldCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBs
YXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1f
cHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi1HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKQotewotICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19
Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpoYXNQbGF0Zm9ybUNvbnRleHQo
KSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCogR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAot
ewotICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewot
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFu
Z2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZv
cm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHls
ZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRo
ZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwot
ICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRl
eHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYg
c2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0
YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIERpcmVjdDJE
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
Y2xlYXJTaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVDYXAo
bV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRh
c2hPZmZzZXQpCi17Ci0gICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0
LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgRGlyZWN0MkQ6OnNl
dExpbmVKb2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17
Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGlt
aXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8gYnJ1c2ggPSBn
cmFkaWVudC5jcmVhdGVCcnVzaChtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgaWYgKCFicnVzaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0
V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3Bl
cmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIERpcmVjdDJEOjpTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRv
ciwgYmxlbmRNb2RlKTsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBEaXJlY3Qy
RDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlv
dXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVy
YXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHBy
ZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUg
c2hhZG93U3RhdGUoc3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBE
aXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwg
c2hhZG93U3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIERp
cmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBw
cmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLQotICAgIERpcmVjdDJEOjpGaWxsU291cmNlIGZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBo
aWNzQ29udGV4dCgpKTsKLSAgICBmaWxsU291cmNlLmJydXNoID0gbV9wbGF0Zm9ybUNvbnRleHQu
YnJ1c2hXaXRoQ29sb3IoY29sb3IpOwotCi0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIGZpbGxTb3Vy
Y2UsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUGF0aChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJE
OjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Zmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBw
YXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgbGluZVdpZHRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0Nv
bnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3Qy
RDo6c3Ryb2tlUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFk
ZEVsbGlwc2UocmVjdCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01v
ZGUgZm9udFNtb290aGluZykKLXsKLSAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7Ci0g
ICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4g
Z2x5cGhzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMo
bnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRz
KG51bUdseXBocyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyAr
K2kpIHsKLSAgICAgICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQo
KSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVm
ZmVyLmFkdmFuY2VzKGkgKyBmcm9tKTsKLSAgICAgICAgaWYgKCFhZHZhbmNlKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChp
ICsgZnJvbSk7Ci0gICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRo
KCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lk
dGgoKTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+
aGVpZ2h0KCk7Ci0gICAgfQotCi0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250
LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4
dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0
MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAotICAgICAgICBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNl
dCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKLSAg
ICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRl
LnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3Jt
SW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3Rh
dGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1BhdHRlcm4oKE5hdGl2ZUltYWdlJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBpbWFnZS5wbGF0Zm9ybUltYWdlKCkpCi0gICAgICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybiht
X3BsYXRmb3JtQ29udGV4dCwgV1RGTW92ZShzdXJmYWNlKSwgSW50U2l6ZShpbWFnZVNpemUpLCBk
ZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBv
c2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmRyYXdMaW5lKG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwg
c3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25l
c3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZVVuZGVybGluZXMpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TGluZXNGb3JUZXh0KG1fcGxhdGZvcm1Db250
ZXh0LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0eWxlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3Rh
dGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRl
LnN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZs
b2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShvZmZz
ZXQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVO
VVNFRF9QQVJBTShvZmZzZXQpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzYXZlKCkKLXsKLSAgICBEaXJlY3QyRDo6c2F2ZSht
X3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpyZXN0b3JlKCkKLXsKLSAgICBEaXJlY3QyRDo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjp0cmFuc2xhdGUoZmxvYXQg
eCwgZmxvYXQgeSkKLXsKLSAgICBEaXJlY3QyRDo6dHJhbnNsYXRlKG1fcGxhdGZvcm1Db250ZXh0
LCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucykKLXsKLSAgICBEaXJlY3QyRDo6cm90YXRlKG1fcGxhdGZvcm1D
b250ZXh0LCBhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgRGlyZWN0MkQ6OnNj
YWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
LXsKLSAgICBEaXJlY3QyRDo6Y29uY2F0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0Q1RNKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RN
KG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRl
RGV2aWNlU2NhbGUpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKG1fcGxh
dGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBEaXJlY3QyRDo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCwgb3BhY2l0eSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17
Ci0gICAgRGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIERpcmVjdDJEOjpjbGlwKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBPdXQoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3Jt
Q29udGV4dCwgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAgICBEaXJl
Y3QyRDo6Y2xpcFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0KLQot
SW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBCb3VuZHMoKQotewotICAg
IHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogY29u
dGV4dCA9ICZncmFwaGljc0NvbnRleHQoKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnRleHQpKQotICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3Rh
dGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNv
bnN0IEZsb2F0UmVjdCYsIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFw
aGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQot
Ci0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnBh
aW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAg
Ly8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJELmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlYjA0NTA1MzE3MDNm
YjkwZWVhN2I0MmYyNDc0ZjU5MzZiZDNiYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJ
bXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQ7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCBmaW5hbCA6IHB1Ymxp
YyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0
b3J5KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9y
eShJRDJEMVJlbmRlclRhcmdldCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
KEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJik7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYsIElEMkQxUmVuZGVyVGFyZ2V0
Kik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCk7Ci0KLSAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZv
aWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRv
dygpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IEdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYs
IGNvbnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9h
dFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAg
ICBib29sIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
UGF0dGVybigoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBv
dmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2Fs
ZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5j
dGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JN
ZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92
ZXJyaWRlOwotCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9vd25lZFBs
YXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgbV9wbGF0Zm9ybUNv
bnRleHQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCmluZGV4IDFkODA0MjBjZjdlYzZj
ZDc3NWE2MmJhZWEyMmY5OTA2MDdlYjRjYmQuLjZkYmJlOTY2ZDM5Njk5MjU5ZTY1YzZmODUwZWU2
ZTdjMzVjZGQ5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwCkBAIC01NiwxMiArNTYsMTIgQEAg
c3RhdGljIHZvaWQgZmlsbFdpdGhDbGVhckNvbG9yKEhCSVRNQVAgYml0bWFwKQogI2lmIFBMQVRG
T1JNKFdJTikKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5k
b3dzKGJvb2wgaW5jbHVkZSkKIHsKLSAgICBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2lu
ZG93cyA9IGluY2x1ZGU7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fc2hvdWxk
SW5jbHVkZUNoaWxkV2luZG93cyA9IGluY2x1ZGU7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0
OjpzaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRh
LT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3M7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3M7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dDo6V2luZG93c0JpdG1hcDo6V2luZG93c0JpdG1hcChIREMgaGRjLCBjb25zdCBJbnRT
aXplJiBzaXplKQpAQCAtOTUsNyArOTUsNyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRt
YXA6On5XaW5kb3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6
V2luZG93c0JpdG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4o
bV9kYXRhLT5tX2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1h
cD4oZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgog
CkBAIC0xMDMsNyArMTAzLDcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRl
eHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEKIHsKICAgICBIREMg
aGRjID0gbnVsbHB0cjsKICAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgaGRjID0gbV9kYXRhLT5t
X2hkYzsKKyAgICAgICAgaGRjID0gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwog
ICAgIC8vIEZJWE1FOiBTaG91bGQgYSBiaXRtYXAgYmUgY3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFk
b3cgaXMgc2V0PwogICAgIGlmICghaGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CiAg
ICAgICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKQEAgLTEzNSwxNyArMTM1LDE3IEBAIEhEQyBH
cmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3Qs
IGJvb2wgc3VwcG9ydEFscGhhCiAgICAgICAgIHJldHVybiBiaXRtYXBEQy5sZWFrKCk7CiAgICAg
fQogCi0gICAgbV9kYXRhLT5mbHVzaCgpOwotICAgIG1fZGF0YS0+c2F2ZSgpOwotICAgIHJldHVy
biBtX2RhdGEtPm1faGRjOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5mbHVzaCgp
OworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5zYXZlKCk7CisgICAgcmV0dXJuIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogSERDIEdyYXBoaWNzQ29udGV4
dDo6aGRjKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIWRlcHJlY2F0ZWRQ
cml2YXRlQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBt
X2RhdGEtPm1faGRjOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9o
ZGM7CiB9CiAKICNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2lu
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTU5OWFmOTNmNDE5YjE5NGM3NzZiOTFhMGEzYzc5YzBjYmMwYzQ3
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRl
eHRXaW4gR3JhcGhpY3NDb250ZXh0Q0cKKworI2VsaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2lu
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJECisKKyNlbGlmIFVTRShDQUlSTykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFw
aGljc0NvbnRleHRDYWlybworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuY3BwCmluZGV4IGE4ZWUzNWM1Mjc3ODEyNzNmNDdmYjVkMmY0YmNkZjg4YzQ0ZTA4YzQuLmFk
OTU1NGMwNTBhZWUyZTEwZWMxNTM1OWViOGI0ODVkMzUwY2RhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtNzgsNyArNzgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpj
cmVhdGUoYwogICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihwbGF0
Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHREaXJlY3QyRD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6
OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIGlmICghY29udGV4
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAppbmRleCBmOGExMGQ1YzQzNmU3MDYw
ODk4NzA3YmE4YjY1NDY0MWNlMmJkZjU0Li41MzM4ZmZjYzdiNTY1ZjQ4N2Q5ZTdjZmI4ZjI2NGY3
ZWExMjk2OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6Omdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCiAgICAgYXV0
byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShibXBJbmZvLmJtQml0
cywgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0LAogICAgICAgICA4LCBibXBJbmZv
LmJtV2lkdGhCeXRlcywgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJM
aXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSk7CiAgIAotICAgIEdyYXBo
aWNzQ29udGV4dCBnYyhjZ0NvbnRleHQuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdj
KGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1h
Z2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAppbmRleCAyY2VjOTlkYzcyOWZl
NjVlMDg1NGVlZTcyZGZjNGVkN2FmMDk1MjNjLi5jOWViMDBjNDgyNDFmNWJjYmY1YzVlMmQ4M2I5
NDdjYjdjOTQ5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlIDxjYWly
by5oPgogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgQml0
bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNp
emUpCiAgICAgY2Fpcm9fdCogdGFyZ2V0UmVmID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsKICAgICBj
YWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSh0YXJnZXRSZWYpKTsKKyAgICBH
cmFwaGljc0NvbnRleHRDYWlybyBnYyh0YXJnZXRSZWYpOwogCiAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CiAgICAgaWYgKHNpemUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCmluZGV4
IGQ5NjIwMzAwYWJjZWJhNDk0Y2E2NjE1MWQwMDFlNTJmMWM3ODk0NGIuLjkxMjlhMTdiNzc4YTI0
ODBjZGYzYzBlYmZhMmQ2ZTcyNzFhNjA3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCkBAIC0yMzIsNyArMjMyLDcg
QEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29u
c3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRh
cmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250
ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0KCZzY3Jh
dGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwog
CiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAgLTM0Miw3ICszNDIsNyBAQCBGbG9hdFJlY3QgUGF0aDo6
c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+
JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAg
IEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJE
LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkp
OwogCiAgICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBs
aWVyKHNjcmF0Y2hDb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0lt
YWdlSU9TLm1tCmluZGV4IDczNTkzM2YxNzIwODViOWU2NjkzYWQ0NGIyYWYxNjBiMzQwYzRmOTku
LjM2MTYwMmU1N2IyNGZiMTZjYmUyYTdhOTlmNmU1YzgwYTMzOWZhYjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtOTQsNyArOTQsNyBAQCBEcmFn
SW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1hZ2VPcmll
bnRhdGlvbiBvcmllbnRhdGlvbgogCiAgICAgUmV0YWluUHRyPFVJR3JhcGhpY3NJbWFnZVJlbmRl
cmVyPiByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJ
bnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBVSUltYWdlICppbWFnZUNv
cHkgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4
dC50cmFuc2xhdGUoMCwgaW1hZ2VTaXplLmhlaWdodCk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUo
eyBhZGp1c3RlZEltYWdlU2NhbGUsIC1hZGp1c3RlZEltYWdlU2NhbGUgfSk7CiAgICAgICAgIGNv
bnRleHQuZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQb2ludCgpLCB7IG9yaWVudGF0aW9uIH0pOwpA
QCAtMTM2LDcgKzEzNiw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVs
ZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5nCiAKICAgICBhdXRvIHJl
bmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFu
Y2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemVdKTsKICAgICBhdXRvIGltYWdlID0gW3Jl
bmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQg
KnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5k
ZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
MCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsg
MSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJl
Y3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSg0KSksIENvbG9yOjp3aGl0ZSk7
CkBAIC0yMDQsNyArMjA0LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclNlbGVj
dGlvbihGcmFtZSYgZnJhbWUsIFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2EKIAogICAgIGF1dG8g
cmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0
YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgcmV0dXJuIFtyZW5k
ZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpy
ZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVy
ZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQo
cmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29udGV4
dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGFuZCBzdWdnZXN0cyB0aGF0IHNv
bWV3aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAgICAgIC8vIGRyYWcgaW5pdGlhdGlvbiBm
bG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgICAg
IGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5oZWlnaHQoKSk7CkBAIC0yMzgsNyArMjM4
LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib28KICAgICBhdXRvJiBpbWFnZSA9ICp0ZXh0SW5k
aWNhdG9yLT5jb250ZW50SW1hZ2UoKTsKICAgICBhdXRvIHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6
YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdl
LnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdldCgpIGltYWdl
V2l0aEFjdGlvbnM6WyZpbWFnZV0oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5k
ZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJD
b250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQocmVu
ZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdl
LCBGbG9hdFBvaW50KCkpOwogICAgIH1dOwogCkBAIC0yNTIsNyArMjUyLDcgQEAgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgRmxv
YXRSZWN0JiBlbGVtZW4KIAogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJ
R3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNp
emUoKV0pOwogICAgIFVJSW1hZ2UgKmltYWdlID0gW3JlbmRlciBpbWFnZVdpdGhBY3Rpb25zOl4o
VUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyByZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0IH07
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyByZW5kZXJlckNvbnRleHQuQ0dD
b250ZXh0IH07CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIENHUmVjdEdldEhlaWdodChp
bWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBj
b250ZXh0LmZpbGxSb3VuZGVkUmVjdChzd2F0Y2gsIGNvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFj
a1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Y29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKaW5kZXggMDlmYWVl
ZWU5ZWFjYjUwMzJmMWE3OWQ3M2JhMDE4YTliNjU1YmQyYi4uNWVjMzhlNjQxYmQ2ZWQwM2FkMDUy
NTYxZDA0YzljZGFmZGZiNDEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRp
YVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgorI2luY2x1ZGUgPHd0
Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKaW5kZXggZDAyMmU3ZTE5MWRh
YzgxNjM2ZDUyOTUxZDQwZDUzYjg4NzNmNTUwOS4uODYyMzk5NWY3MWEyOGVlOWUzMzAzODk2MDEy
ZjNkM2JlYjFiNjM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdJbWFnZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFn
ZVdpbi5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIK
ICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlICJIV25kREMuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgpAQCAtMTg2LDcg
KzE4NywxMSBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50Jiwg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgaW5MYWJlbCwgVAogICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgCiAgICAgOjpTZWxlY3RPYmplY3Qod29ya2luZ0RDLmdldCgpLCBpbWFnZS5nZXQoKSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY29udGV4dFJlZik7CisjaWYgVVNFKENBSVJP
KQorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGNvbnRleHQoKmNvbnRleHRSZWYpOworI2Vsc2UK
KyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChjb250ZXh0UmVmKTsKKyNlbmRpZgogICAg
IC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZlciB3ZSBjYW4n
dCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwgc28gd2UgdXNl
IDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBTUkdCQTx1aW50OF90PiB7
IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVu
dVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2FiNmIxM2FmODM0NzJlNy4u
MjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJIb3N0
V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBhaW50KGNv
bnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAgIDo6U2VsZWN0T2JqZWN0
KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChtX0RD
LmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VSZWN0IHRyYW5zbGF0ZWQg
aW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxpc3QgKHdoaWNoIGlzIGxp
c3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIEludFJlY3QgbGlzdFJlY3Qg
PSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRl
bnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRm
dWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2YzA5YWYwZDJkNjlmNDYz
ZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1ZjQzYjc2N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5j
cHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDcgKzM5
LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250ZW50ZnVs
UGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3LnNldFBhaW50QmVoYXZp
b3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKICAgICBmcmFtZVZp
ZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQg
Y2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6
OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBjaGVj
a2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6
OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3LnBhaW50KGNoZWNrZXJD
b250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSk7CiAKICAgICBm
cmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJlQ29udGVudHMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5k
ZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2MwYi4uMTQzYTM1OWNiYWU4
OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAsMTAgKzY5MCw3IEBAIHN0
YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRvdy0+bmV4
dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKSwgYm94U2hh
ZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpKQotICAg
ICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCks
IHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSkpOwot
ICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBi
b3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hT
aGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJv
eFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNo
YWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogfQogCiBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3NlSW50ZXJwb2xhdGlv
blF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1hZ2UsIGNvbnN0IHZv
aWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQzOSwxMCArMjQzNiw3IEBA
IHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5m
byYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50IHNuYXBwZWRT
aGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dSZWN0T3Jp
Z2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVj
dE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9hdFNpemUg
c25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNuYXBwZWRG
aWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+aXNX
ZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRv
dyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hh
ZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29s
b3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2Fj
eSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAgICAgICBpZiAoaGFzQm9y
ZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0
IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0
aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgICAgIHNoYWRv
d09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+aXNXZWJr
aXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93
UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6
RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHBp
eGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2N2NjNjZlZTVhMjVjNzRk
ZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdjNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01MSw2ICs1
MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlTG9nZ2lu
Z0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBAIC0xNzg5LDcgKzE3OTAs
NyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQogICAgIH07
CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhpY3NMYXll
ciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQo
bnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQoTnVsbEdy
YXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAgICAgICAg
RXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lPTikKICAg
ICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdpb24oKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENh
aXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJv
LmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYxNTU4ZGU2MWZmLi4xNjE3
N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCkBAIC0zMSw3ICsz
MSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewogICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CiAgICAgUmVmUHRyPGNh
aXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoaW1hZ2UuZ2V0KCkp
KTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgpKSk7CisgICAgcmV0
dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1hcENvbnRleHQuZ2V0KCkp
OwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKaW5kZXggMzZk
YzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQwNmY0NmMyZjM0NmI5MWM0
ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
Y2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1No
YXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkK
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgMCwgbV9zaXpl
LmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBDb250ZXh0LmdldCgpLCAx
LCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGJpdG1hcENv
bnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihi
aXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAwOGY2ZmI1MmM4MGMzN2Nl
ZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQyNDhmOTdjMDA2OTY1OWI0
ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxl
Qml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFi
bGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRPcGVyYXRpb25zLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVk
ZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogICAgIGlm
ICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gbWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRleHQuZ2V0KCkpOwogfQog
CiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKaW5k
ZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRmNi4uNGY3OGI1ZWI1Y2Ri
NTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtMzIsNyArMzIsNyBAQAog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmFja2luZ1N0b3Jl
QmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgogI2lu
Y2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFja2luZ1N0b3JlOjppbmNv
cnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRlSW5mbyYK
ICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBvaW50IHVwZGF0ZVJlY3RM
b2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwogICAgIFJl
ZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9iYWNr
ZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWlyb0NvbnRleHQuZ2V0KCkp
KTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQoY2Fpcm9Db250ZXh0
LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJhd3NCYWNrZ3JvdW5kKCkg
aXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0cyBhcyBhIGJhY2tncm91
bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwgYml0bWFwIG11c3QgYmUg
ZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3ZlcndyaXRlIHRoZSBleGlz
dGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dL
UHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdW
aWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1Y2YwZDRhNjY2OWYuLmQw
M2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMwLDE1ICszMCwxNiBAQAog
CiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0ICJQREZL
aXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0ICJTaGFyZWFibGVC
aXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8UXVhcnR6L1F1YXJ0
ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxEZWZhdWx0U3lz
dGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2ltcG9ydCAiUERG
S2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbFRvcFByaW50
aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7CiBOU1N0cmluZyAqIGNv
bnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkgPSBAIldlYktpdE9yaWdp
bmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0gKHZvaWQpX2RyYXdQcmV2
aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA+
IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
Q0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAKICAgICBi
aXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3Rv
cigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0bWFwLT5ib3VuZHMoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGly
ZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVj
dDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0YTMzNGIxMjQxNWQ5Li45
MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKQEAgLTMy
LDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmREaXJlY3Qy
REltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVk
ZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmluZGV4IDNjYWNiOWFlYzY0
Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4NjI5ZjYxM2QzMWI4NDcz
OTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9X
ZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIldl
YlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2lu
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUuaD4KQEAg
LTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChjb25zdCBJ
bnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNlbGVjdE9iamVjdChtX0RD
LmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQobV9EQy5nZXQo
KSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7IAogICAg
IEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElEM0QxMVRl
eHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAKQEAgLTg2
Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChjb25zdCBJbnRS
ZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQg
cGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0
LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNv
bnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dCgm
cGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRyYW5zbGF0ZWREYW1hZ2VS
ZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lu
cy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1Yjk4Yzg5ZGY0ODViNzA2
ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNkZjZmMGQwNjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQpA
QCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUERGQW5ub3Rh
dGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250ZXh0TWVudS5oIgotI2lt
cG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxlclNQSS5o
IgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9ydCAiUERGUGx1Z2luUGFz
c3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5o
PgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxCb2R5RWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAogI2ltcG9ydCA8d3RmL2Nv
Y29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKKyNp
bXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BERl9BUElT
KQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5cGUpaW5pdFdpdGhQcm92
aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAtMTk0NCw3ICsxOTQ1LDcg
QEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENBTGF5ZXIg
KmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJh
bmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRpZgog
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFw
aGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBncmFwaGlj
c0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAxNjI1
M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2JkYjk1NzA0ZGM0NTYwMjM1
OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00Miw2ICs0Miw3IEBACiAj
aW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9jdXNDb250
cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJldGFpblB0cjxDRkRhdGFS
ZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVjdCwgSW50U2l6ZSBiaXRt
YXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBkZkNvbnRleHQuZ2V0KCks
IGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQg
eyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNz
Q29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNj
YWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoMCwgLWJp
dG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFw
aGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKaW5kZXggODcxNmRmNDli
ZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0MjMyMWI1M2UxZjZlYTVk
YzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtNDMsNyArNDMsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVTRShESVJFQ1QyRCkKLSNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQz
ZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
aW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQxYzVjMy4uMDA5ZmU4OTA5
NjU3MGZjNzM1NjAyNDdhNDIwZjU0NDZhODdkOTcwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEgQEAKICNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgogCisjaWYgVVNFKENH
KQorLy8gQnV0IHJlYWxseSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0aGUgQ0ctc3BlY2lmaWMg
UERGIHBhaW50aW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5n
IG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzNzUsNyArNTM4
MCw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZyYW1lSWRlbnRpZmllciBm
cmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50CiAgICAgICAgICAgICAgICAgUmV0YWluUHRy
PENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZU11
dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rp
b25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICAgICAgICAgIENHUERGQ29udGV4dEJlZ2lu
UGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dENHIGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBjdHguc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSgwLCAt
bV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAgICAgICAg
ICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRleHQtPnBh
Z2VSZWN0KHBhZ2UpLndpZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKaW5kZXggZGUx
ZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5YjFlODBhM2Q4NGQxZDBk
MzAwOTZhYzQ0NjUwYWM5OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC0z
NCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lkIFdlYlBy
aW50T3BlcmF0aW9uR3RrOjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKQogICAgIHByZXBhcmVD
b250ZXh0VG9EcmF3KCk7CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vfc2V0dXBf
Z2V0X3BhZ2Vfd2lkdGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICogbV94RFBJ
OwotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fY2Fpcm9Db250ZXh0Lmdl
dCgpKSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0
KG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGdy
YXBoaWNzQ29udGV4dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9zY2FsZSk7CiAKICAgICBj
YWlyb19yZXN0b3JlKG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4IGQ1NDFjNGMwNGYyZDc1
ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBiN2Q5MTAyMGM3ZGEyODhl
ZGUyNDVjMzg1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2Vi
Q29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJD
b3JlU3RhdGlzdGljcy5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
R2x5cGhQYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9y
dCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9KU0RPTVdp
bmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9QcmludENvbnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBAQCAtICh2b2lkKXByaW50
VG9DR0NvbnRleHQ6KENHQ29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdpZHRoOihmbG9hdClwYWdl
V2lkdGhJblBpeAogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CisgICAgR3JhcGhpY3ND
b250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAgUHJpbnRDb250ZXh0Ojpz
cG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3JhcGhpY3NDb250ZXh0LCBG
bG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0
cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJh
cy5tbQppbmRleCAyYmEwMDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2NTA1YmE3MWJhLi43ODMy
NTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KQEAgLTMwLDcg
KzMwLDcgQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9Gb250Q2FzY2FkZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9h
ZGVyTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2ltcG9ydCA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4LDcgQEAgLSAodm9pZClf
d2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9udCAqKWZvbnQgdGV4dENv
bG9yOihOU0NvbG9yICoKIAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250ZXh0ID0g
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IFtuc0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dCB7IGNnQ29udGV4dCB9OworICAgICAgICBHcmFwaGljc0NvbnRl
eHRDRyBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAgICAgICAvLyBXZWJDb3Jl
IHJlcXVpcmVzIGEgZmxpcHBlZCBncmFwaGljcyBjb250ZXh0LgogICAgICAgICBib29sIGZsaXBw
ZWQgPSBbbnNDb250ZXh0IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KaW5kZXgg
ZDM5NzNlMjk0NDU5ZWNmMWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4uOTUwYWU4ZTAwZDMwYTQ1
MjA5ZjlhZGRhM2MyYjMzZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQpAQCAt
MjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCIKICNpbXBvcnQg
IldlYk5vZGVIaWdobGlnaHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMuaD4KIApA
QCAtOTgsNyArOTgsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogCiAgICAgICAg
IEFTU0VSVChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsK
IAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1
cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29u
dGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAg
ICAgICAgW193ZWJOb2RlSGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xsZXJdLT5kcmF3SGlnaGxp
Z2h0KGNvbnRleHQpOwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNz
U3RhdGVdOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCmluZGV4IGYzNWQ3YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1N2U0MThhNzEuLjk1YmRh
MzkwY2E2OWJhNmI5NjIwZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0ZW0uaD4K
QEAgLTYxMyw3ICs2MTMsNyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3QgY29udGVu
dHNPbmx5OihCT09MKWNvbnRlbnRzT25seQogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYgY3R4ID0g
V0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQgY29udGV4dChjdHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
IGNvbnRleHQoY3R4KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV2ViQ29yZTo6
RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwNTA2OThiMGJhZmRiZTAyODc1YjMzNzg4NzRmOTRiZGY3
YWQzZjhmLi44Nzk1Mjk2MGJhODk0ODBlMmFiOWUyZDEyYmQwYzIxY2Y3MzkyNDdmIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisK
KyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNU
KToKKwogMjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAg
ICAgQ29udmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdy
YXBwaW5nIGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9y
dHMsIGV0Yy4pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Y2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCmluZGV4IDg3YTM2YWNmZTZhMTAwY2MzMjNl
MjQ4OTdmY2UzODAzZjIzNGE3NzguLmE1OThkNTRhMjc1Mjk1OGM0MmU0ZTJiNzllNTMzN2M1N2Ix
NzRiNDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9E
aXNwbGF5TGlzdFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5
TGlzdFJlcGxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFkaWVudC5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkg
ewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00OSw3ICs1MCw3IEBAIFRFU1QoRGlzcGxh
eUxpc3RUZXN0cywgUmVwbGF5V2l0aE1pc3NpbmdSZXNvdXJjZSkKIAogICAgIGF1dG8gY29sb3JT
cGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogICAgIGF1dG8gY2dDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBj
b250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLnBsYXRmb3JtQ29s
b3JTcGFjZSgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4
dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwogCkBA
IC0xMTMsNyArMTE0LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBPdXRPZkxpbmVJdGVtRGVj
b2RpbmdGYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3Bh
Y2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBj
b250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBj
Z0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIERpc3BsYXlMaXN0IG9yaWdpbmFsTGlzdDsKICAgICBX
cml0aW5nQ2xpZW50IHdyaXRlcjsKQEAgLTE0NCw3ICsxNDUsNyBAQCBURVNUKERpc3BsYXlMaXN0
VGVzdHMsIElubGluZUl0ZW1WYWxpZGF0aW9uRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFj
ZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0Ip
KTsKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51
bGxwdHIsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwg
Y29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRvIHJ1blRl
c3RXaXRoSW52YWxpZElkZW50aWZpZXIgPSBbJl0oRmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIp
IHsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGlkZW50aWZpZXIuaXNWYWxpZCgpKTsK
</data>
<flag name="commit-queue"
          id="450868"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429631</attachid>
            <date>2021-05-24 23:27:31 -0700</date>
            <delta_ts>2021-05-25 00:53:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210524232729.patch</filename>
            <type>text/plain</type>
            <size>379446</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjYwMjgxYTI3ZjExNmI3M2FmYjgzMWMxZDRiMDUyYjQ4
NTQ4OWZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNo
aWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8g
cmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBE
ZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgog
I2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSBy
ZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVt
RmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCog
ZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZh
Y3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBi
ZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3Qg
Q29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2
b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMg
dm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGlt
cGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0
cm95KCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBi
b29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
dm9pZCBwbGF0Zm9ybUluaXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhh
c0FscGhhID0gZmFsc2UpOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lk
IHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZp
bGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlh
bGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNo
YWRvdygpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0
UmVjdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZv
cm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0
IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3Ju
ZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBA
IHByaXZhdGU6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wg
aXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dEltcGw+IG1faW1wbDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisK
K3ByaXZhdGU6CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwog
Ci0gICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQg
bV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZCB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9Owog
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5
ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjJmZmI0NTQ1YWUyMzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRl
eHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9
IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIy
YjBhNjYyMDg1Li4xMzgwZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4
LDkgQEAgSW1hZ2VEcmF3UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVo
YXZpb3IgZGlmZmVyZW5jZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2lu
ZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0
LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAg
aWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0
UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYx
N2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZk
ZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwog
CkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAg
IHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2
YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRy
b2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGlj
c0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5n
UGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0
aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29s
IGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5k
aWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwg
T3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0K
KworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0g
V1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKwor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0p
IGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVy
biBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykK
KyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6
CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1
M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyAr
MTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVy
cyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAor
ICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNh
bnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2Mx
Li4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAg
IAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7
CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJl
Y29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
aW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERp
c3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4
YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRm
MzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShX
VEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250
ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4
dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3
YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJl
NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4
dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJv
bSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNt
YWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENv
dW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFj
a2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFp
bnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91
bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4
IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2Rj
ZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3du
ZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2Ug
aXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJv
dW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uYmE1OTRhZThjYzJh
ODAyYjY1NjA2MGZiMGUzYmJhMjIxODY5ODQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5o
IgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9P
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNTcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpw
bGF0Zm9ybUNvbnRleHQpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNz
Q29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3Jt
Q29udGV4dC0+Y3IoKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0
UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9w
bGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKGNh
aXJvX3QqIGNhaXJvQ29udGV4dCkKKyAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVu
aXF1ZTxQbGF0Zm9ybUNvbnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKKyAgICAsIG1fcGxhdGZv
cm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VV
bmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkp
CiB7Ci0gICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5z
ZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRh
OwotICAgIH0KKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRl
KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3Jt
Q29udGV4dC5jcigpKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRl
eHRDYWlybzo6fkdyYXBoaWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9y
bUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwor
Ym9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0
Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3Bs
YXRmb3JtQ29udGV4dDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAg
Q2Fpcm86OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJl
c3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4
dCgpKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3Mp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZv
cm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpk
cmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3Jt
SW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ug
c2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9p
bnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMg
b25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIENhaXJvOjpmaWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6
U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENh
aXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUoKSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVu
dC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwor
ICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fp
cm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9w
bGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3Is
IGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3Is
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKICAgICBDYWlybzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRm
b3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250
ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYg
cGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZm
ZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZv
cm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3Ip
OwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAg
ICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5k
cmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwog
I2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBU
aGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VE
X1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAj
ZWxzZQotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1Jpbmco
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAg
ZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJh
eSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBs
YXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwog
fQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7
Ci0KICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUo
eCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0
IENvbG9yJikKLXsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZp
bGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3
ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJv
IGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAg
IC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tl
Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0
Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ry
b2tlU3R5bGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWly
bzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRo
aWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgeworICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4
dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAg
ICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9w
cG9zaXRlIFkgYXhpcworICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hh
ZG93T2Zmc2V0OworICAgICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09m
ZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6
c2V0U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHJva2VTdHlsZSk7Ci19CisgICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5n
ZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9h
dFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0
Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBmbG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmICht
X3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhh
dCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dAotICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhU
TUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09m
ZnNldCA9IHsgb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
ICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
bGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tl
UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVD
YXAoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5l
RGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAg
ICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRl
ckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3Jt
Q29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1
bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250
ZXh0KCksIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJh
ZGlhbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRm
b3JtQ29udGV4dCgpLCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNs
aXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdl
UHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisg
ICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShz
cGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRm
b3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUo
aW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
b3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFu
dGlhbGlhcyhib29sIGVuYWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFi
bGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0
Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290
aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRh
KCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsK
KyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7
CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0g
PSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCAr
PSBhZHZhbmNlc1tpXS53aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tp
XS5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgp
OworICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zm
c2V0KCk7CisKKyAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZv
bnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9y
bUNvbnRleHQsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShz
dGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRG
b250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAg
c3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRv
d09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMWFjYWUxYzY4OGY1N2IzZjAyNWZjYjgyYTViMDIwNmQ2MDAwNGU5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1Ymxp
YzoKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAg
IEdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3QqKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICBHcmFwaGljc0NvbnRleHRDYWlybyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJ
WE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB+R3JhcGhpY3ND
b250ZXh0Q2Fpcm8oKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmlu
YWw7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZp
bmFsOworCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKworICAgIHZvaWQgc2V0
TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5h
bDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9r
ZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lk
IHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmlu
YWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
KworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgm
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7
CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAor
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0
IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
Q29udGV4dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OworICAgIFBsYXRmb3JtQ29udGV4
dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4MTdiZmQ0
ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJD
YWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3Rvcnkg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxDYWlybz4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0
KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1w
bEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvX3Qq
IGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW2NhaXJvQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIH0p
OwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWly
byhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3Bs
YXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsK
LSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0
ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5j
cigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRleHQpCi0g
ICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1D
b250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0g
ICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4
dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1f
cGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86On5H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdy
YXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVl
OwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tl
VGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQot
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBz
dGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4
dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAg
ICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9w
cG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2Fz
dDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAg
ICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAg
ICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCks
IC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y2xlYXJTaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAo
bV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hP
ZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNo
ZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0
TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgQ2Fpcm86OnNldExpbmVKb2luKG1f
cGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fpcm86OnNl
dE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWly
bzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0
ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYg
KCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3Jt
Q29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBw
YXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3Bl
cmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwg
YmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwot
ICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVsc2UK
LSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwg
Y29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKQotewotICAgIENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7
IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBD
YWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpGaWxsU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChw
YXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VSZWN0KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9w
bGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsKLSAgICBpZiAoIWZv
bnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhP
ZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhz
KG51bUdseXBocyk7Ci0gICAgewotICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAg
ICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAg
ICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgICAgIHlP
ZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2Fs
ZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAg
ICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6
ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhz
LCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAg
Zm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIGltYWdlLmRyYXcoZ3JhcGhpY3NDb250ZXh0KCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJB
TShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdl
LnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJh
d1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
SW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6
ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3Jt
Q29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJv
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHls
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwg
d2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNl
dCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3
aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSgp
Ci17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9yZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9w
bGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRm
b3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpy
b3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRm
b3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2Fs
ZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0g
ICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29u
dGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewot
ICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0
Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lM
YXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9w
bGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAg
Q2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0K
LUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKLXsKLSAgICBy
ZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1
dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0
LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGlu
Z01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsK
LSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRl
ZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
Q0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThkYmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZjZjJiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgi
Ci0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0
SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxG
YWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIGNhaXJvX3QqKTsKLSAgICB2
aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQotICAgIGJvb2wgaGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5l
Sm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2Rl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBv
dmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2Fs
ZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5B
QkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZy
YW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3du
ZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1D
b250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGQz
N2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYzMzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3NTJlNzk1
MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
bG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmlu
ZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUwNzYyNzVmNTIzZmE4MDcxZWEuLjliNWMwYWQwNzQ0
NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkNh
aXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgpA
QCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJgogCiAgICAgUmVmUHRyPGNh
aXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOwogICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2NvbnRleHQgPSBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVG
YWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBHcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJv
LmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJmMDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFmLi4yYTE5
ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1VuaXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNhaXJvVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNs
dWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ry
b2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBz
dHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVB
cHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihn
Yyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSht
X3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250
ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0Nv
bnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcxYjhlMWM5
MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZkYjFhZTA2NTc0YmRmODE1YzYxNjcwZTA2Y2I2Nzdh
MDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBzdGF0aWMg
dm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRD
R0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDR0NvbnRleHRTZXRT
dHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7Ci19Ci0K
IGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChDR0NvbnRleHRH
ZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldEJhc2VD
VE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCitzdGF0
aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJw
b2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsKICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKICAgICBj
YXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OgpAQCAtODIsNiArNzcsMzQgQEAgc3RhdGljIElu
dGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9s
YXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ7
CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRpb25RdWFsaXR5IGNnSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1YWxpdHkp
IHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICByZXR1
cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25l
OworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIGtD
R0ludGVycG9sYXRpb25Mb3c7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVt
OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhp
Z2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKworc3Rh
dGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxsID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01v
ZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tlID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01v
ZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQorICAgICAgICByZXR1cm4ga0NH
VGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZpbGwpCisgICAgICAgIHJldHVybiBrQ0dUZXh0Rmls
bDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9rZTsKK30KKwogc3RhdGljIENHQmxlbmRNb2RlIHNl
bGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xNTYsMzUg
KzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTQogICAgIHJldHVybiBrQ0dCbGVuZE1v
ZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhD
R0NvbnRleHRSZWYgY2dDb250ZXh0KQogewogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250
ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9uIHRoZSBH
cmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBpdCBkb2Vzbid0IG1hdHRlcj8KKyAgICBzZXRGaWxs
Q29sb3IoZmlsbENvbG9yKCkpOworICAgIHNldFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwor
ICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CisgICAgbV9zdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29u
dGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q0c6
On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dDb250
ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNT
RVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0
LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rp
c2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rp
b24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZv
aWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTksOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGlu
Z0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMg
ZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQg
dG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRl
eHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsy
MzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxh
dGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRv
ciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRN
b2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21w
b3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRv
IGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3Rl
ZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNTAsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3Jt
SW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQp
OwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBv
c2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRp
b24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGlu
dG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBz
dGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJ
bWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8
IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0
UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1p
bGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxi
YWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2NCw3IEBA
IHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRU
b0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVp
Z2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3ND
b250ZXh0Q0coY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJ
bWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQg
cGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQpAQCAtMzQ3LDE2ICszNzIsMTggQEAg
c3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxP
bk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZv
KSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJu
KGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29t
cG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQo
KSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0
NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0
KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAv
LyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRp
ZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQo
IXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4LDE5ICs0NzcsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2lu
dDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQy
LnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSAr
NTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRo
KHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdl
dFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTU2NSwxNiArNTYwLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBo
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFz
ZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2LDE1ICs2MDMsMTAgQEAgc3RhdGljIGlubGluZSBi
b29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpAQCAtNjU0LDE2ICs2MzYsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5m
aWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3Jh
ZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzk0LDE2ICs3NjYsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAog
ICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtODMzLDcgKzc5Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYg
KG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAotICAg
IGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJy
ZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3Qg
dXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0g
KHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNC
bHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAg
Q0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwog
ICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3Mu
CkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3Qp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxs
Q29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsK
IAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhh
c0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8g
RG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hh
ZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAm
JiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFk
b3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNo
YWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0g
ZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cg
PSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBj
YW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFt
X3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRv
dykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzUsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0
LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBhdGgg
cGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNl
dEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAvLyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpIGFz
c3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVjdCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9ubHkg
Y2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJvdW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBib29s
IGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hh
ZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBkcmF3
T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkxMywyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENs
aXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMg
bXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwg
ZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUg
Y2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhh
cyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEg
c2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNh
bm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdElu
ZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4
dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVkQ29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAhY3Rt
LmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBl
KHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9k
ZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0u
YygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENH
UmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4
dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKICAg
ICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0
QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRm
b3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0
KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQpAQCAtMTAyMywxNiArOTQyLDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0NvbnRl
eHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NjAsMTQg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENH
Q29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7CiAK
QEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3Jt
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRF
bmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTEwODgsMTEgKzk4Nyw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0
b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93
T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Q0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBAIC0xMTAwLDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lk
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFN
KHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQorICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENv
cnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEyMSwy
MSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1
cikgeworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXpl
WmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGUg
c2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBrbm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93IG91
cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9mZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAgIENH
RmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMg
PSBibHVyOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAK
LSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIWdy
YXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENHQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwog
CiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSAr
IHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTExNTYsNyArMTA1MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNh
biBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNs
YW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lv
blRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElm
TmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAg
ICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUg
Y29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRo
ZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUwICsx
MDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVy
UmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0
LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4K
LSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3Io
Y29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dDb250
ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOwotfQorICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAg
ICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkp
CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5kTW9k
ZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBDR0Nv
bnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2Rl
KHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRl
eHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKwor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250
ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQor
ICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVy
cG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKworICAg
IGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkK
KyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5z
aGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRT
ZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250
ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFk
aWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChM
aW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNl
IEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCks
IGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIsMTYgKzExODIsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAt
MTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRTZXRM
aW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFz
aGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBqb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4g
am9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1p
dGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCks
IGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMzNSw5NCArMTIwOSw0MyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxS
dWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0Nv
bnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZp
Y2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90
YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5n
bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBs
YXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAgICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25jYXRD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0o
dHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0Jl
SWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAg
bV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdy
YXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNv
bnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAgLy8g
VGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4g
V2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5j
ZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxldmVs
LiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRo
aXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1NSw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGlj
c0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAog
ICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAvLyBJ
dCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4g
VGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXgg
dG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhhdmUg
YQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxpa2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBjbG9j
ayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUgc2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk5LDEx
IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVk
T3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17
Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRo
cy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRp
b24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9r
ZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
RmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHBy
aW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTE1NTYsMTYgKzEzNTcsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVj
b3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5
IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5j
cmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJsUmVmKQogICAgICAgICByZXR1cm47CkBAIC0xNTc5
LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3Qg
VVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4dFNl
dFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRyYW5z
Zm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0
aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQot
ICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZh
dWx0OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBv
bGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Ob25lOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxp
dHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0
aW9uTWVkaXVtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5
OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0
Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJl
IGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNM
YXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSArMTM4MiwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2Rh
dGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xheWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4
dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYmICht
X2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNMYXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlz
QWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBBU1NF
UlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2NlbGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5tX2Nv
bnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogICAgIGVsc2UKICAgICAgICAg
bV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRG
bGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAotICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwotICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ryb2tl
KTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01v
ZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwotICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAgICAg
Q0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNldENHU3Ryb2tl
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3Jt
Q29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25lc3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRl
eHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91
bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQot
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9u
dHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29u
dGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZv
cm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6
cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZvcm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRNb2Rl
KGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2Nv
bnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFj
dG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhp
RFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAg
Ly8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFp
biBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MTEsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1D
b250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0
Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAg
IC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3Jz
LgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7
CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQyMyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCBl
bGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBv
cnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0
YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNl
KTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0U3Ry
b2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4
dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3Qg
cmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwxNSArMTQ1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5h
bWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVk
UG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdl
dENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZDb250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNv
bnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBk
Yzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5MzYyMmNmZDFjMmVjNGYyODllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVz
dG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dD
b250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhI
REMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2Vu
ZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1D
b250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmlu
YWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsK
KyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
KyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOworCisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworCisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
ZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpv
aW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7
CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbDsKKworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworCisgICAgdm9pZCBjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5h
bDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91
YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VT
dHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAg
dm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNJ
bnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2Rh
dGEgeyBudWxscHRyIH07Cit9OworCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcAppbmRleCA1ZmZjZTEyZmVhMjE5ZjMxMDBhOGJlYjk2MjMzMDgwODc4Y2E3YmE2Li42ODY1
ZjBiZDQxYmI0ODQ2MGRiYTFmNGY2YmE1ODA3ODRjY2FlZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0
ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQo
KSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oY2dD
b250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIGRhdGEsIG51bUJ5dGVzLCBbXSAodm9pZCos
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewogICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0
PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJiNGMxMmYwZTgyM2EwODhkMjVmYzE1YWE4ODlhNDI3
Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTI0NCw3ICsyNDQs
NyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBw
bGllcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0
UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOwpAQCAtMzA1
LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgQ0dDb250ZXh0QWRkUGF0
aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVy
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAg
ICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCA3
NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVkZmRhYjIzZGY4MTM0Li4wNWEzOTE2NTQwYmI3NmRh
M2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0Uo
Q0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00Myw3ICs0Myw3IEBAIHN0
YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4
dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVj
dCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCisg
ICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNl
UGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3Jt
SW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29j
b2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAwNjdmY2JhMTkzOWZhZTUxZWRjODc5MmQ0Yy4uZTFl
NWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQyMmZiNTgxY2Y3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQppbmRl
eCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4OTY4ODEzYTMwNTQzZjdkLi4zODhhZmNkNmY0NmFm
YzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5t
bQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3RhdGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4
dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgKICAgICBkcmF3
Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgaWYgKHBh
dGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZv
cm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIGNvbG9yKTsKIH0KIAogI2lmIFBMQVRG
T1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0Nv
bnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250
ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwg
ZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZz
ZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQ
YXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgpOwogICAgIHJldHVybiBkcmF3Rm9jdXNSaW5nQXRU
aW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCksIGNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmlt
YXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGlt
ZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCwgY29s
b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJh
dywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBi
b29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1F
OiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5nLgotICAgICAgICByZXR1cm47
Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0
Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiBy
ZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1Jl
Y3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lTwog
CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQ
YXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoYXV0byYgcmVj
dCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAs
IENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsKQEAgLTE5OSwxMSArMTc2LDgg
QEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JGb3JNYXJrZXJMaW5lU3R5bGUoRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2FudCB0byBmaW5kIHRoZSBudW1iZXIgb2YgZnVsbCBk
b3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBlcXVhdGlvbnM6CiAgICAgLy8gZG90RGlhbWV0ZXIg
PSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRlciAvIGRvdEdhcCA9IDEzLjI0NyAvIDkuNDU3CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KaW5kZXggNThjNTEyNGQ0YjZjNjEzNjRlOGQzNjk2ZjM0OTVmZGIyNjQ1OTdhMC4uZTEzOGMz
MjAxZGRlNjQ1MDA1Yjg2ZDBhOWY2MWE4ZjQwZjc0Njg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzcxLDcgKzM3
MSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9TdXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQo
KQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJuICptX2dyYXBoaWNz
Q29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q0c+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0SXNBY2NlbGVyYXRlZENvbnRleHQodHJ1ZSk7CiAK
ICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyMGRhZWY0YmI0MWY1MDY0ZjNj
MWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li4zZTU1MWI4NTc2NjY3NDQ4NTU4NTllYzk4YjFlY2EwNjM1
OWMyOWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBVU0UoQ09SRV9URVhUKQogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAgLTY4LDcgKzY5LDkgQEAgcHVibGljOgogICAgIERy
YXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsgfQogCiBwcml2YXRlOgotICAgIEdy
YXBoaWNzQ29udGV4dCBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNpZiBVU0UoQ09SRV9URVhU
KQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dCgp
OworI2VuZGlmCiAKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYpOwogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKQEAgLTkxLDcgKzk0LDExIEBAIHByaXZhdGU6CiAKICAg
ICBSZWNvcmRlciYgbV9vd25lcjsKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gbV9kcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb247Ci0gICAgR3JhcGhpY3NDb250ZXh0IG1faW50ZXJuYWxDb250
ZXh0OworCisjaWYgVVNFKENPUkVfVEVYVCkKKyAgICBVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0
PiBtX2ludGVybmFsQ29udGV4dDsKKyNlbmRpZgorCiAgICAgY29uc3QgRm9udCogbV9vcmlnaW5h
bEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGluZ01vZGUgbV9zbW9vdGhpbmdNb2Rl
IHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJD
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKaW5kZXggYzA0ODY1
MmY5YjBlNjVhYjVjMmM5Y2U1OThiNTI3NzAyYzhhYTMzZC4uY2FjZjc2NGY1ZGUyYzhjZjZkM2Y0
MDAwMmZlYWY1ZTEyMTY5MWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcApAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKIAogI2lu
Y2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAt
NzYsNyArNzcsNyBAQCBzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dDb250ZXh0RGVsZWdhdGVS
ZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YQogICAgIHJldHVybiBrQ0dFcnJv
clN1Y2Nlc3M7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0
ZUludGVybmFsQ29udGV4dCgpCitVbmlxdWVSZWY8R3JhcGhpY3NDb250ZXh0PiBEcmF3R2x5cGhz
UmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiB7CiAgICAgYXV0byBjb250ZXh0RGVs
ZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKHRoaXMpKTsKICAgICBDR0Nv
bnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVCZWdpbkxh
eWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZiZWdpbkxh
eWVyKSk7CkBAIC04NCw3ICs4NSw3IEBAIEdyYXBoaWNzQ29udGV4dCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxs
YmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBocywgcmVpbnRlcnByZXRfY2Fz
dDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6RGlzcGxheUxpc3Q6OmRyYXdH
bHlwaHMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0
ZS5nZXQoKSwgZGVEcmF3SW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVD
YWxsYmFjaz4oJmRyYXdJbWFnZSkpOwogICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dDb250
ZXh0Q3JlYXRlV2l0aERlbGVnYXRlKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwga0NHQ29udGV4dFR5
cGVVbmtub3duLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHcmFwaGljc0NvbnRl
eHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAKIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBo
c1JlY29yZGVyKFJlY29yZGVyJiBvd25lciwgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTExOSwzNCArMTIwLDMxIEBAIHZvaWQgRHJhd0dseXBo
c1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmIGNvbnRlCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0ZSkKIHsKICAgICBpZiAo
bV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIG1faW50
ZXJuYWxDb250ZXh0LnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
KTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3Rh
dGUuZmlsbFN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsR3JhZGllbnQo
Km1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1f
b3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwog
ICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKQotICAgICAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxs
U3R5bGUucGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbFBh
dHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgfQogCiAgICAg
aWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
IG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VT
dHlsZS5jb2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VDb2xvciht
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOwogICAgIGVsc2UgaWYgKG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQu
c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwg
bV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAg
ICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0
ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobV9vcmlnaW5h
bFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRl
LnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRT
dHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CisgICAg
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgIH0KIAotICAgIG1faW50ZXJuYWxDb250ZXh0
LnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zv
cm1zKTsKLSAgICBpZiAoY29udGV4dFN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCi0gICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hh
ZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93LmNvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFNo
YWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKKyAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5p
Z25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93KG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1f
b3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5zaGFkb3dSYWRpdXNNb2Rl
KTsKIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3Rh
dGUudGV4dERyYXdpbmdNb2RlKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0VGV4dERyYXdp
bmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwogfQogCiB2b2lkIERyYXdHbHlw
aHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBGb250JiBmb250LCBGb250
U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtMzAyLDcgKzMwMCw3IEBAIHZvaWQgRHJh
d0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENH
R1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIHJldHVybjsKIAogI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5h
bENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dD
b250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7CiAgICAgQVNTRVJUKCF0ZXh0UG9zaXRp
b24ueSk7CiAjZW5kaWYKQEAgLTMyMSw3ICszMTksNyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRl
cjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3Rh
dAogICAgIC8vIElmIHlvdSBzZXQgdGhlc2UgdHdvIGVxdWFsIHRvIGVhY2ggb3RoZXIsIGFuZCBz
b2x2ZSBmb3IgWCwgeW91IGdldAogICAgIC8vIENUTSAqIGN1cnJlbnRUZXh0TWF0cml4ID0gQ1RN
ICogWCAqIG1fb3JpZ2luYWxUZXh0TWF0cml4CiAgICAgLy8gY3VycmVudFRleHRNYXRyaXggKiBp
bnZlcnNlKG1fb3JpZ2luYWxUZXh0TWF0cml4KSA9IFgKLSAgICBBZmZpbmVUcmFuc2Zvcm0gY3Vy
cmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJuYWxDb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3VycmVudFRleHRNYXRy
aXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJuYWxDb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bUZpeHVwOwogICAgIGlmIChhdXRvIGlu
dmVydGVkT3JpZ2luYWxUZXh0TWF0cml4ID0gbV9vcmlnaW5hbFRleHRNYXRyaXguaW52ZXJzZSgp
KQogICAgICAgICBjdG1GaXh1cCA9IGN1cnJlbnRUZXh0TWF0cml4ICogaW52ZXJ0ZWRPcmlnaW5h
bFRleHRNYXRyaXgudmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmNwcAppbmRleCA1NGQ4NTQ3MTIzZjg5NDdkNmYyZmFjZDdmY2E2Zjk5NTE4
MWEyNjcxLi4zOTU3YzQ1NzZmZTkxMmQ2ODEwMjA3NjEwMDFjYzI0ZjY4Njg4NjJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCkBAIC0zNCw5
ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAK
IERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIFJlY29yZGVyOjpEZWxlZ2F0
ZSogZGVsZWdhdGUpCi0gICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxh
eUxpc3RDb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNw
bGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZs
b2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVsZWdhdGUpOwotICAgIH0p
CisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
RmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0ZSkKIHsKIH0K
IApAQCAtNDYsMTMgKzQ0LDYgQEAgdm9pZCBEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKICAgICBtX3JlcGxheWVk
RGlzcGxheUxpc3QucmVzZXQoKTsKIH0KIAotUmVjb3JkZXImIERyYXdpbmdDb250ZXh0OjpyZWNv
cmRlcigpCi17Ci0gICAgYXV0byogZ3JhcGhpY3NDb250ZXh0SW1wbCA9IGNvbnRleHQoKS5pbXBs
KCk7Ci0gICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dEltcGwpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxSZWNvcmRlciY+KCpncmFwaGljc0NvbnRleHRJbXBsKTsKLX0KLQogdm9pZCBEcmF3aW5n
Q29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkK
IHsKICAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAppbmRleCBkMzdjMDczNWJlYjU1NDkyZDkwZmY5
ZWNlNGNhNGRiNzk5NWQ1ZjU4Li5kOTVkZGRlZjg1NzUyOGM4Mjc5ZTRmMWVmYmYyZDI1ODhmNmNh
NGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
QEAgLTM5LDggKzM5LDkgQEAgY2xhc3MgRHJhd2luZ0NvbnRleHQgewogcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgUmVjb3JkZXI6OkRlbGVn
YXRlKiA9IG51bGxwdHIpOwogCisgICAgLy8gRklYTUU6IERlZHVwbGljYXRlIHRoZXNlLgogICAg
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJh
d2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVj
b3JkZXImIHJlY29yZGVyKCk7CisgICAgUmVjb3JkZXImIHJlY29yZGVyKCkgeyByZXR1cm4gbV9j
b250ZXh0OyB9OwogICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJuIHN0
ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0JiBkaXNw
bGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CkBAIC01MCw3
ICs1MSw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxheURpc3BsYXlM
aXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR3JhcGhpY3NDb250ZXh0
IG1fY29udGV4dDsKKyAgICBSZWNvcmRlciBtX2NvbnRleHQ7CiAgICAgRGlzcGxheUxpc3QgbV9k
aXNwbGF5TGlzdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1vcnlEaXNwbGF5TGlzdD4gbV9y
ZXBsYXllZERpc3BsYXlMaXN0OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7
IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMWE0ZWE2
ZGUzYjVhOGNlMzVkOGU3NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIyMmUyMTgzYTM5MTAzYmQ2OTg1
MzQ0NjRkZjNjYjBhOGZmOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cApAQCAtNjA1LDExICs2MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAKIHZvaWQgRHJhd1BhdGg6OmFw
cGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSNpZiBVU0UoQ0cpCiAgICAg
Y29udGV4dC5kcmF3UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29udGV4
dCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IERyYXdQYXRoJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCmlu
ZGV4IDA3NDA0MWYyNmExZTk2NGRjNGM3NmY0ODJiYzRjOTkzZTg3ZWUzMTUuLmYxMTdjZmE4Mzkz
NjA4OWU3MWZkMDVhYjc4NjQ4YmQyNDhkNWU3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaApAQCAtMjc5LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX3N0cm9rZVBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogICAgIFJlbmRlcmluZ1Jl
c291cmNlSWRlbnRpZmllciBmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsbFBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogCi0gICAgc3RhdGljIHZv
aWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAgc3Rh
dGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsK
LQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25z
dDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0U3RhdGU+
IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTMzNSw5ICszMzEsNyBAQCB2b2lkIFNldFN0YXRlOjpl
bmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5z
aGFkb3dPZmZzZXQ7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKICAgICAg
ICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgICAgIGVu
Y29kZXIgPDwgc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cp
CisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9CiAKICAg
ICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkpCkBAIC00NjMsMTQgKzQ1NywxMiBAQCBPcHRpb25hbDxTZXRTdGF0ZT4g
U2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiAgICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAKLSNpZiBVU0UoQ0cpCi0gICAg
ICAgIE9wdGlvbmFsPGJvb2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0gICAgICAgIGRlY29k
ZXIgPj4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgaWYgKCFzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzKQorICAgICAgICBPcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dSYWRp
dXNNb2RlOworICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGlm
ICghc2hhZG93UmFkaXVzTW9kZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gKnNo
YWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENHKQorICAgICAgICBzdGF0ZUNo
YW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNNb2Rl
KTsKICAgICB9CiAKICAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDY5NDQ4MjhkZmM2NGI4NzRiOTM3
Y2VlYWRmMmFlZGMyYTY3MzgxMTUuLjMxMTFiOTE3MTMwMjAwZjkxZjFkODFiZGFmZjBiNGMwNmFm
NGU5MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAgLTMz
LDE1ICszMywxNSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
IAotUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0
IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENU
TSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNv
bnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0gICAgOiBHcmFwaGljc0NvbnRl
eHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQorUmVjb3Jk
ZXI6OlJlY29yZGVyKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwgRHJhd0dseXBoc1Jl
Y29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9u
KQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKICAgICAsIG1fZGVsZWdhdGUoZGVs
ZWdhdGUpCiAgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3Jk
ZXIoKnRoaXMsIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTUwLDkgKzUwLDggQEAgUmVj
b3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0LCBjb25zdCBHcmEKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUsIGlu
aXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOwogfQogCi1SZWNvcmRlcjo6UmVjb3JkZXIoUmVjb3Jk
ZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4
dCkKLSAgICAsIG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6
UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IGluaXRpYWxDVE0pCisgICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rpc3BsYXlMaXN0KQog
ICAgICwgbV9kZWxlZ2F0ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQodHJ1
ZSkKICAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBwYXJlbnQubV9kcmF3R2x5cGhz
UmVjb3JkZXIuZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKCkpCkBAIC0xNjYsMTEgKzE2NSw2IEBA
IFJlbmRlcmluZ01vZGUgUmVjb3JkZXI6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogICAgIHJldHVy
biBtX2RlbGVnYXRlID8gbV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewot
ICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQogdm9pZCBSZWNvcmRlcjo6c2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXApOwpA
QCAtMjA2LDYgKzIwMCwxMSBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmREcmF3R2x5cGhzSXRlbVdp
dGhDYWNoZWRGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQgogCiB2b2lkIFJlY29y
ZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAgIC8vIEZJWE1FOiBUaGlzIGZl
ZWxzIG9kZCwgYnV0IGlzIHdoYXQgdXNlZCB0byBoYXBwZW4uCisgICAgaWYgKCFjYW5EcmF3SW1h
Z2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9kaXNwbGF5TGlzdC5jYWNoZUltYWdlQnVmZmVyKGlt
YWdlQnVmZmVyKTsKICAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFnZUJ1ZmZlci5yZW5k
ZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwog
fQpAQCAtMjcwLDcgKzI2OSw3IEBAIHZvaWQgUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBhcHBlbmQ8U2V0Q1RNPih0cmFuc2Zvcm0pOwogfQog
Ci1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1
ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBSZXNw
ZWN0IHRoZSBnaXZlbiB2YWx1ZSBvZiBJbmNsdWRlRGV2aWNlU2NhbGUuCiAgICAgcmV0dXJuIGN1
cnJlbnRTdGF0ZSgpLmN0bTsKQEAgLTI5OCw4ICsyOTcsOSBAQCB2b2lkIFJlY29yZGVyOjpkcmF3
TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikK
ICAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAotdm9pZCBSZWNvcmRl
cjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVM
aW5lcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogeworICAgIC8vIEZJWE1FOiBX
aHkgaXMgc3Ryb2tlU3R5bGUgbm90IHVzZWQ/CiAgICAgYXBwZW5kPERyYXdMaW5lc0ZvclRleHQ+
KEZsb2F0UG9pbnQoKSwgdG9GbG9hdFNpemUocG9pbnQpLCB0aGlja25lc3MsIHdpZHRocywgcHJp
bnRpbmcsIGRvdWJsZUxpbmVzKTsKIH0KIApAQCAtMzI4LDYgKzMyOCwxOCBAQCB2b2lkIFJlY29y
ZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0CiAgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4ocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3ZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3Im
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogdm9pZCBSZWNvcmRlcjo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGFwcGVuZDxGaWxsUmVjdD4o
cmVjdCk7CkBAIC00NDAsMTAgKzQ1Miw5IEBAIHZvaWQgUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZDxDbGlwUGF0aD4ocGF0
aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJl
Y3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIFdURkxvZ0Fsd2F5cygiR2V0
dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBEaXNwbGF5TGlzdDo6
UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4LCA0MDk2LCA0MDk2
KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRz
KTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtNDUyLDM1ICs0NjMsMzQg
QEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QKICAgICBhcHBlbmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+
KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCk7CiB9
CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1
bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQorR3JhcGhp
Y3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVjb3JkZXI6OmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0
Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4dCBuZXN0ZWRDb250
ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgYXV0byBpbml0aWFs
Q2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CisgICAg
YXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNp
emUoKSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMgSW1hZ2VCdWZmZXIn
cyBpbml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENU
TShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwotICAgICAg
ICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNj
YWxlKCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZEludFNpemUoZGVzdGlu
YXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gaW5p
dGlhbENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0gICAgICAgIGluaXRp
YWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgaW5pdGlh
bENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICAvLyBUaGUg
aW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgorICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5
SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3Jt
LnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4
cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7CisgICAgQWZm
aW5lVHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Cisg
ICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOworICAgIGlu
aXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29yZGVyKCp0aGlzLCBj
b250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgaW5pdGlhbENUTSkp
OwotICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBhcHBlbmQ8QmVnaW5D
bGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlKTsKICAgICBkcmF3
aW5nRnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENsaXBUb0RyYXdpbmdD
b21tYW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBSZWNv
cmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJiBwbGF5ZXIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gQ2xp
cFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYgRU5BQkxFKFZJREVP
KQogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiBwbGF5ZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFwbGF5ZXIuaWRlbnRp
ZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBs
YXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIEFTU0VSVChw
bGF5ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZvck1lZGlhPihwbGF5
ZXIsIGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjcsNyBAQCBGbG9hdFJlY3QgUmVjb3Jk
ZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJlY3QpIGNvbnN0CiAg
ICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dSYWRpdXM7CiAgICAg
Q29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgpLmdldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CisgICAgaWYgKGdldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7CiAgICAgICAg
IEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNoYWRvd0V4dGVudC5t
b3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZsYXRlKHNoYWRvd1Bh
aW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTUsNiBAQCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJldHVybiBjdXJyZW50
U3RhdGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6OmNsaXBCb3VuZHMo
KSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91bmRzOwotfQotCiB2
b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQog
ewogICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVj
b3JkZXIuaAppbmRleCBiODc2ZDZhZGI1MTQ3M2YxZjMwYWFiZGMyYmEyNWFhM2I2MDI0MTliLi4w
ZDg2NjFjMTc5YzdjYTljN2M5ZDIxZjE5NDM0MGM5N2JiOTk0NWQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEaXNw
bGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgiCiAj
aW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dElt
cGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIiAv
LyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVjdCBJbWFnZVBhaW50
aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xhc3MgUmVjb3JkZXIg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBH
cmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFzcyBEZWxlZ2F0ZTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQmLCBEaXNwbGF5TGlz
dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFs
Q2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVsbHB0ciwgRHJhd0ds
eXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOworICAgIFdFQkNPUkVf
RVhQT1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBE
ZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpE
ZWNvbnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVjb3JkZXIoKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3QgUGl4ZWxCdWZmZXJG
b3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCk7CkBAIC03Nywx
NSArNzcsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBEcmF3R2x5
cGhzUmVjb3JkZXI7Ci0gICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRp
YWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOworICAgIFJlY29yZGVy
KFJlY29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKTsK
IAogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUgdGhpcz8KKyAgICBi
b29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0OwogICAgIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBudWxscHRyOyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29u
c3Qgb3ZlcnJpZGU7CiAKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNl
dElzQ0FMYXllckNvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlmCisKKyAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZvaWQgZHJhd0xpbmVG
b3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBvdmVycmlk
ZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNo
KGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRlOwpAQCAtMTA1LDcg
KzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogCi0jaWYgVVNFKENHKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHZv
aWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0
ZXJuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyMCwxNCArMTI5LDIwIEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHls
ZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRy
YXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCiAgICAgdm9pZCBkcmF3UGF0
aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKIAorI2lmIFBMQVRG
T1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7CisjZW5kaWYK
KwogICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRl
OwogCkBAIC0xMzYsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
IG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJ
bmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92ZXJyaWRlOwogCiAg
ICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTE0NSwxMiArMTYw
LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
bGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIG92ZXJyaWRlOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikg
b3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsK
LSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0
IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpIG92ZXJyaWRlOwpAQCAtMTczLDcgKzE4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7Ci0gICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5k
cyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRlbS5s
b2NhbEJvdW5kcygqdGhpcykpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3
aW5nSXRlbUV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMoKnJlY3QpKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7CkBAIC0xOTUsNyAr
MjEwLDYgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNv
bnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
Y3RtKCkgY29uc3Q7Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRzKCkgY29uc3Q7CiAK
ICAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQpp
bmRleCA2NWJjYTY3MGY5Mjg2ZDI1YTE5NTE5MjFiODVmMGEwNWEwMTUyZDUxLi44OWQ4ODJjNTdm
NDc2MWU1NDZkZDQyNDcwMWYzM2QyZmIyMDMxZjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBVU0UoQVBQS0lUKQogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCAi
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhj
ZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0xvY2suaD4KQEAgLTg1LDcgKzg2LDcgQEAgc3RhdGlj
IE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9tTlNDb2xvcihOU0Nv
bG9yICpjb2xvcikKICAgICAgICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VSZXA+IG9mZnNjcmVl
blJlcCA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERh
dGFQbGFuZXM6bmlsIHBpeGVsc1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAgICAgICAgIGJpdHNQ
ZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQbGFuYXI6Tk8gY29s
b3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93OjQgYml0c1BlclBp
eGVsOjMyXSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGJpdG1hcENvbnRleHQoW05TR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5S
ZXAuZ2V0KCldLkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGJpdG1hcENv
bnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJl
cDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CiAgICAgICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoYml0bWFwQ29udGV4dCk7CiAKICAgICAgICAgW2Nv
bG9yIGRyYXdTd2F0Y2hJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KaW5kZXggY2U3YWJk
N2I0ZTk1ZWViMzg5NmFlNWQ5YjNjYTRkMWNlMGZlYjllZi4uNTU0ODBiNTJiOTFlMDI4NjJmZjBi
ZmMxMzA2ZGE4MGQ2MDNjNTQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFwaGljc0xheWVyQ0Eu
aCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+CkBAIC01MSw3ICs1MSw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKIHsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCopc2VsZik7CiAgICAg
aWYgKGxheWVyKSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoY29udGV4dCk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpS
ZXBhaW50UmVjdExpc3QgcmVjdHNUb1BhaW50ID0gV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpj
b2xsZWN0UmVjdHNUb1BhaW50KGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCkpOwogICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRzKGdyYXBoaWNzQ29u
dGV4dCwgbGF5ZXIuZ2V0KCksIHJlY3RzVG9QYWludCwgc2VsZi5pc1JlbmRlcmluZ0luQ29udGV4
dCA/IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludFNuYXBzaG90dGluZyA6IFdlYkNvcmU6Okdy
YXBoaWNzTGF5ZXJQYWludE5vcm1hbCk7CiAgICAgfQpAQCAtMTI4LDcgKzEyOCw3IEBAIC0gKHZv
aWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllckZvckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5
ZXIgJiYgbGF5ZXItPm93bmVyKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmlj
b3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAK
aW5kZXggZjMyNzY0MzY4NTFjYzdlMDFkNDcwYzU3MGQ5ZDlmMDZjMjNkNWZjNS4uNTc3NGQwZGUw
ZTk0MDkyZDg0YjczMmU5ODQzOTA2MzYzZTA1NjI2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAgLTcyLDkgKzcyLDgg
QEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjplbmFibGVfaWZfdDxzdGQ6OmlzX2Jhc2Vf
b2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKICAgICByZXR1cm4gbWFrZVVuaXF1ZTxUPigpOwog
fQogCi1DYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVyKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlzdCkKLSAg
ICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fY29tbWFuZExpc3QoY29t
bWFuZExpc3QpCitDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
KFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCisgICAgOiBtX2NvbW1hbmRMaXN0KGNv
bW1hbmRMaXN0KQogewogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0sIHsgfSwgRmxvYXRS
ZWN0OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0KQEAgLTE1NCwxMCArMTUzLDYgQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUsIEdyYXAKICAgICB9CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xlYXJTaGFkb3coKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewogICAgIHN0cnVjdCBTZXRMaW5lQ2FwIGZpbmFsIDog
UGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNhcD4gewpAQCAtMjUwLDcgKzI0
NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIENhaXJvOjpGaWxsU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC0yNzAsNyArMjY1
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dT
dGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7
CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCkBAIC0yOTIsNyArMjg3LDcgQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdy
YWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBncmFkaWVudC5j
cmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pKSk7CiB9
CiAKQEAgLTMxNiw3ICszMTEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLAogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcikpOwogfQog
CkBAIC0zNDYsNyArMzQxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QKICAgICAgICAgfQog
ICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Cisg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5k
PEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9yLCBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTM2
Nyw3ICszNjIsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogICAgIH07CiAKICAgICBVTlVT
RURfUEFSQU0oY29sb3IpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zODYsNyArMzgxLDcgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOwogfQogCkBAIC00MDgsNyArNDAzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93
U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQyOCw3ICs0MjMsNyBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpT
dHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAg
LTQ0OCw3ICs0NDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBhdGgsIENhaXJvOjpT
dHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAg
LTQ3MCw3ICs0NjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlRWxsaXBzZT4ocmVj
dCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
KTsKIH0KIApAQCAtNTIzLDcgKzUxOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50
LAogICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5wbGF0Zm9ybURhdGEo
KS5zY2FsZWRGb250KCkpLApAQCAtNTUzLDcgKzU0OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3Qg
RmxvCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2ZUltYWdlPihuYXRp
dmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5n
T3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSwgc3RhdGUu
YWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTkzLDcgKzU4OCw3
IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3UmVjdD4ocmVjdCwg
Ym9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02MTMsMTEgKzYwOCwxMSBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxl
KQogewogICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRp
b24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJheSwgYm9vbCwgYm9v
bCwgQ29sb3I+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4dCgpID0gZGVmYXVs
dDsKQEAgLTYzMyw3ICs2MjgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaQogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywg
ZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIH0KIApAQCAtNjcyLDE0ICs2
NjcsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVjdCwgc3RhdGUuZmls
bENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRo
KGNvbnN0IFBhdGgmKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5nIGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENvbG9yPiB7CkBAIC05
MDMsNyArODk0LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgc3RhdGUuY3RtSW52ZXJzZSA9IGludmVy
c2UudmFsdWUoKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5z
Zm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCku
Y3RtOwogfQpAQCAtMTAzMiw3ICsxMDIzLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICB9CiB9
CiAKLUludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpCitJbnRSZWN0
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAgIGF1dG8m
IHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJvdW5kcykpOwpAQCAtMTA3Niwx
NSArMTA2NywxNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFwcGVuZChzdGQ6OnVu
aXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1fY29tbWFuZExpc3Qu
YXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQorR3Jh
cGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERl
c3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYp
CiB7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXIm
LCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZy
YW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIEdyYXBoaWNzQ29u
dGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwogfQogI2VuZGlm
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXIuaAppbmRleCAzMDhmMWZmNjM2NTZhZGE0MDlmMGQ1ZjUwMzZiYzkxZTI1ZDdiNmQyLi43N2Fl
NTBkZjA0OTJkM2FiZjg4ZmRmN2M1YzMzOTk3Mjc3YmJjNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBAIC0yOCwyMSArMjgs
MjAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTmljb3NpYVBhaW50aW5n
T3BlcmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIAotY2xhc3MgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsIHsK
K2NsYXNzIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKLSAgICBDYWlyb09wZXJhdGlvblJlY29yZGVyKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCYsIFBhaW50aW5nT3BlcmF0aW9ucyYpOworICAgIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJik7CiAKIHByaXZhdGU6CiAgICAgYm9v
bCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5lQ2FwKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGZsb2F0
KSBvdmVycmlkZTsKQEAgLTUzLDYgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBXZWJDb3Jl
OjpHcmFkaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpDb21wb3NpdGVPcGVy
YXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsK
ICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVycmlkZTsKQEAgLTcw
LDEwICs3MCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBm
bG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJyYXkmLCBib29sLCBi
b29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3Qg
V2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwpA
QCAtODYsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgV2ViQ29y
ZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkg
b3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTk1LDEyICs5NCwxMSBAQCBwcml2
YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogICAg
IHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6OldpbmRSdWxlKSBv
dmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKKyAg
ICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lk
IGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
KT4mJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFj
ZSYsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRl
OwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShXZWJDb3Jl
OjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92
ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IFdlYkNvcmU6Ok1l
ZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICNlbmRpZgogCiAg
ICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YVBhaW50aW5nQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAppbmRleCAw
MDExMDBmNzc3ODFlNGNmNWI4YzFkODdhMmM2YzM3Y2NlOGFhZjU0Li40OWFiY2FhNDUyNTMxNDUz
ODRiMzU1ODg0Njg2N2UwY2ZiZDA2YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaWYgVVNF
KENBSVJPKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIK
ICNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmljb3NpYUNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb25SZXBsYXlD
YWlyby5oIgpAQCAtNzEsNyArNzEsNyBAQCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRp
bmc6OkZvclBhaW50aW5nKEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgbV9jYWlyby5jb250ZXh0ID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY2Fpcm8uc3VyZmFjZS5nZXQoKSkpOwogICAgIG1fcGxh
dGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRDYWlybz4o
bV9jYWlyby5jb250ZXh0LmdldCgpKTsKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlx
dWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PihXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNyZWF0ZUZhY3RvcnkoKm1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9ncmFwaGlj
c0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvPigqbV9w
bGF0Zm9ybUNvbnRleHQpOwogfQogCiBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6
On5Gb3JQYWludGluZygpCkBAIC0xMDQsMTEgKzEwNCw3IEBAIHZvaWQgUGFpbnRpbmdDb250ZXh0
Q2Fpcm86OkZvclBhaW50aW5nOjpyZXBsYXkoY29uc3QgUGFpbnRpbmdPcGVyYXRpb25zJiBwYWlu
dGluCiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6OkZvclJlY29yZGluZyhQ
YWludGluZ09wZXJhdGlvbnMmIHBhaW50aW5nT3BlcmF0aW9ucykKIHsKLSAgICBtX2dyYXBoaWNz
Q29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PigKLSAgICAgICAg
WyZwYWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcj4oY29udGV4dCwgcGFpbnRpbmdPcGVyYXRpb25zKTsKLSAgICAgICAgfSk7CisgICAg
bV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPENhaXJvT3BlcmF0aW9uUmVjb3JkZXI+KHBh
aW50aW5nT3BlcmF0aW9ucyk7CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRp
bmc6On5Gb3JSZWNvcmRpbmcoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApp
bmRleCA4MzBhZWQwODIyZjU3NWQ1MmM4YmRiZDFjZTI4MmI4ZWJhN2Q1MGJiLi4wZjlkODcyOWU3
MWRkNDJlODBlNTllZWIzOGJhODFjMDRiZWNmM2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5j
cHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKQEAgLTY3LDMyICs2NywxOSBAQCBzdGF0aWMgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gQ0dDb250ZXh0V2l0aEhEQyhIREMgaGRjLCBib29sIGhhc0Fs
cGhhKQogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBo
aWNzQ29udGV4dENHKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCisgICAgOiBHcmFwaGljc0NvbnRl
eHRDRyhDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEpKQogewotICAgIHBsYXRmb3JtSW5p
dChoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dChIREMgaGRjLCBib29sIGhhc0FscGhhKQotewotICAgIGlmICghaGRjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENH
Q29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpOwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7
Ci0gICAgaWYgKG1fZGF0YS0+bV9jZ0NvbnRleHQpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29s
b3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQogfQogCiAvLyBGSVhNRTogSXMgaXQgcG9zc2libGUg
dG8gbWVyZ2UgZ2V0V2luZG93c0NvbnRleHQgYW5kIGNyZWF0ZVdpbmRvd3NCaXRtYXAgaW50byBh
IHNpbmdsZSBBUEkKIC8vIHN1aXRhYmxlIGZvciBhbGwgY2xpZW50cz8KIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0
UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAg
PSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7Cisg
ICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hk
YyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsK
LSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTExMCw3ICs5
Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhk
YywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRBbHBoYUJsZW5kID8ga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSkp
OwogCiAgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Yml0bWFwQ29udGV4dC5nZXQoKSkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1f
Y2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CisgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2NnQ29udGV4dC5nZXQoKSwgZHN0
UmVjdCwgaW1hZ2UuZ2V0KCkpOwogICAgIAogICAgIC8vIERlbGV0ZSBhbGwgb3VyIGp1bmsuCiAg
ICAgOjpEZWxldGVEQyhoZGMpOwpAQCAtMTI0LDIxICsxMTEsMTggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQ
b2ludCYgcG8KICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGltYWdlRGF0YS5nZXQoKSkp
OwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSwgOCwgMzIs
IGltYWdlLT5ieXRlc1BlclJvdygpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQml0bWFwQnl0
ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRhdGFQcm92aWRlci5nZXQoKSwg
MCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIENHQ29udGV4dERyYXdJ
bWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9p
bnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBj
Z0ltYWdlLmdldCgpKTsgICAKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9p
bnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBj
Z0ltYWdlLmdldCgpKTsgICAKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBGSVhNRTogVGhpcyBpcyBuZWFy
bHkgaWRlbnRpY2FsIHRvIHRoZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcgZnVuY3Rp
b24gaW4gR3JhcGhpY3NDb250ZXh0TWFjLm1tLgogLy8gVGhlIGNvZGUgY291bGQgbW92ZSB0byBH
cmFwaGljc0NvbnRleHRDRy5jcHAgYW5kIGJlIHNoYXJlZC4KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmbG9hdCByYWRpdXMgPSAo
d2lkdGggLSAxKSAvIDIuMGY7CiAgICAgb2Zmc2V0ICs9IHJhZGl1czsKICAgICBDR0NvbG9yUmVm
IGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8gY2FjaGVkQ0dDb2xvcihjb2xvcikgOiBudWxs
cHRyOwpAQCAtMTY0LDExICsxNDgsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLAogICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgaWYgKHN0eWxlLm1vZGUgIT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OlNwZWxsaW5nICYmIHN0eWxlLm1vZGUgIT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6
Ok1vZGU6OkdyYW1tYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ0LDUgKzIyNSwxMCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQogICAgIENHQ29udGV4
dEZsdXNoKG1fY2dDb250ZXh0LmdldCgpKTsKIH0KIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKiBHcmFwaGljc0NvbnRleHRDRzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQorCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q2Fpcm9XaW4uY3BwCmluZGV4IGYxNDQyNTcyY2M2ZDFkNTRiYmVlNThiZGJjMzZlZGY3NzRh
YWJiNjQuLmYzYzhmMWRkMTE0NWIyMWVjNTYxZGFmOTBhMTNlMzZjZjM3ZDRiN2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
YWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dENhaXJvV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRElCUGl4ZWxEYXRhLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgi
CiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTY2LDI4
ICs2Niw5IEBAIHN0YXRpYyBjYWlyb190KiBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKEhEQyBo
ZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29u
dGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhIREMgZGMsIGJvb2wgaGFzQWxwaGEpCisg
ICAgOiBHcmFwaGljc0NvbnRleHRDYWlybyhjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBo
YXNBbHBoYSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGRjLCBoYXNBbHBoYSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGRjLCBib29sIGhhc0FscGhhKQotewot
ICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNhaXJvX3QqIGNyID0gY3JlYXRl
Q2Fpcm9Db250ZXh0V2l0aEhEQyhkYywgaGFzQWxwaGEpOwotCi0gICAgbV9kYXRhID0gbmV3IEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENh
aXJvPihjcikpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4
dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPm1faGRjID0gZGM7Ci0gICAgaWYgKHBsYXRm
b3JtQ29udGV4dCgpLT5jcigpKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBz
dGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICAgICAgc2V0UGxhdGZvcm1GaWxsQ29s
b3IoZmlsbENvbG9yKCkpOwotICAgICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNv
bG9yKCkpOwotICAgIH0KLSAgICBpZiAoY3IpCi0gICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwog
fQogI2VuZGlmCiAKQEAgLTEyNyw5ICsxMDgsOSBAQCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9D
b250ZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IERJQgog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNv
bnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9v
bCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3Bh
cmVuY3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9ICFkZXByZWNhdGVkUHJpdmF0
ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFo
ZGMgfHwgIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAg
ICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTE3OCw0ICsxNTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6Zmx1c2goKQogfQogI2VuZGlmCiAKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsKK30KKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERp
cmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHREaXJlY3QyRC5jcHAKaW5kZXggMjlhODJhODk3ODIyOWIwZjU4NzNhYmRmODJiZmFm
ODA2Y2YxNjU5OC4uNjVlOTdmOTczNDY5MjI4MmQyN2ZjMWVkNzg0ODhkMTgxNzNjMTYxYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCkBAIC00NywxNyArNDcsMTcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMg
aGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgcGxhdGZvcm1Jbml0
KGhkYywgaGFzQWxwaGEpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChI
REMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJv
b2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCBy
ZWN0LCBib29sIGhhc0FscGhhKQogewogICAgIC8vIENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQu
CiAgICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3Bl
cnRpZXMoKTsKIAotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdl
dCk7CisgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0
b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJn
ZXQpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCiAgICAgKCpyZW5kZXJU
YXJnZXQpLT5CaW5kREMoaGRjLCAmcmVjdCk7CkBAIC02NywxMiArNjcsMTIgQEAgR3JhcGhpY3ND
b250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJl
bmRlclRhcmdldCwgUkUKICAgICBtX2RhdGEtPm1faGRjID0gaGRjOwogfQogCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1H
cmFwaGljc0NvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkK
K0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIEJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKIHsKICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1H
cmFwaGljc0NvbnRleHQsIHJlbmRlcmVyVHlwZSk7CiB9CiAKLUlEMkQxRmFjdG9yeSogR3JhcGhp
Y3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKK0lEMkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKQogewogICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRp
cmVjdDJERmFjdG9yeSA9IG51bGxwdHI7CiAgICAgaWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKQEAg
LTg5LDcgKzg5LDcgQEAgSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rv
cnkoKQogICAgIHJldHVybiBkaXJlY3QyREZhY3Rvcnk7CiB9CiAKLUlEMkQxUmVuZGVyVGFyZ2V0
KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQorSUQyRDFSZW5kZXJUYXJn
ZXQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCkKIHsKICAg
ICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRy
OwogICAgIGlmICghZGVmYXVsdFJlbmRlclRhcmdldCkgewpAQCAtMTA0LDcgKzEwNCw3IEBAIElE
MkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQog
ICAgIHJldHVybiBkZWZhdWx0UmVuZGVyVGFyZ2V0OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAg
ICBpZiAoIWhkYykKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2LDEyICsxMzYsMTIgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogICAg
IC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50
ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZv
cm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0
Zm9ybUNvbnRleHQpCiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtQ29udGV4dCwgQml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4
dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCog
cGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBl
KQogewogICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm47CkBAIC0xNTUs
MTYgKzE1NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdAogICAgIC8vIEZJWE1FOiBtX3N0
YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6fkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKCkKIHsKICAgICBkZWxldGUg
bV9kYXRhOwogfQogCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VS
VCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICByZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1Db250
ZXh0KCk7CiB9CiAKQEAgLTE5NSwzMyArMTkyLDI4IEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6Y3VycmVudEdsb2JhbEFscGhhKCkgY29uc3QKICAgICByZXR1cm4gbV9h
bHBoYTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgRGlyZWN0
MkQ6OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJl
c3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgRGlyZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29u
dGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNv
bnN0IENPTVB0cjxJRDJEMUJpdG1hcD4mIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBp
bWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUu
YWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIERpcmVjdDJEOjpkcmF3
TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdl
KCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFs
cGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RS
ZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3Qs
IGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9p
bXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJv
b2wgY3JlYXRlZEJpdG1hcCA9ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDM0ICsyNTQsMzUgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRS
ZWN0JiBkc3RSZWN0LCBib28KICAgICA6OkRlbGV0ZURDKGhkYyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3Qg
SW50UG9pbnQmIHBvaW50KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1dpbmRv
d3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHls
ZSkKIHsKKyAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCwgc3R5bGUpOwogfQogCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlIHJlbmRlcmluZ1R5cGUpCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3Jt
Q29udGV4dCkKICAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYg
KCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkp
CiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6
dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25lZFBsYXRmb3JtQ29udGV4
dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJl
bmRlcmluZ1R5cGUpCiAgICAgOiBtX293bmVkUGxhdGZvcm1Db250ZXh0KFdURk1vdmUob3duZWRQ
bGF0Zm9ybUNvbnRleHQpKQogICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9y
bUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJpbmdUeXBlKQpAQCAtMjk3LDcg
KzI5MCw3IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQCiAgICAgaWYgKCFtX3BsYXRmb3JtQ29u
dGV4dC5yZW5kZXJUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVy
ZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQ
VU1lbW9yeSkKKyAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2lu
RHJhdygpOwogfQogCkBAIC0zMTAsOSArMzAzLDggQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKICAgICAgICAgZW5kRHJh
dygpOwogfQogCi1JRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpicnVzaFdp
dGhDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBwbGF0Zm9ybUNv
bnRleHQoKS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFsQWxwaGEoY29sb3IpKS5nZXQo
KTsKIH0KIApAQCAtMzcyLDczICszNjQsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKIH0KIAotRDJEMV9DT0xPUl9GIEdyYXBo
aWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25z
dAorRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxB
bHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihy
LCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEoKSk7CiB9CiAKLUlEMkQxQnJ1
c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRTdHJva2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNo
KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9
CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAor
SUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkRmlsbEJydXNoKCkgY29u
c3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2guZ2V0
KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6cGF0dGVyblN0cm9rZUJydXNo
KCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ry
b2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0
ZXJuU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6
cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29u
dGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2guZ2V0KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpiZWdpbkRyYXcoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3
KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5iZWdpbkRyYXcoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZERyYXco
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCiB7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+ZW5kRHJhdygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmx1c2goKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6Zmx1c2goKQogewogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgp
KQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvIHRpbGVJ
bWFnZSA9IGltYWdlOwogICAgIERpcmVjdDJEOjpkcmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0
KCksIFdURk1vdmUodGlsZUltYWdlKSwgSW50U2l6ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJh
dG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0
YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJh
d1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKIH0KQEAgLTQ5
MCw1MiArNDY5LDI5IEBAIEQyRDFfU1RST0tFX1NUWUxFX1BST1BFUlRJRVMgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlOjpzdHJva2VTdHlsZVByb3BlcnRpCiAgICAgcmV0dXJuIEQyRDE6
OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxh
dGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3Bs
YXRmb3JtQ29udGV4dC5tX2xpbmVKb2luLCBtX3BsYXRmb3JtQ29udGV4dC5tX21pdGVyTGltaXQs
IEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7CiB9CiAKLUlEMkQxU3Ryb2tlU3R5bGUqIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VTdHlsZSgpIGNvbnN0CitJRDJEMVN0cm9rZVN0
eWxlKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5bGUoKSBjb25zdAogewogICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4
dCgpLT5zdHJva2VTdHlsZSgpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJv
cmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwg
cG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVj
dDJEOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxp
cHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5
U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBu
ZWVkZWQgb24gV2luZG93cwogCkBAIC01NDMsMTEgKzQ5OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRl
cm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBU
aGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCkBAIC01NTUsMTc5ICs1MDgsMTA0
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0
dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jh
c2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5k
cmF3UGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
LSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4
dCgpOwogICAgIERpcmVjdDJEOjpkcmF3UGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ry
b2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAg
RGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0
YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOwor
ICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0
MkQ6OnN0cm9rZVBhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0
ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4
dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdChjb250ZXh0LCByZWN0LCBEaXJlY3QyRDo6Rmls
bFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250
ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgYXV0byBicnVzaCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1f
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAgICBpZiAoIWJydXNoKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBicnVzaC5nZXQoKSk7Cit9CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQoreworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7CisKKyAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3Bs
YXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgRGlyZWN0
MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9y
bWFsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7
CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsUm91
bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xp
cChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpj
bGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRo
LCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBC
b3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5k
cygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNs
aXBCb3VuZHMoKTsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0
dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwog
fQogCkBAIC03MzUsMTggKzYxMywxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCisgICAgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIHNhdmUoKTsKIAogICAgIG1f
c3RhdGUuYWxwaGEgPSBvcGFjaXR5OwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0
KCksIG9wYWNpdHkpOwogfQogCkBAIC03NTQsMTE5ICs2MjcsMTEzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKICAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29u
dGV4dCgpKTsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKLQogICAgIG1fc3RhdGUuYWxwaGEgPSBt
X2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpOwogCiAgICAgcmVzdG9yZSgpOwogfQogCi1ib29s
IEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQorYm9vbCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQogewogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5n
ZUZsYWdzIGZsYWdzKQogewotICAgICh2b2lkKW9mZnNldDsKLSAgICAodm9pZClibHVyOwotICAg
ICh2b2lkKWNvbG9yOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19CisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5
bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAg
ICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBN
ZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBz
aW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAg
ICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4o
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7CisgICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZz
ZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93
T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9
OworICAgICAgICB9CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
c3R5bGUpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3Rh
dGUuYmxlbmRNb2RlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXND
aGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxh
dGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAg
ICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOworICAg
IGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFu
Z2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLnN0cm9rZUNvbG9yID09IGNvbG9yKTsKKyAg
ICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENv
bG9yKHN0cm9rZUNvbG9yKCkpOyAgICAKKyAgICB9CisgICAgCisgICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFT
U0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOwogICAg
IH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OnNl
dE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdlKSkgeworICAg
ICAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElB
U19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOworICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNN
b2RlKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSkpIHsKKyAgICAg
ICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOworICAgICAgICBtX2RhdGEtPnNldEFs
cGhhKGFscGhhKTsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIERpcmVjdDJEOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKKyAgICBp
ZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHlDaGFuZ2UpKSB7CisgICAgICAgIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxp
dHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworCisgICAgICAg
IHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZh
dWx0OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJF
U1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgICAgIHF1
YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICAg
ICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0NVQklDOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAg
ICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklD
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IFNldElu
dGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBxdWFsaXR5KTsKKyAgICB9CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4
dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ry
b2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Cit9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVX
aWR0aCkKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb250
ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlz
KSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1D
b250ZXh0KCksIGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9h
dCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChk
YXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRh
c2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAtODc1LDM0MSArNzQyLDE3
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChk
YXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwogICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
ZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5z
ZXRMaW5lSm9pbihqb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNldExpbmVKb2luKCpwbGF0Zm9y
bUNvbnRleHQoKSwgam9pbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGNsaXBQYXRo
KHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzY2FsZSgqcGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwog
ICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRl
bnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBh
bmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKGFuZ2xlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIGFuZ2xlKTsKICAgICAvLyBGSVhNRTog
bV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICAvLyBG
SVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0g
ZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y29u
Y2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICAvLyBGSVhNRTogbV9k
YXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNl
dENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTSgqcGxhdGZv
cm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9E
ZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi1BZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVT
Y2FsZSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Z2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2Fs
ZSk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBEaXJl
Y3QyRDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1
cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQo
KSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJv
a2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBEYXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRo
cy5hcHBlbmQoMCk7Ci0gICAgd2lkdGhzLmFwcGVuZChyZWN0LndpZHRoKCkpOwotICAgIGRyYXdM
aW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVV
bmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBk
b3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoKnBs
YXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0VVJMRm9yUmVjdChjb25z
dCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5v
dCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBjb250ZXh0cy4iKTsKLSAgICAgICAgcmV0
dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0cy4KLSAgICB9Ci0KICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IG1vZGUpCi17Ci0gICAgQVNTRVJU
KCFwYWludGluZ0Rpc2FibGVkKCkpOwotCi0gICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVh
bGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0KLSAgICBz
d2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0Ogot
ICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJP
UjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJ
bnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05F
QVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJ
TkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVk
aXVtOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAg
ICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250
ZXh0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUUK
LSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVy
YXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1F
Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29u
c3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
Y29uc3QKIHsKLSAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4
dCgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCiB7Ci0gICAgKHZvaWQpbW9kZTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3Ip
OwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0
KCktPm1fc29saWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOwor
ICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQuCiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzID09IHRoaWNrbmVz
cyk7Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLX0KKyAgICBp
ZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikgeworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlsbCBlbGxpcHNlcyB3aXRoIHBhdHRl
cm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVs
bGlwc2UpOworICAgICAgICByZXR1cm47CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIEFTU0VSVCht
X3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0
aENvbG9yKGZpbGxDb2xvcigpKTsKKyAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3Jt
Q29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZpbGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHls
ZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFi
bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlm
IChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGgg
cGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KKyAgICAgICAgc3Ryb2tlRWxsaXBzZUFz
UGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIEFTU0VSVCghbV9p
bXBsKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCpwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKKyAg
ICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0
YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNr
bmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290
aEZvbnRzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGluZyk7CisgICAgaWYgKCFmb250
LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFt
X2ltcGwpOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8dW5zaWdu
ZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOworICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRh
bEFkdmFuY2VzKG51bUdseXBocyk7CisgICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGds
eXBoT2Zmc2V0cyhudW1HbHlwaHMpOwogCi0gICAgYXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVu
YWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5U
SUFMSUFTX01PREVfQUxJQVNFRDsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0
KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdNb2RlKTsKLX0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgaWYgKGkgKyBm
cm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQoKSkKKyAgICAgICAgICAgIGJyZWFrOwog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBmcm9tKTsKKyAgICAgICAgaWYg
KCFhZHZhbmNlKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICBBU1NFUlQobV9zdGF0ZS5h
bHBoYSA9PSBhbHBoYSk7Ci0gICAgbV9kYXRhLT5zZXRBbHBoYShhbHBoYSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGdseXBoc1tp
XSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOworICAgICAgICBob3Jpem9udGFsQWR2
YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2
YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5h
c2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOworICAgIH0KIAotICAgIEFTU0VSVCgh
bV9pbXBsKTsKKyAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGlj
Qm9sZE9mZnNldCgpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCks
IGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBEaXJlY3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3Jt
Q29udGV4dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwg
RGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLAorICAgICAg
ICBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgZm9udCwgc3ludGhldGljQm9s
ZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNl
dCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3Ms
IHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBo
aWNzQ29udGV4dCYpPiYmKQogewotICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQu
CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0
YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFk
aWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7
CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBz
ZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRl
LnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CisgICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoYXV0
byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnRleHQpKQor
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKKyNpZiBFTkFCTEUo
VklERU8pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBsKTsKLQotICAgIGlm
IChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybikgewotICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGgg
cGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAgc3Ryb2tlRWxsaXBzZUFz
UGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xv
ciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50
ZWQuCiB9CisjZW5kaWYKKwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjcwYzNjMTczYzkxYTc2YmViZDJl
OGU2ZGYyMTU1ZjFhMTU0YWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIgotCi0jaWYg
VVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVk
ZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlw
aEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRD4oY29udGV4dCwgcGxhdGZvcm1Db250
ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0
SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtyZW5kZXJUYXJnZXRd
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEPihjb250ZXh0LCByZW5kZXJU
YXJnZXQpOwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250
ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0
KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5j
Q29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLSAgICA6IEdyYXBoaWNzQ29udGV4
dEltcGwoY29udGV4dCkKLSAgICAsIG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRD4ocmVuZGVyVGFyZ2V0KSkKLSAgICAsIG1fcGxhdGZvcm1D
b250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsK
LSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0
ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6fkdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRCgpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZShudWxscHRyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6Omhh
c1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VU
aGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0g
ICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250
ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAg
ICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUg
b3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0g
ICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAg
ICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgo
KSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkK
LSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5n
ZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9y
bUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBEaXJl
Y3QyRDo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4dCwgbGluZUNhcCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkm
IGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2go
bV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsK
LSAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChtX3BsYXRmb3Jt
Q29udGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNz
Q29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9y
bUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0g
ICAgYXV0byBicnVzaCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJl
bmRlclRhcmdldCgpKTsKLSAgICBpZiAoIWJydXNoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBE
aXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJy
dXNoLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3Bl
cmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAg
RGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQs
IGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotICAgIERpcmVjdDJEOjpmaWxsUmVjdCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRN
b2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQot
ICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVP
cGVyYXRvcjsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3Bs
YXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRNb2RlKTsKLQotICAgIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7Ci0gICAgaWYgKHJlY3QuaXNSb3Vu
ZGVkKCkpCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgZWxzZQotICAgICAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgpLCBjb2xvciwgc2hhZG93
U3RhdGUpOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9w
bGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgRGlyZWN0MkQ6OkZpbGxTb3VyY2UgZmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpOwotICAgIGZpbGxTb3VyY2UuYnJ1c2ggPSBt
X3BsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7Ci0KLSAgICBEaXJlY3QyRDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgZmlsbFNvdXJjZSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsUGF0aChtX3BsYXRmb3JtQ29udGV4
dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwg
RGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
UGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uo
c3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBE
aXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBw
YXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdH
bHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewotICAgIFVOVVNFRF9QQVJBTShm
b250U21vb3RoaW5nKTsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9y
PHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhv
cml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZG
U0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZm
ZXIuYWR2YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBh
ZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOwotICAgICAgICBpZiAoIWFk
dmFuY2UpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlw
aEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9tKTsKLSAgICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ld
ID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZz
ZXQgPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJP
ZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGlj
Qm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhz
KG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3ND
b250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQo
KSksCi0gICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBz
eW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZz
ZXRzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShtX3BsYXRmb3JtQ29udGV4
dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UGF0dGVybigoTmF0
aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLnBsYXRmb3JtSW1hZ2UoKSkKLSAgICAgICAgRGlyZWN0
MkQ6OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBXVEZNb3ZlKHN1cmZhY2UpLCBJbnRT
aXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdSZWN0KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3Rh
dGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQs
IHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRl
eHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcs
IGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKLXsKLSAgICBEaXJl
Y3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwg
c3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRo
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNhdmUoKQotewotICAg
IERpcmVjdDJEOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnJlc3RvcmUoKQotewotICAgIERpcmVjdDJEOjpyZXN0b3JlKG1f
cGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUo
bV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIERpcmVjdDJEOjpy
b3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsK
LSAgICBEaXJlY3QyRDo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQotewotICAgIERpcmVjdDJEOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0
YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewot
ICAgIERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBv
cGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKLXsKLSAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIobV9w
bGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXAobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBP
dXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIERpcmVjdDJEOjpj
bGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwg
Y2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xp
cEJvdW5kcygpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyht
X3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXIuY29weUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29udGV4dCgpOwotICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCi0g
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0
dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBG
dW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQotewotICAgIC8vIEZJWE1FOiBOb3Qg
aW1wbGVtZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxv
YXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotI2VuZGlmCi0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggY2ViMDQ1MDUzMTcwM2ZiOTBlZWE3YjQyZjI0NzRmNTkzNmJkM2JhMi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgewotcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxG
YWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFj
dG9yeSBjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiwgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmKTsKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0Jiwg
SUQyRDFSZW5kZXJUYXJnZXQqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQoKTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGlu
ZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBv
dmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ds
eXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQs
IGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLSAgICBi
b29sIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwotICAgIGJvb2wgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdM
aW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzYXZlKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0
ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9y
bSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2
b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIElu
dFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlv
bkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRl
OwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wg
Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3Zl
cnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5k
ZXggMWQ4MDQyMGNmN2VjNmNkNzc1YTYyYmFlYTIyZjk5MDYwN2ViNGNiZC4uNzdkYWZlMzIwYmIw
NzMwODkwMTAwZDdjNGFmMTA0MTYzNjllNzIzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKQEAg
LTU2LDEyICs1NiwxMiBAQCBzdGF0aWMgdm9pZCBmaWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBi
aXRtYXApCiAjaWYgUExBVEZPUk0oV0lOKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3Vs
ZEluY2x1ZGVDaGlsZFdpbmRvd3MoYm9vbCBpbmNsdWRlKQogewotICAgIG1fZGF0YS0+bV9zaG91
bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVkZTsKKyAgICBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVkZTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoKSBjb25zdAogewot
ICAgIHJldHVybiBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93czsKKyAgICByZXR1
cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93
czsKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKEhE
QyBoZGMsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC05NSwxNSArOTUsMTMgQEAgR3JhcGhpY3ND
b250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2luZG93c0JpdG1hcCgpCiAKIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRl
V2luZG93c0JpdG1hcChjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIHJldHVybiBtYWtlVW5p
cXVlPFdpbmRvd3NCaXRtYXA+KG1fZGF0YS0+bV9oZGMsIHNpemUpOworICAgIHJldHVybiBtYWtl
VW5pcXVlPFdpbmRvd3NCaXRtYXA+KGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYywg
c2l6ZSk7CiB9CiAjZW5kaWYKIAogSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRl
eHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAg
ICBIREMgaGRjID0gbnVsbHB0cjsKLSAgICBpZiAoIW1faW1wbCkKLSAgICAgICAgaGRjID0gbV9k
YXRhLT5tX2hkYzsKKyAgICBIREMgaGRjID0gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1f
aGRjOwogICAgIC8vIEZJWE1FOiBTaG91bGQgYSBiaXRtYXAgYmUgY3JlYXRlZCBhbHNvIHdoZW4g
YSBzaGFkb3cgaXMgc2V0PwogICAgIGlmICghaGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigp
KSB7CiAgICAgICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKQEAgLTEzNSwxNyArMTMzLDE3IEBA
IEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRz
dFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhCiAgICAgICAgIHJldHVybiBiaXRtYXBEQy5sZWFrKCk7
CiAgICAgfQogCi0gICAgbV9kYXRhLT5mbHVzaCgpOwotICAgIG1fZGF0YS0+c2F2ZSgpOwotICAg
IHJldHVybiBtX2RhdGEtPm1faGRjOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5m
bHVzaCgpOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5zYXZlKCk7CisgICAgcmV0
dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogSERDIEdyYXBoaWNz
Q29udGV4dDo6aGRjKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGF0YSkKKyAgICBpZiAoIWRlcHJl
Y2F0ZWRQcml2YXRlQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBtX2RhdGEtPm1faGRjOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KS0+bV9oZGM7CiB9CiAKICNpZiBQTEFURk9STShXSU4pICYmICFVU0UoRElSRUNUMkQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0V2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3ND
b250ZXh0V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU5OWFmOTNmNDE5YjE5NGM3NzZiOTFhMGEzYzc5YzBj
YmMwYzQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2RlZmluZSBHcmFwaGlj
c0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0Q0cKKworI2VsaWYgVVNFKERJUkVDVDJEKQorCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250
ZXh0V2luIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECisKKyNlbGlmIFVTRShDQUlSTykKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdp
biBHcmFwaGljc0NvbnRleHRDYWlybworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuY3BwCmluZGV4IGE4ZWUzNWM1Mjc3ODEyNzNmNDdmYjVkMmY0YmNkZjg4YzQ0ZTA4
YzQuLmFkOTU1NGMwNTBhZWUyZTEwZWMxNTM1OWViOGI0ODVkMzUwY2RhNGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtNzgsNyArNzgsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpjcmVhdGUoYwogICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHREaXJlY3QyRD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIGlmICgh
Y29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAppbmRleCBmOGExMGQ1YzQz
NmU3MDYwODk4NzA3YmE4YjY1NDY0MWNlMmJkZjU0Li41MzM4ZmZjYzdiNTY1ZjQ4N2Q5ZTdjZmI4
ZjI2NGY3ZWExMjk2OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCkBAIC03Myw3ICs3Myw3IEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCiAg
ICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShibXBJbmZv
LmJtQml0cywgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVpZ2h0LAogICAgICAgICA4LCBi
bXBJbmZvLmJtV2lkdGhCeXRlcywgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSk7CiAgIAotICAg
IEdyYXBoaWNzQ29udGV4dCBnYyhjZ0NvbnRleHQuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4
dENHIGdjKGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0
bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAppbmRleCAyY2VjOTlk
YzcyOWZlNjVlMDg1NGVlZTcyZGZjNGVkN2FmMDk1MjNjLi5jOWViMDBjNDgyNDFmNWJjYmY1YzVl
MmQ4M2I5NDdjYjdjOTQ5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRl
IDxjYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CkBAIC03NSw3ICs3NSw3IEBAIGJv
b2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNp
emUqIHNpemUpCiAgICAgY2Fpcm9fdCogdGFyZ2V0UmVmID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsK
ICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
IGdjKEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSh0YXJnZXRSZWYpKTsK
KyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyh0YXJnZXRSZWYpOwogCiAgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CiAgICAgaWYgKHNpemUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3Bw
CmluZGV4IGQ5NjIwMzAwYWJjZWJhNDk0Y2E2NjE1MWQwMDFlNTJmMWM3ODk0NGIuLjkxMjlhMTdi
Nzc4YTI0ODBjZGYzYzBlYmZhMmQ2ZTcyNzFhNjA3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCkBAIC0yMzIsNyAr
MjMyLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJl
bmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0
Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0
KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRl
eHQpOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAgLTM0Miw3ICszNDIsNyBAQCBGbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkp
OwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQs
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7
CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250
ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikKICAgICAgICAgc3Ryb2tlU3R5
bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
RHJhZ0ltYWdlSU9TLm1tCmluZGV4IDczNTkzM2YxNzIwODViOWU2NjkzYWQ0NGIyYWYxNjBiMzQw
YzRmOTkuLjM2MTYwMmU1N2IyNGZiMTZjYmUyYTdhOTlmNmU1YzgwYTMzOWZhYjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtOTQsNyArOTQsNyBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1h
Z2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbgogCiAgICAgUmV0YWluUHRyPFVJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVyPiByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBVSUltYWdlICpp
bWFnZUNvcHkgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1h
Z2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VTaXplLmhlaWdodCk7CiAgICAgICAgIGNvbnRleHQu
c2NhbGUoeyBhZGp1c3RlZEltYWdlU2NhbGUsIC1hZGp1c3RlZEltYWdlU2NhbGUgfSk7CiAgICAg
ICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQb2ludCgpLCB7IG9yaWVudGF0aW9u
IH0pOwpAQCAtMTM2LDcgKzEzNiw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JM
aW5rKEVsZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5nCiAKICAgICBh
dXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVy
SW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemVdKTsKICAgICBhdXRvIGltYWdl
ID0gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNv
bnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFu
c2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNj
YWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSg0KSksIENvbG9yOjp3
aGl0ZSk7CkBAIC0yMDQsNyArMjA0LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIFRleHRJbmRpY2F0b3JEYXRhJiBpbmRpY2EKIAogICAg
IGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVy
ZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgcmV0dXJu
IFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250
ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQo
cmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNv
bnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUg
Y29udGV4dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGFuZCBzdWdnZXN0cyB0
aGF0IHNvbWV3aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAgICAgIC8vIGRyYWcgaW5pdGlh
dGlvbiBmbG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAg
ICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5oZWlnaHQoKSk7CkBAIC0yMzgs
NyArMjM4LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib28KICAgICBhdXRvJiBpbWFnZSA9ICp0
ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKTsKICAgICBhdXRvIHJlbmRlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXpl
OmltYWdlLnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdldCgp
IGltYWdlV2l0aEFjdGlvbnM6WyZpbWFnZV0oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0
ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVu
ZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdl
KGltYWdlLCBGbG9hdFBvaW50KCkpOwogICAgIH1dOwogCkBAIC0yNTIsNyArMjUyLDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29u
c3QgRmxvYXRSZWN0JiBlbGVtZW4KIAogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjph
bGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VS
ZWN0LnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmltYWdlID0gW3JlbmRlciBpbWFnZVdpdGhBY3Rp
b25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyByZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyByZW5kZXJlckNvbnRl
eHQuQ0dDb250ZXh0IH07CiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIENHUmVjdEdldEhl
aWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAg
ICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChzd2F0Y2gsIGNvbG9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJl
YW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKaW5kZXgg
MDlmYWVlZWU5ZWFjYjUwMzJmMWE3OWQ3M2JhMDE4YTliNjU1YmQyYi4uNWVjMzhlNjQxYmQ2ZWQw
M2FkMDUyNTYxZDA0YzljZGFmZGZiNDEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKICNpbmNsdWRlICJDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb01vZHVsZS5oIgorI2luY2x1
ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKaW5kZXggZDAyMmU3
ZTE5MWRhYzgxNjM2ZDUyOTUxZDQwZDUzYjg4NzNmNTUwOS4uODYyMzk5NWY3MWEyOGVlOWUzMzAz
ODk2MDEyZjNkM2JlYjFiNjM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0RyYWdJbWFnZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdJbWFnZVdpbi5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlICJIV25kREMu
aCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlN0cmluZ1RydW5jYXRvci5oIgpAQCAt
MTg2LDcgKzE4NywxMSBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVt
ZW50JiwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgaW5MYWJlbCwgVAogICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgCiAgICAgOjpTZWxlY3RPYmplY3Qod29ya2luZ0RDLmdldCgpLCBpbWFnZS5n
ZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY29udGV4dFJlZik7CisjaWYgVVNF
KENBSVJPKQorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGNvbnRleHQoKmNvbnRleHRSZWYpOwor
I2Vsc2UKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChjb250ZXh0UmVmKTsKKyNlbmRp
ZgogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93ZXZlciB3
ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdpbiwgc28g
d2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBTUkdCQTx1aW50
OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2FiNmIxM2FmODM0
NzJlNy4uMjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4u
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRl
ICJIb3N0V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1lbnVXaW46OnBh
aW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAgIDo6U2VsZWN0
T2JqZWN0KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4
dChtX0RDLmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VSZWN0IHRyYW5z
bGF0ZWQgaW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxpc3QgKHdoaWNo
IGlzIGxpc3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIEludFJlY3QgbGlz
dFJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nv
bnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2YzA5YWYwZDJk
NjlmNDYzZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1ZjQzYjc2N2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVj
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hl
Y2tlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4
LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250
ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3LnNldFBhaW50
QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsKICAgICBm
cmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3LnBhaW50KGNo
ZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3QoKSk7CiAK
ICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJlQ29udGVudHMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2MwYi4uMTQzYTM1
OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAsMTAgKzY5MCw3
IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJveFNoYWRv
dy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ctPngoKSwg
Ym94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFk
aXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3Io
KSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zm
c2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRl
cihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVy
KGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogfQog
CiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3NlSW50ZXJw
b2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1hZ2UsIGNv
bnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQzOSwxMCArMjQz
Niw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBh
aW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBvaW50IHNu
YXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dS
ZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4ZWwoc2hh
ZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAgICBGbG9h
dFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBwaXhlbFNu
YXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgaWYgKHNoYWRv
dy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2Fj
eVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsK
LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFw
cGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6
OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAgICAgICBpZiAo
aGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFx
dWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBz
YXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMK
ICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgICAg
IHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYgKHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNo
YWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hh
ZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93LT5pc1dl
YmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVz
TW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZpbGxDb2xv
cik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2N2NjNjZlZTVh
MjVjNzRkZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdjNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2suaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRlICJOdWxsR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlcmZvcm1hbmNl
TG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBAIC0xNzg5LDcg
KzE3OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24oKQog
ICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0oR3JhcGhp
Y3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgbnVsbENv
bnRleHQobnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENvbnRleHQo
TnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKICAg
ICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxFX1JFR0lP
TikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFibGVSZWdp
b24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJp
dG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1h
cENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYxNTU4ZGU2MWZm
Li4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxp
dGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewogICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CiAgICAgUmVm
UHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoaW1hZ2Uu
Z2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgpKSk7Cisg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1hcENvbnRleHQu
Z2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBD
Ry5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKaW5k
ZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQwNmY0NmMyZjM0
NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwgMCwg
bV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBDb250ZXh0Lmdl
dCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGJp
dG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBh
aW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRl
c3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAwOGY2ZmI1MmM4
MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQyNDhmOTdjMDA2
OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hh
cmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9T
aGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRPcGVyYXRp
b25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVt
ZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAj
aW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQog
ICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAgICByZXR1cm4g
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRleHQuZ2V0KCkp
OwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWly
by5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5j
cHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRmNi4uNGY3OGI1
ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtMzIsNyArMzIs
NyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQmFja2lu
Z1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRp
ZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5o
PgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFja2luZ1N0b3Jl
OjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3QgVXBkYXRl
SW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBvaW50IHVwZGF0
ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2NhdGlvbigpOwog
ICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUo
bV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWlyb0NvbnRleHQu
Z2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQoY2Fpcm9D
b250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJhd3NCYWNrZ3Jv
dW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0cyBhcyBhIGJh
Y2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwgYml0bWFwIG11
c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3ZlcndyaXRlIHRo
ZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJp
bnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1Y2YwZDRhNjY2
OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMwLDE1ICszMCwx
NiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0jaW1wb3J0
ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0ICJTaGFy
ZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8UXVhcnR6
L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9jYWxEZWZh
dWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAorI2ltcG9y
dCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbFRv
cFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7CiBOU1N0cmlu
ZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkgPSBAIldlYktp
dE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0gKHZvaWQpX2Ry
YXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpTaGFyZWFibGVC
aXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0gICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4
dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAK
ICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0bWFwLT5ib3Vu
ZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0
b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9y
ZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0YTMzNGIxMjQx
NWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJhY2tlbmRE
aXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAj
aW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmluZGV4IDNjYWNi
OWFlYzY0Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4NjI5ZjYxM2Qz
MWI4NDczOTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFyVGhlbWUu
aD4KQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNlbGVjdE9iamVj
dChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQobV9E
Qy5nZXQoKSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tCdWZmZXI7
IAogICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVpZG9mKElE
M0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZlcikpOyAK
QEAgLTg2Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWludChjb25z
dCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAgcGxhdGZvcm1D
b250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29u
dGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRUeXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRyYW5zbGF0ZWRE
YW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1Yjk4Yzg5ZGY0
ODViNzA2ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNkZjZmMGQwNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUERG
QW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250ZXh0TWVudS5o
IgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVyQ29udHJvbGxl
clNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9ydCAiUERGUGx1
Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxC
b2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAogI2ltcG9ydCA8
d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JFTUVOVEFMX1BE
Rl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5cGUpaW5pdFdp
dGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAtMTk0NCw3ICsx
OTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250ZXh0KENB
TGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1B
cHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5jZSgpKTsKICNl
bmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBn
cmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRl
eCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2JkYjk1NzA0ZGM0
NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00Miw2ICs0Miw3
IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9j
dXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVy
dGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJldGFpblB0cjxD
RkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVjdCwgSW50U2l6
ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBkZkNvbnRleHQu
Z2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUo
MCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0
ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKaW5kZXggODcx
NmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0MjMyMWI1M2Ux
ZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3Jh
cGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5h
dGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApAQCAtNDMsNyAr
NDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVTRShESVJFQ1Qy
RCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1
ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKaW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQxYzVjMy4uMDA5
ZmU4OTA5NjU3MGZjNzM1NjAyNDdhNDIwZjU0NDZhODdkOTcwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEgQEAKICNp
bmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgogCisjaWYg
VVNFKENHKQorLy8gQnV0IHJlYWxseSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0aGUgQ0ctc3Bl
Y2lmaWMgUERGIHBhaW50aW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUzNzUs
NyArNTM4MCw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZyYW1lSWRlbnRp
ZmllciBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50CiAgICAgICAgICAgICAgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICAgICAgICAgIENHUERGQ29udGV4
dEJlZ2luUGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAgICAgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dENHIGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAgICAgICAgICBj
dHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0
ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsKICAgICAgICAg
ICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9wcmludENvbnRl
eHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKaW5k
ZXggZGUxZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5YjFlODBhM2Q4
NGQxZDBkMzAwOTZhYzQ0NjUwYWM5OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3Bw
CkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExvYWRlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVy
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9J
bnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYsNyBAQCB2b2lk
IFdlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVyKQogICAgIHBy
ZXBhcmVDb250ZXh0VG9EcmF3KCk7CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0gZ3RrX3BhZ2Vf
c2V0dXBfZ2V0X3BhZ2Vfd2lkdGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklUX0lOQ0gpICog
bV94RFBJOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fY2Fpcm9Db250
ZXh0LmdldCgpKSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3ND
b250ZXh0KG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQ
YWdlKGdyYXBoaWNzQ29udGV4dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9zY2FsZSk7CiAK
ICAgICBjYWlyb19yZXN0b3JlKG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4IGQ1NDFjNGMw
NGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBiN2Q5MTAyMGM3
ZGEyODhlZGUyNDVjMzg1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvR2x5cGhQYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9K
U0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBAQCAtICh2b2lk
KXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdpZHRoOihmbG9h
dClwYWdlV2lkdGhJblBpeAogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAgUHJpbnRDb250
ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3JhcGhpY3NDb250
ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBpeGVscykpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3Ry
aW5nRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmlu
Z0V4dHJhcy5tbQppbmRleCAyYmEwMDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2NTA1YmE3MWJh
Li43ODMyNTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KQEAg
LTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvTG9hZGVyTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1bi5oPgogI2lt
cG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4LDcgQEAgLSAo
dm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9udCAqKWZvbnQg
dGV4dENvbG9yOihOU0NvbG9yICoKIAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCAqbnNDb250
ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAgICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7IGNnQ29udGV4dCB9OworICAgICAgICBHcmFwaGlj
c0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAgICAgICAvLyBX
ZWJDb3JlIHJlcXVpcmVzIGEgZmxpcHBlZCBncmFwaGljcyBjb250ZXh0LgogICAgICAgICBib29s
IGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0K
aW5kZXggZDM5NzNlMjk0NDU5ZWNmMWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4uOTUwYWU4ZTAw
ZDMwYTQ1MjA5ZjlhZGRhM2MyYjMzZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5t
bQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZpZXcuaCIKICNp
bXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0Nv
bnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fzc2VydGlvbnMu
aD4KIApAQCAtOTgsNyArOTgsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3QpcmVjdAogCiAg
ICAgICAgIEFTU0VSVChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBw
ZWRdKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRd
KTsKICAgICAgICAgW193ZWJOb2RlSGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xsZXJdLT5kcmF3
SGlnaGxpZ2h0KGNvbnRleHQpOwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdy
YXBoaWNzU3RhdGVdOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCmluZGV4IGYzNWQ3YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1N2U0MThhNzEu
Ljk1YmRhMzkwY2E2OWJhNmI5NjIwZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUuaD4KLSNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvSGlzdG9yeUl0
ZW0uaD4KQEAgLTYxMyw3ICs2MTMsNyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNSZWN0KXJlY3Qg
Y29udGVudHNPbmx5OihCT09MKWNvbnRlbnRzT25seQogI2Vsc2UKICAgICBDR0NvbnRleHRSZWYg
Y3R4ID0gV0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAgICBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQgY29udGV4dChjdHgpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHIGNvbnRleHQoY3R4KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV2Vi
Q29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5n
ZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwNTA2OThiMGJhZmRiZTAyODc1YjMzNzg4NzRm
OTRiZGY3YWQzZjhmLi44Nzk1Mjk2MGJhODk0ODBlMmFiOWUyZDEyYmQwYzIxY2Y3MzkyNDdmIDEw
MDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5j
b20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJ
OjpURVNUKToKKwogMjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAK
ICAgICAgICAgQ29udmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNs
YXNzIHdyYXBwaW5nIGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3Ig
Q0cgcG9ydHMsIGV0Yy4pCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCmluZGV4IDg3YTM2YWNmZTZhMTAw
Y2MzMjNlMjQ4OTdmY2UzODAzZjIzNGE3NzguLmE1OThkNTRhMjc1Mjk1OGM0MmU0ZTJiNzllNTMz
N2M1N2IxNzRiNDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdFJlcGxheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFkaWVudC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00OSw3ICs1MCw3IEBAIFRFU1Qo
RGlzcGxheUxpc3RUZXN0cywgUmVwbGF5V2l0aE1pc3NpbmdSZXNvdXJjZSkKIAogICAgIGF1dG8g
Y29sb3JTcGFjZSA9IERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogICAgIGF1dG8gY2dD
b250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdp
ZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLnBsYXRm
b3JtQ29sb3JTcGFjZSgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNz
Q29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gaW1hZ2VC
dWZmZXJJZGVudGlmaWVyID0gUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
OwogCkBAIC0xMTMsNyArMTE0LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBPdXRPZkxpbmVJ
dGVtRGVjb2RpbmdGYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dD
b250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdp
ZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgp
LCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIERpc3BsYXlMaXN0IG9yaWdpbmFsTGlzdDsK
ICAgICBXcml0aW5nQ2xpZW50IHdyaXRlcjsKQEAgLTE0NCw3ICsxNDUsNyBAQCBURVNUKERpc3Bs
YXlMaXN0VGVzdHMsIElubGluZUl0ZW1WYWxpZGF0aW9uRmFpbHVyZSkKIAogICAgIGF1dG8gY29s
b3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFj
ZVNSR0IpKTsKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKG51bGxwdHIsIGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRX
aWR0aCwgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBH
cmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRv
IHJ1blRlc3RXaXRoSW52YWxpZElkZW50aWZpZXIgPSBbJl0oRmx1c2hJZGVudGlmaWVyIGlkZW50
aWZpZXIpIHsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGlkZW50aWZpZXIuaXNWYWxpZCgpKTsK
</data>
<flag name="commit-queue"
          id="450871"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429635</attachid>
            <date>2021-05-25 00:40:55 -0700</date>
            <delta_ts>2021-05-25 02:28:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525004054.patch</filename>
            <type>text/plain</type>
            <size>385172</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjYwMjgxYTI3ZjExNmI3M2FmYjgzMWMxZDRiMDUyYjQ4
NTQ4OWZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNo
aWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8g
cmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBE
ZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgog
I2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSBy
ZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVt
RmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCog
ZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZh
Y3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBi
ZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3Qg
Q29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2
b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMg
dm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGlt
cGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0
cm95KCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBi
b29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
dm9pZCBwbGF0Zm9ybUluaXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhh
c0FscGhhID0gZmFsc2UpOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lk
IHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZp
bGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlh
bGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNo
YWRvdygpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0
UmVjdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZv
cm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0
IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3Ju
ZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBA
IHByaXZhdGU6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wg
aXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dEltcGw+IG1faW1wbDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisK
K3ByaXZhdGU6CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwog
Ci0gICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQg
bV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZCB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9Owog
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5
ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjJmZmI0NTQ1YWUyMzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRl
eHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9
IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIy
YjBhNjYyMDg1Li4xMzgwZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4
LDkgQEAgSW1hZ2VEcmF3UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVo
YXZpb3IgZGlmZmVyZW5jZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2lu
ZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0
LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAg
aWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0
UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYx
N2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZk
ZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwog
CkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAg
IHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2
YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRy
b2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGlj
c0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5n
UGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0
aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29s
IGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5k
aWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwg
T3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0K
KworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0g
V1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKwor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0p
IGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVy
biBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykK
KyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6
CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1
M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyAr
MTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVy
cyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAor
ICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNh
bnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2Mx
Li4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAg
IAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7
CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJl
Y29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
aW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERp
c3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4
YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRm
MzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShX
VEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250
ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4
dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3
YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJl
NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4
dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJv
bSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNt
YWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENv
dW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFj
a2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFp
bnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91
bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4
IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2Rj
ZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3du
ZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2Ug
aXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJv
dW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uYmE1OTRhZThjYzJh
ODAyYjY1NjA2MGZiMGUzYmJhMjIxODY5ODQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5o
IgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9P
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNTcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpw
bGF0Zm9ybUNvbnRleHQpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNz
Q29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3Jt
Q29udGV4dC0+Y3IoKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0
UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9w
bGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKGNh
aXJvX3QqIGNhaXJvQ29udGV4dCkKKyAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVu
aXF1ZTxQbGF0Zm9ybUNvbnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkKKyAgICAsIG1fcGxhdGZv
cm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VV
bmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkp
CiB7Ci0gICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5z
ZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRh
OwotICAgIH0KKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRl
KG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3Jt
Q29udGV4dC5jcigpKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRl
eHRDYWlybzo6fkdyYXBoaWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9y
bUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwor
Ym9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0
Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgp
OwotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3Bs
YXRmb3JtQ29udGV4dDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0
YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAg
Q2Fpcm86OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJl
c3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4
dCgpKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3Mp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBz
dGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZv
cm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RS
ZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
fSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpk
cmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3Jt
SW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ug
c2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRy
YXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9p
bnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMg
b25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIENhaXJvOjpmaWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxs
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5zdHJva2VQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6
U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENh
aXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUoKSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVu
dC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwor
ICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fp
cm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9w
bGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3Is
IGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3Is
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKICAgICBDYWlybzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRm
b3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250
ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNs
aXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYg
cGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZm
ZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZv
cm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3Ip
OwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAg
ICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5k
cmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwog
I2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBU
aGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VE
X1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAj
ZWxzZQotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1Jpbmco
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAg
ZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJh
eSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5n
LCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBs
YXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwog
fQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7
Ci0KICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUo
eCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0
IENvbG9yJikKLXsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZp
bGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3
ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJv
IGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAg
IC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tl
Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVz
c0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0
Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAg
Q2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ry
b2tlU3R5bGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWly
bzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRo
aWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSB7CisgICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgeworICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4
dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CisgICAgICAgICAg
ICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9w
cG9zaXRlIFkgYXhpcworICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hh
ZG93T2Zmc2V0OworICAgICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09m
ZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6
c2V0U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHJva2VTdHlsZSk7Ci19CisgICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5n
ZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9h
dFJlY3QmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0
YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0
Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBmbG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmICht
X3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhh
dCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dAotICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhU
TUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09m
ZnNldCA9IHsgb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
ICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5j
bGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tl
UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVD
YXAoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5l
RGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENh
aXJvOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAg
ICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRl
ckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3Jt
Q29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1
bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250
ZXh0KCksIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJh
ZGlhbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRm
b3JtQ29udGV4dCgpLCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNs
aXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRI
b2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdl
UHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisg
ICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShz
cGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRm
b3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUo
aW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
b3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFu
dGlhbGlhcyhib29sIGVuYWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFi
bGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0
Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNl
cywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290
aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRh
KCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsK
KyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7
CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0g
PSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCAr
PSBhZHZhbmNlc1tpXS53aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tp
XS5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6
OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2Nh
bGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgp
OworICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zm
c2V0KCk7CisKKyAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZv
bnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9y
bUNvbnRleHQsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShz
dGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRG
b250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAg
c3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRv
d09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMWFjYWUxYzY4OGY1N2IzZjAyNWZjYjgyYTViMDIwNmQ2MDAwNGU5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
Cit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1Ymxp
YzoKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAg
IEdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3QqKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICBHcmFwaGljc0NvbnRleHRDYWlybyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJ
WE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB+R3JhcGhpY3ND
b250ZXh0Q2Fpcm8oKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgZmlu
YWw7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZp
bmFsOworCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKworICAgIHZvaWQgc2V0
TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5h
bDsKKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCBmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5h
bDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAg
ICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9r
ZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQs
IGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lk
IHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmlu
YWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmlu
YWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsK
KworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgm
KSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7
CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAor
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250
ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0
IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
Q29udGV4dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OworICAgIFBsYXRmb3JtQ29udGV4
dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4MTdiZmQ0
ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJD
YWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVk
ZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3Rvcnkg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxDYWlybz4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0
KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1w
bEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvX3Qq
IGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW2NhaXJvQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIH0p
OwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWly
byhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3Bs
YXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsK
LSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0
ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5j
cigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRleHQpCi0g
ICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1D
b250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0g
ICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4
dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1f
cGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86On5H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdy
YXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVl
OwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tl
VGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQot
ICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBz
dGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAgIGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3JtcykgewotICAgICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4
dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAg
ICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9w
cG9zaXRlIFkgYXhpcwotICAgICAgICAgICAgYXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2Fz
dDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAg
ICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAg
ICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCks
IC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250
ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y2xlYXJTaGFkb3coKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAo
bV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hP
ZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExpbmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNo
ZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0
TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCi17Ci0gICAgQ2Fpcm86OnNldExpbmVKb2luKG1f
cGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fpcm86OnNl
dE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRleHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWly
bzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0
ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYg
KCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3Jt
Q29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBw
YXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRl
T3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3Bl
cmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwg
YmxlbmRNb2RlKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJs
ZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hhZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwot
ICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQotICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVsc2UK
LSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwg
Y29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5v
cm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKQotewotICAgIENhaXJvOjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7
IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRo
KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBD
YWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpGaWxsU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChw
YXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpzdHJva2VSZWN0KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUp
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9w
bGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsK
LSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFyUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZv
bnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKLXsKLSAgICBpZiAoIWZv
bnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhP
ZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhz
KG51bUdseXBocyk7Ci0gICAgewotICAgICAgICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAg
ICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAg
ICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgICAgIHlP
ZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBj
YWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRGb250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2Fs
ZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRp
Y0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICghZm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAg
ICAgICAgZm9udFNtb290aGluZyA9IEZvbnRTbW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6
ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKLSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhz
LCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAg
Zm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIGltYWdlLmRyYXcoZ3JhcGhpY3NDb250ZXh0KCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VT
aXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJB
TShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdl
LnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3Rh
dGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRv
d1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJh
d1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwg
SW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6
ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUu
ZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3Jt
Q29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJv
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHls
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9y
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwg
d2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNl
dCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3
aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSgp
Ci17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9yZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9w
bGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRm
b3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpy
b3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRm
b3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2Fs
ZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0g
ICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWlybzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29u
dGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewot
ICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0
Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lM
YXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcChtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9w
bGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAg
Q2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0K
LUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKLXsKLSAgICBy
ZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1
dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0
LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGlu
Z01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsK
LSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBs
YXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRl
ZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0Uo
Q0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThkYmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZjZjJiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisr
KyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5M
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgi
Ci0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBjYWlyb190OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0
SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHRDYWlybyYpOwotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxG
YWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9fdCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBsYXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIGNhaXJvX3QqKTsKLSAgICB2
aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKTsKLQotICAgIGJvb2wgaGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5l
RGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5l
Sm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2Rl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29u
c3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZm
ZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJv
b2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBv
dmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2Fs
ZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVu
Y3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgo
Y29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMo
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29u
c3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNl
JiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5B
QkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZy
YW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3du
ZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1D
b250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGQz
N2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYzMzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3NTJlNzk1
MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNv
bG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmlu
ZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUwNzYyNzVmNTIzZmE4MDcxZWEuLjliNWMwYWQwNzQ0
NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkNh
aXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxCdWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgpA
QCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBQYXJhbWV0ZXJzJgogCiAgICAgUmVmUHRyPGNh
aXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOwogICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2NvbnRleHQgPSBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVG
YWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBHcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJv
LmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJmMDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFmLi4yYTE5
ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1VuaXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNhaXJvVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNs
dWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ry
b2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBz
dHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVB
cHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihn
Yyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUwLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlu
cyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSht
X3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250
ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0Nv
bnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcxYjhlMWM5
MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZkYjFhZTA2NTc0YmRmODE1YzYxNjcwZTA2Y2I2Nzdh
MDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBzdGF0aWMg
dm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRD
R0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDR0NvbnRleHRTZXRT
dHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7Ci19Ci0K
IGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZiBj
b250ZXh0KQogewogICAgIHJldHVybiBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChDR0NvbnRleHRH
ZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJhbnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldEJhc2VD
VE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCitzdGF0
aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJw
b2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsKICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKICAgICBj
YXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OgpAQCAtODIsNiArNzcsMzQgQEAgc3RhdGljIElu
dGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9s
YXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4gSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ7
CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRpb25RdWFsaXR5IGNnSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1YWxpdHkp
IHsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICByZXR1
cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25l
OworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIGtD
R0ludGVycG9sYXRpb25Mb3c7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVt
OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhp
Z2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKworc3Rh
dGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxsID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01v
ZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tlID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01v
ZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwgJiYgc3Ryb2tlKQorICAgICAgICByZXR1cm4ga0NH
VGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZpbGwpCisgICAgICAgIHJldHVybiBrQ0dUZXh0Rmls
bDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9rZTsKK30KKwogc3RhdGljIENHQmxlbmRNb2RlIHNl
bGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xNTYsMzUg
KzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1vZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRl
T3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTQogICAgIHJldHVybiBrQ0dCbGVuZE1v
ZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNzQ29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhD
R0NvbnRleHRSZWYgY2dDb250ZXh0KQogewogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5j
IHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250
ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJlY2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9uIHRoZSBH
cmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBpdCBkb2Vzbid0IG1hdHRlcj8KKyAgICBzZXRGaWxs
Q29sb3IoZmlsbENvbG9yKCkpOworICAgIHNldFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwor
ICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7CisgICAgbV9zdGF0ZS5p
bWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29u
dGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q0c6
On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dDb250
ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNT
RVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0
LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rp
c2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rp
b24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZv
aWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTksOSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGlu
Z0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMg
ZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQg
dG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRl
eHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsy
MzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxh
dGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRv
ciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRN
b2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9u
cy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21w
b3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5k
TW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRv
IGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3Rl
ZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNTAsMTAg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3Jt
SW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQp
OwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBv
c2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRp
b24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9H
X1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGlu
dG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBz
dGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJ
bWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8
IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0
UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1p
bGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxi
YWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2NCw3IEBA
IHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRU
b0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVp
Z2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3ND
b250ZXh0Q0coY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJ
bWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQg
cGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQpAQCAtMzQ3LDE2ICszNzIsMTggQEAg
c3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxP
bk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZv
KSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJu
KGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2
ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9y
bUltYWdlKCk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29t
cG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3Bl
cmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVD
VE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQo
KSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0
NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9h
dCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0
KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAv
LyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRp
ZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQo
IXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4LDE5ICs0NzcsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tu
ZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwog
ICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2lu
dDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQy
LnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSAr
NTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNo
b3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRo
KHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgp
OwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdl
dFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTU2NSwxNiArNTYwLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ry
b2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBo
YSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFz
ZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2LDE1ICs2MDMsMTAgQEAgc3RhdGljIGlubGluZSBi
b29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYg
KHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpAQCAtNjU0LDE2ICs2MzYsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5m
aWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3Jh
ZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzk0LDE2ICs3NjYsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAog
ICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtODMzLDcgKzc5Nyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYg
KG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAotICAg
IGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJy
ZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3Qg
dXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0g
KHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNC
bHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAg
Q0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwog
ICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3Mu
CkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3Qp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxs
Q29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsK
IAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhh
c0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8g
RG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hh
ZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAm
JiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFk
b3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNo
YWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91
bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0g
ZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cg
PSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBj
YW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFt
X3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRv
dykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzUsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0
LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRo
Um91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJl
Y3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBhdGgg
cGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNl
dEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAvLyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpIGFz
c3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVjdCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9ubHkg
Y2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJvdW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBib29s
IGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hh
ZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBkcmF3
T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdP
d25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2Zm
IENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkxMywyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENs
aXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMg
bXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwg
ZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUg
Y2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhh
cyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEg
c2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNh
bm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdElu
ZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4
dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVkQ29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAhY3Rt
LmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBl
KHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9k
ZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0u
YygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENH
UmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4
dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKICAg
ICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0
QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRm
b3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0
KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQpAQCAtMTAyMywxNiArOTQyLDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0NvbnRl
eHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NjAsMTQg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
biBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENH
Q29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZs
b2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7CiAK
QEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3Jt
VHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRF
bmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTEwODgsMTEgKzk4Nyw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0
b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93
T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Q0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBAIC0xMTAwLDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lk
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFN
KHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQorICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENv
cnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEyMSwy
MSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5l
ZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRv
dyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1
cikgeworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXpl
WmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGUg
c2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBrbm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93IG91
cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9mZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAgIENH
RmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMg
PSBibHVyOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAK
LSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIWdy
YXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENHQWZm
aW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwog
CiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSAr
IHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTExNTYsNyArMTA1MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNh
biBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNs
YW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lv
blRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElm
TmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAg
ICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUg
Y29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRo
ZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUwICsx
MDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNldFNo
YWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVy
UmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0
Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0
LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4K
LSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3Io
Y29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dDb250
ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOwotfQorICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAg
ICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0NvbnRl
eHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkp
CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5kTW9k
ZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBDR0Nv
bnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2Rl
KHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRl
eHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKwor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3Ro
Rm9udHNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250
ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQor
ICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVy
cG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKworICAg
IGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkK
KyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5z
aGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRT
ZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250
ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFk
aWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChM
aW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXAp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNl
IEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCks
IGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIsMTYgKzExODIsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJh
eSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAt
MTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25z
dCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRTZXRM
aW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFz
aGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBqb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4g
am9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1p
dGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCks
IGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMzNSw5NCArMTIwOSw0MyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxS
dWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0Nv
bnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZp
Y2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90
YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5n
bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBs
YXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAgICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAg
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25jYXRD
VE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0o
dHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0Jl
SWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAg
bV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdy
YXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNv
bnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAgLy8g
VGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4g
V2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5j
ZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxldmVs
LiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRo
aXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1NSw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGlj
c0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAog
ICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAvLyBJ
dCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4g
VGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXgg
dG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhhdmUg
YQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxpa2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBjbG9j
ayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUgc2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk5LDEx
IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVk
T3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9v
bCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17
Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRo
cy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRp
b24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9r
ZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
ICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRS
ZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQo
RmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHBy
aW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTE1NTYsMTYgKzEzNTcsOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQo
KSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVj
b3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5
IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5j
cmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJsUmVmKQogICAgICAgICByZXR1cm47CkBAIC0xNTc5
LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3Qg
VVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4dFNl
dFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRyYW5z
Zm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0
aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQot
ICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZh
dWx0OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6
OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBv
bGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Ob25lOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxp
dHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0
aW9uTWVkaXVtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5
OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0
Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJl
IGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNM
YXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSArMTM4MiwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2Rh
dGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xheWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4
dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYmICht
X2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNMYXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlz
QWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBBU1NF
UlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2NlbGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5tX2Nv
bnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogICAgIGVsc2UKICAgICAgICAg
bV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0KIAot
Ym9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRG
bGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAotICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwotICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ryb2tl
KTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01v
ZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwotICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAgICAg
Q0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNldENHU3Ryb2tl
Q29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3Jt
Q29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25lc3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRl
eHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91
bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQot
ICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxl
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9u
dHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29u
dGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZv
cm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6
cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZvcm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRNb2Rl
KGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2Nv
bnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2Nh
bGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFj
dG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhp
RFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAg
Ly8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFp
biBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MTEsOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZs
b2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1D
b250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0
Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAg
IC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3Jz
LgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7
CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQyMyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCBl
bGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBv
cnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0
YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNl
KTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
U3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0U3Ry
b2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGljc0Nv
bnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4
dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3Qg
cmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwxNSArMTQ1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5h
bWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYg
cG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVk
UG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdl
dENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZDb250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNv
bnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBk
Yzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5MzYyMmNmZDFjMmVjNGYyODllIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVz
dG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dD
b250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhI
REMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2Vu
ZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1D
b250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0
IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmlu
YWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsK
KyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsK
KyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENv
bG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOworCisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOworCisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
ZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZv
aWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpv
aW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7
CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6
ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSBmaW5hbDsKKworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmlu
YWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpIGZpbmFsOworCisgICAgdm9pZCBjb25jYXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5h
bDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xv
ciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZs
b2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmlu
YWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91
YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERh
c2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VT
dHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBz
ZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAg
dm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNJ
bnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2Rh
dGEgeyBudWxscHRyIH07Cit9OworCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcAppbmRleCA1ZmZjZTEyZmVhMjE5ZjMxMDBhOGJlYjk2MjMzMDgwODc4Y2E3YmE2Li42ODY1
ZjBiZDQxYmI0ODQ2MGRiYTFmNGY2YmE1ODA3ODRjY2FlZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0
ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
YXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQo
KSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oY2dD
b250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIGRhdGEsIG51bUJ5dGVzLCBbXSAodm9pZCos
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewogICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0
PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJiNGMxMmYwZTgyM2EwODhkMjVmYzE1YWE4ODlhNDI3
Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTI0NCw3ICsyNDQs
NyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250
ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBw
bGllcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0
UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOwpAQCAtMzA1
LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgQ0dDb250ZXh0QWRkUGF0
aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVy
KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAg
ICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCA3
NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVkZmRhYjIzZGY4MTM0Li4wNWEzOTE2NTQwYmI3NmRh
M2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0Uo
Q0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC00Myw3ICs0Myw3IEBAIHN0
YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4
dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVj
dCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCisg
ICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNl
UGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3Jt
SW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBsYXRmb3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBsYXRmb3JtSW1hZ2UpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29j
b2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAwNjdmY2JhMTkzOWZhZTUxZWRjODc5MmQ0Yy4uZTFl
NWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQyMmZiNTgxY2Y3OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRD
YXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0Q29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQppbmRl
eCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4OTY4ODEzYTMwNTQzZjdkLi4zODhhZmNkNmY0NmFm
YzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5t
bQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3RhdGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4
dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgKICAgICBkcmF3
Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNOdWxsKCkpCisgICAgaWYgKHBh
dGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZv
cm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRoKCksIGNvbG9yKTsKIH0KIAogI2lmIFBMQVRG
T1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0Nv
bnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVmIGZvY3VzUmluZ1BhdGgsIGRvdWJsZSB0aW1lT2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250
ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwg
ZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZz
ZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQ
YXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgpOwogICAgIHJldHVybiBkcmF3Rm9jdXNSaW5nQXRU
aW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCksIGNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29s
b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBh
dGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmlt
YXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGlt
ZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCwgY29s
b3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJh
dywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBi
b29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1F
OiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5nLgotICAgICAgICByZXR1cm47
Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxlUGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0
Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiBy
ZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1Jl
Y3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lTwog
CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQ
YXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoYXV0byYgcmVj
dCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAs
IENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsKQEAgLTE5OSwxMSArMTc2LDgg
QEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JGb3JNYXJrZXJMaW5lU3R5bGUoRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9j
dW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJr
ZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2FudCB0byBmaW5kIHRoZSBudW1iZXIgb2YgZnVsbCBk
b3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBlcXVhdGlvbnM6CiAgICAgLy8gZG90RGlhbWV0ZXIg
PSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRlciAvIGRvdEdhcCA9IDEzLjI0NyAvIDkuNDU3CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KaW5kZXggNThjNTEyNGQ0YjZjNjEzNjRlOGQzNjk2ZjM0OTVmZGIyNjQ1OTdhMC4uZTEzOGMz
MjAxZGRlNjQ1MDA1Yjg2ZDBhOWY2MWE4ZjQwZjc0Njg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzcxLDcgKzM3
MSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9TdXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQo
KQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4dCkKICAgICAgICAgcmV0dXJuICptX2dyYXBoaWNz
Q29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q0c+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0SXNBY2NlbGVyYXRlZENvbnRleHQodHJ1ZSk7CiAK
ICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAppbmRleCAyMGRhZWY0YmI0MWY1MDY0ZjNj
MWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li5kNzdmNzQxNmRkNTY1YzNkM2Y5YjQ1NTg4NjMwOGI2YTM5
YjVlZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhz
UmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBVU0UoQ09SRV9URVhUKQogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAgLTU4LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAg
dm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29u
c3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUpOwogCi0jaWYgVVNFKENPUkVfVEVY
VCkKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQogICAgIHZvaWQgcmVjb3Jk
QmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKICAg
ICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsK
ICAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVS
ZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3JtKiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1Bv
aW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291bnQpOwpAQCAtNjgsNyArNjksOSBAQCBwdWJsaWM6
CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBoc0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZhdGU6
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVTRShD
T1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7CisjZW5kaWYKIAogICAgIHZvaWQgcG9wdWxhdGVJ
bnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwb3B1
bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOwpAQCAtODUs
MTMgKzg4LDE3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25z
dCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3Im
IHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiAKLSNpZiBVU0UoQ09SRV9U
RVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAgdm9pZCB1cGRh
dGVTaGFkb3coQ0dTdHlsZVJlZik7CiAjZW5kaWYKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwog
ICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsK
LSAgICBHcmFwaGljc0NvbnRleHQgbV9pbnRlcm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9U
RVhUKSAmJiAhUExBVEZPUk0oV0lOKQorICAgIFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1f
aW50ZXJuYWxDb250ZXh0OworI2VuZGlmCisKICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9u
dCB7IG51bGxwdHIgfTsKICAgICBGb250U21vb3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBG
b250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X29yaWdpbmFsVGV4dE1hdHJpeDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVU
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcAppbmRleCBjMDQ4NjUyZjli
MGU2NWFiNWMyYzljZTU5OGI1Mjc3MDJjOGFhMzNkLi5jYWNmNzY0ZjVkZTJjOGNmNmQzZjQwMDAy
ZmVhZjVlMTIxNjkxYzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogCiAjaW5jbHVk
ZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03Niw3
ICs3Nyw3IEBAIHN0YXRpYyBDR0Vycm9yIGRyYXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBk
ZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJlZiByc3RhCiAgICAgcmV0dXJuIGtDR0Vycm9yU3Vj
Y2VzczsKIH0KIAotR3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50
ZXJuYWxDb250ZXh0KCkKK1VuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNv
cmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKIHsKICAgICBhdXRvIGNvbnRleHREZWxlZ2F0
ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdhdGVDcmVhdGUodGhpcykpOwogICAgIENHQ29udGV4
dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIs
IHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIp
KTsKQEAgLTg0LDcgKzg1LDcgQEAgR3JhcGhpY3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6
Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNr
KGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENH
Q29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZXZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHJhd0dseXBo
cykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdl
dCgpLCBkZURyYXdJbWFnZSwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxi
YWNrPigmZHJhd0ltYWdlKSk7CiAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0NvbnRleHRD
cmVhdGVXaXRoRGVsZWdhdGUoY29udGV4dERlbGVnYXRlLmdldCgpLCBrQ0dDb250ZXh0VHlwZVVu
a25vd24sIG51bGxwdHIsIG51bGxwdHIpKTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0KGNv
bnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENH
Pihjb250ZXh0LmdldCgpKTsKIH0KIAogRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVj
b3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uKQpAQCAtMTE5LDM0ICsxMjAsMzEgQEAgdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
Y29udGUKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGV4dFN0YXRlKQogewogICAgIGlmIChtX29y
aWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5h
bENvbnRleHQuc2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwor
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5m
aWxsU3R5bGUuY29sb3IpOwogICAgIGVsc2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUu
Z3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9v
cmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNl
dEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmln
aW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsK
ICAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAg
ICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBt
X2ludGVybmFsQ29udGV4dC5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVy
bigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKICAgICBpZiAo
bV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9p
bnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRT
dHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAg
IG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRT
cGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3Rh
dGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUucGF0dGVybikKLSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9r
ZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUu
c3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAgfQogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0o
bV9vcmlnaW5hbFN0YXRlLmN0bSk7CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMp
OwotICAgIGlmIChjb250ZXh0U3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAg
bV9pbnRlcm5hbENvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
b2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cuY29sb3IpOwotICAgIGVsc2UKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93
KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJs
dXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOworICAgIG1faW50ZXJuYWxDb250ZXh0
LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9y
ZVRyYW5zZm9ybXMpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgY29udGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwog
Ci0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50
ZXh0RHJhd2luZ01vZGUpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01v
ZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBAIC0zMDIsNyArMzAwLDcgQEAgdm9pZCBEcmF3R2x5
cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYgZ3N0YXQKICAgICAgICAgcmV0dXJuOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBh
dXRvIHRleHRQb3NpdGlvbiA9IENHQ29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRl
eHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi54KTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi55
KTsKICNlbmRpZgpAQCAtMzIxLDcgKzMxOSw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpy
ZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAg
ICAgLy8gSWYgeW91IHNldCB0aGVzZSB0d28gZXF1YWwgdG8gZWFjaCBvdGhlciwgYW5kIHNvbHZl
IGZvciBYLCB5b3UgZ2V0CiAgICAgLy8gQ1RNICogY3VycmVudFRleHRNYXRyaXggPSBDVE0gKiBY
ICogbV9vcmlnaW5hbFRleHRNYXRyaXgKICAgICAvLyBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVy
c2UobV9vcmlnaW5hbFRleHRNYXRyaXgpID0gWAotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50
VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQucGxh
dGZvcm1Db250ZXh0KCkpOworICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9
IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtRml4dXA7CiAgICAgaWYgKGF1dG8gaW52ZXJ0
ZWRPcmlnaW5hbFRleHRNYXRyaXggPSBtX29yaWdpbmFsVGV4dE1hdHJpeC5pbnZlcnNlKCkpCiAg
ICAgICAgIGN0bUZpeHVwID0gY3VycmVudFRleHRNYXRyaXggKiBpbnZlcnRlZE9yaWdpbmFsVGV4
dE1hdHJpeC52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuY3BwCmluZGV4IDU0ZDg1NDcxMjNmODk0N2Q2ZjJmYWNkN2ZjYTZmOTk1MTgxYTI2
NzEuLjM5NTdjNDU3NmZlOTEyZDY4MTAyMDc2MTAwMWNjMjRmNjg2ODg2MmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDkgKzM0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJh
d2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgUmVjb3JkZXI6OkRlbGVnYXRlKiBk
ZWxlZ2F0ZSkKLSAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlz
dENvbnRleHQpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlM
aXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRS
ZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBkZWxlZ2F0ZSk7Ci0gICAgfSkKKyAg
ICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9h
dFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVnYXRlKQogewogfQogCkBA
IC00NiwxMyArNDQsNiBAQCB2b2lkIERyYXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogICAgIG1fcmVwbGF5ZWREaXNw
bGF5TGlzdC5yZXNldCgpOwogfQogCi1SZWNvcmRlciYgRHJhd2luZ0NvbnRleHQ6OnJlY29yZGVy
KCkKLXsKLSAgICBhdXRvKiBncmFwaGljc0NvbnRleHRJbXBsID0gY29udGV4dCgpLmltcGwoKTsK
LSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlY29yZGVyJj4oKmdyYXBoaWNzQ29udGV4dEltcGwpOwotfQotCiB2b2lkIERyYXdpbmdDb250
ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewog
ICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmluZGV4IGQzN2MwNzM1YmViNTU0OTJkOTBmZjllY2U0
Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRkZGVmODU3NTI4YzgyNzllNGYxZWZiZjJkMjU4OGY2Y2E0YjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAt
MzksOCArMzksOSBAQCBjbGFzcyBEcmF3aW5nQ29udGV4dCB7CiBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNID0geyB9LCBSZWNvcmRlcjo6RGVsZWdhdGUq
ID0gbnVsbHB0cik7CiAKKyAgICAvLyBGSVhNRTogRGVkdXBsaWNhdGUgdGhlc2UuCiAgICAgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5n
Q29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRl
ciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRlciYgcmVjb3JkZXIoKSB7IHJldHVybiBtX2NvbnRl
eHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gc3RkOjpl
eGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0pOyB9CiAgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlM
aXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KQEAgLTUwLDcgKzUx
LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGF5RGlzcGxheUxpc3Qo
R3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3RlY3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQgbV9j
b250ZXh0OworICAgIFJlY29yZGVyIG1fY29udGV4dDsKICAgICBEaXNwbGF5TGlzdCBtX2Rpc3Bs
YXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbk1lbW9yeURpc3BsYXlMaXN0PiBtX3JlcGxh
eWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcAppbmRleCAxYTRlYTZkZTNi
NWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJjMGEzLi5mMjIyZTIxODNhMzkxMDNiZDY5ODUzNDQ2
NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBA
IC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKIAogdm9pZCBEcmF3UGF0aDo6YXBwbHko
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotI2lmIFVTRShDRykKICAgICBjb250
ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsK
LSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXgg
MDc0MDQxZjI2YTFlOTY0ZGM0Yzc2ZjQ4MmJjNGM5OTNlODdlZTMxNS4uZjExN2NmYTgzOTM2MDg5
ZTcxZmQwNWFiNzg2NDhiZDI0OGQ1ZTc5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVt
cy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1f
c3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAgICAgUmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBi
dWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMg
dm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCiAg
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owog
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVj
b2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkgKzMzMSw3IEBAIHZvaWQgU2V0U3RhdGU6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRv
d09mZnNldDsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBl
bmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotI2lmIFVTRShDRykKLSAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlm
IChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tu
ZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3LDEyIEBAIE9wdGlvbmFsPFNldFN0YXRlPiBTZXRT
dGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAKICAgICAgICAgc3RhdGVDaGFuZ2UubV9z
dGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKIAotI2lmIFVTRShDRykKLSAgICAgICAg
T3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgZGVjb2RlciA+
PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotICAgICAgICBpZiAoIXNoYWRvd3NVc2VMZWdhY3lS
YWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNoYWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01v
ZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9kZTsKKyAgICAgICAgaWYgKCFz
aGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSAqc2hhZG93
c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cpCisgICAgICAgIHN0YXRlQ2hhbmdl
Lm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwog
ICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RS
ZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNjk0NDgyOGRmYzY0Yjg3NGI5MzdjZWVh
ZGYyYWVkYzJhNjczODExNS4uMzExMWI5MTcxMzAyMDBmOTFmMWQ4MWJkYWZmMGI0YzA2YWY0ZTkx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzMsMTUg
KzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgi
CiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1S
ZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBE
ZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dElt
cGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6
UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisg
ICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0
ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigq
dGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtNTAsOSArNTAsOCBAQCBSZWNvcmRl
cjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxh
eUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlh
bENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAKLVJlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYg
cGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQot
ICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQubV9kaXNwbGF5TGlzdCkKK1JlY29yZGVyOjpSZWNv
cmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCiAgICAg
LCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVnYXRlKQogICAgICwgbV9pc05lc3RlZCh0cnVlKQog
ICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIHBhcmVudC5tX2RyYXdHbHlwaHNSZWNv
cmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24oKSkKQEAgLTE2NiwxMSArMTY1LDYgQEAgUmVu
ZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
ZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAg
YXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBlbmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CkBAIC0y
MDYsNiArMjAwLDExIEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENh
Y2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCCiAKIHZvaWQgUmVjb3JkZXI6
OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgLy8gRklYTUU6IFRoaXMgZmVlbHMg
b2RkLCBidXQgaXMgd2hhdCB1c2VkIHRvIGhhcHBlbi4KKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1
ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VC
dWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KICAgICBtX2Rpc3BsYXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIoaW1hZ2VC
dWZmZXIpOwogICAgIGFwcGVuZDxEcmF3SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CkBA
IC0yNzAsNyArMjY5LDcgQEAgdm9pZCBSZWNvcmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQogICAgIGFwcGVuZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKLUFm
ZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFJlc3BlY3Qg
dGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVEZXZpY2VTY2FsZS4KICAgICByZXR1cm4gY3VycmVu
dFN0YXRlKCkuY3RtOwpAQCAtMjk4LDggKzI5Nyw5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogICAg
IGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIpOwogfQogCi12b2lkIFJlY29yZGVyOjpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
KQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpCiB7CisgICAgLy8gRklYTUU6IFdoeSBp
cyBzdHJva2VTdHlsZSBub3QgdXNlZD8KICAgICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxv
YXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGlu
ZywgZG91YmxlTGluZXMpOwogfQogCkBAIC0zMjgsNiArMzI4LDE4IEBAIHZvaWQgUmVjb3JkZXI6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0ZvY3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNlbmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0
KTsKQEAgLTQ0MCwxMCArNDUyLDkgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiAgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3
aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBS
ZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5n
IHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNv
cmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVjdCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOwor
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwog
fQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VC
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCkBAIC00NTIsMzUgKzQ2MywzNCBAQCB2
b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAgIGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1h
Z2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rp
b248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0Nv
bnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
JiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgR3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQo
WyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlw
ID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRv
IGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgp
KTsKIAotICAgICAgICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGlu
aXRpYWwgQ1RNLgotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdy
YXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUo
KSk7Ci0gICAgICAgIGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlv
bi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFs
Q1RNOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENU
TS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RN
LnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5hdGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0
aWFsIENUTSBtYXRjaGVzIEltYWdlQnVmZmVyJ3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNs
dWRlRGV2aWNlU2NhbGUpOworICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNj
YWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5k
ZWRJbnRTaXplKGRlc3RpbmF0aW9uLnNpemUoKSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gaW5pdGlhbENUTTsKKyAgICBpbml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBp
bml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2NhbGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlh
bENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlY29yZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRl
eHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0g
ICAgfSk7CisgICAgUmVjb3JkZXIgbmVzdGVkQ29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0
U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRpYWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBU
b0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdG
dW5jdGlvbihuZXN0ZWRDb250ZXh0KTsKICAgICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1h
bmRzPihkZXN0aW5hdGlvbik7Ci19CiAKLSNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVy
OjpjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QK
LXsKLSAgICByZXR1cm4gISFwbGF5ZXIuaWRlbnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9E
cmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2
b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVy
KCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXll
ci5pZGVudGlmaWVyKCkpOwogICAgIGFwcGVuZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwg
ZGVzdGluYXRpb24pOwogfQpAQCAtNTE3LDcgKzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6
ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBG
bG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAgIGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xv
ciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ3JhcGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxv
YXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUo
c2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hhZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRp
bmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CkBAIC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0
ZSgpLmN0bTsKIH0KIAotY29uc3QgRmxvYXRSZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQg
UmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAg
ICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5oCmluZGV4IGI4NzZkNmFkYjUxNDczZjFmMzBhYWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2
MWMxNzljN2NhOWM3YzlkMjFmMTk0MzQwYzk3YmI5OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlM
aXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNs
dWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZv
ciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdP
cHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAg
IFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0Jiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6
RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgUmVjb3JkZXIoRGlzcGxheUxpc3QmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVn
YXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0
aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29u
c3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1h
dCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3
NywyNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNS
ZWNvcmRlcjsKLSAgICBSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVj
b3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJl
Y3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAg
ICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wg
Y2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG51bGxwdHI7IH0KICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBv
dmVycmlkZTsKIAorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXND
QUxheWVyQ29udGV4dChib29sKSBvdmVycmlkZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBv
dmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAKLSNpZiBVU0UoQ0cpCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBh
cHBseVN0cm9rZVBhdHRlcm4oKSBvdmVycmlkZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIwLDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9h
dFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRS
ZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0Vs
bGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNv
bnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRo
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZz
ZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQg
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0
LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAg
ICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAK
QEAgLTEzNiw3ICsxNTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRT
aXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3Zl
cnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1
ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFw
aGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQ
YXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91
bmRzKCkgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYs
IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVy
cmlkZTsKKwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShN
ZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAg
IGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3Zl
cnJpZGU7CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkg
b3ZlcnJpZGU7CkBAIC0xNzMsNyArMTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgICAgIGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFy
Z3MpLi4uKTsKLSAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdy
YXBoaWNzQ29udGV4dCgpKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2Fs
Qm91bmRzKCp0aGlzKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJ
dGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxz
ZSBpZiAoYXV0byByZWN0ID0gaXRlbS5nbG9iYWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBt
X2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAs
NiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3Qg
RmxvYXRSZWN0JikgY29uc3Q7CiAgICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0o
KSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAg
IHN0cnVjdCBDb250ZXh0U3RhdGUgewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4
IDY1YmNhNjcwZjkyODZkMjVhMTk1MTkyMWI4NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYx
ZTU0NmRkNDI0NzAxZjMzZDJmYjIwMzFmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVT
RShBUFBLSVQpCiAKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRp
b25zLmg+CiAjaW1wb3J0IDx3dGYvTG9jay5oPgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0
aW9uYWw8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3Ig
KmNvbG9yKQogICAgICAgICBSZXRhaW5QdHI8TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVw
ID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBs
YW5lczpuaWwgcGl4ZWxzV2lkZToxIHBpeGVsc0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNh
bXBsZTo4IHNhbXBsZXNQZXJQaXhlbDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNw
YWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6
MzJdKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGlj
c0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5n
ZXQoKV0uQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4
dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9m
ZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0IGxvY2FsQ29udGV4dChiaXRtYXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3Ig
ZHJhd1N3YXRjaEluUmVjdDpOU01ha2VSZWN0KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRl
OTVlZWIzODk2YWU1ZDliM2NhNGQxY2UwZmViOWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEz
MDZkYTgwZDYwM2M1NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYkxheWVyLm1tCkBAIC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIldlYkxheWVyLmgiCiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgog
I2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNv
cmUuaD4KQEAgLTUxLDcgKzUxLDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRS
ZWYpY29udGV4dAogewogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6
OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAo
bGF5ZXIpIHsKLSAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFp
bnRSZWN0TGlzdCByZWN0c1RvUGFpbnQgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxl
Y3RSZWN0c1RvUGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6ZHJhd0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0
LCBsYXllci5nZXQoKSwgcmVjdHNUb1BhaW50LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8g
V2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhp
Y3NMYXllclBhaW50Tm9ybWFsKTsKICAgICB9CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClk
cmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CiAgICAgYXV0byBsYXllciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZv
cm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAm
JiBsYXllci0+b3duZXIoKSkgewotICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
RyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJ
c0NBTGF5ZXJDb250ZXh0KHRydWUpOwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2Nl
bGVyYXRlZENvbnRleHQobGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRl
eCBmMzI3NjQzNjg1MWNjN2UwMWQ0NzBjNTcwZDlkOWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQw
OTJkODRiNzMyZTk4NDM5MDYzNjNlMDU2MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBh
dXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxP
cGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogICAgIHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAK
LUNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBQYWludGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDog
R3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5k
TGlzdCkKK0NhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFp
bnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlzdCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFu
ZExpc3QpCiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6
OmluZmluaXRlUmVjdCgpIH0pOwogfQpAQCAtMTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgR3JhcAogICAgIH0KIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVh
clNoYWRvdygpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNh
cChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWlu
dGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRl
KGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0K
IAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKQEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0
ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApA
QCAtMzE2LDcgKzMxMSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAg
LTM0Niw3ICszNDEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9y
LCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcg
KzM2Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9Q
QVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RX
aXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKQEAgLTM4Niw3ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0
aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7CiB9CiAKQEAgLTQwOCw3ICs0MDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxF
bGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDI4LDcgKzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4
LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9r
ZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcw
LDcgKzQ2NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBD
YWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwog
fQogCkBAIC01MjMsNyArNTE4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAg
fQogICAgIH0KIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291
cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAg
ICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNj
YWxlZEZvbnQoKSksCkBAIC01NTMsNyArNTQ4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8K
ICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUlt
YWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRp
b25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBo
YSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3Jk
ZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTYxMywxMSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3
TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGlu
ZXMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7
CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwg
T3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBD
b2xvcj4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpA
QCAtNjMzLDcgKzYyOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3Vi
bGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2Nywx
MCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29s
b3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGlu
Z09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3
ICs4OTQsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52
YWx1ZSgpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3Jt
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVE
ZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07
CiB9CkBAIC0xMDMyLDcgKzEwMjMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAot
SW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3Rh
dGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0
YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsx
MDY3LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVl
X3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBl
bmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGlj
c0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsK
ICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNv
bnN0IEZsb2F0UmVjdCYpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVG
b3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0
OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWly
by9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5o
CmluZGV4IDMwOGYxZmY2MzY1NmFkYTQwOWYwZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRm
MDQ5MmQzYWJmODhmZGY3YzVjMzM5OTcyNzdiYmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9u
UmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBA
QAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVy
YXRpb24uaCIKIAogbmFtZXNwYWNlIE5pY29zaWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJl
Y29yZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xh
c3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQgewogcHVibGljOgotICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiwgUGFpbnRpbmdPcGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcihQYWludGluZ09wZXJhdGlvbnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhh
c1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92
ZXJyaWRlOwpAQCAtNTMsNiArNTIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsK
ICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6Okdy
YWRpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9y
LCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29s
b3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91
bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAg
IHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAg
KzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29y
ZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2ws
IFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJD
b3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2Vi
Q29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVj
dD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04
Niw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZp
bmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKICAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0g
Z2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVy
cmlkZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZv
aWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJy
aWRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdl
YkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xp
cFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlv
bkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYm
KSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdD
b21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwg
RnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1l
ZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQ
bGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2
b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFp
bnRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEw
MGY3Nzc4MWU0Y2Y1YjhjMWQ4N2EyYzZjMzdjY2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIz
NTU4ODQ2ODY3ZTBjZmJkMDZhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29z
aWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJ
Uk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2lu
Y2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29zaWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJv
LmgiCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6
Rm9yUGFpbnRpbmcoQnVmZmVyJiBidWZmZXIpCiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUobV9jYWlyby5zdXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9y
bUNvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2Nh
aXJvLmNvbnRleHQuZ2V0KCkpOwotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y3JlYXRlRmFjdG9yeSgqbV9wbGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29u
dGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRm
b3JtQ29udGV4dCk7CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZv
clBhaW50aW5nKCkKQEAgLTEwNCwxMSArMTA0LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWly
bzo6Rm9yUGFpbnRpbmc6OnJlcGxheShjb25zdCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4K
IAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50
aW5nT3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVyYXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250
ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBh
aW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29y
ZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJhdGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dy
YXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRp
bmdPcGVyYXRpb25zKTsKIH0KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6
fkZvclJlY29yZGluZygpID0gZGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4
IDgzMGFlZDA4MjJmNTc1ZDUyYzhiZGJkMWNlMjgyYjhlYmE3ZDUwYmIuLjBmOWQ4NzI5ZTcxZGQ0
MmU4MGU1OWVlYjM4YmE4MWMwNGJlY2YzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApA
QCAtMjksNyArMjksNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
IgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAtNjcsMzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5Q
dHI8Q0dDb250ZXh0UmVmPiBDR0NvbnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
CiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3ND
b250ZXh0Q0coSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENH
KENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhk
YywgaGFzQWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhE
QyBoZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250
ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAg
ICBpZiAobV9kYXRhLT5tX2NnQ29udGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNv
bnRleHQgc3RhcnRzIGluIHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3Jt
RmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihz
dHJva2VDb2xvcigpKTsKLSAgICB9CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBt
ZXJnZSBnZXRXaW5kb3dzQ29udGV4dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2lu
Z2xlIEFQSQogLy8gc3VpdGFibGUgZm9yIGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1f
aW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBi
b29sIGNyZWF0ZWRCaXRtYXAgPSAhZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8
IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAg
ICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBj
b25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZEZpcnN0IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAK
ICAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRt
YXBDb250ZXh0LmdldCgpKSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0Nv
bnRleHQuZ2V0KCksIGRzdFJlY3QsIGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1h
Z2UoZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0
LCBpbWFnZS5nZXQoKSk7CiAgICAgCiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6
OkRlbGV0ZURDKGhkYyk7CkBAIC0xMjQsMjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50
JiBwbwogICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUo
aW1hZ2UtPnNpemUoKS53aWR0aCgpLCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1h
Z2UtPmJ5dGVzUGVyUm93KCksIHNSR0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0
cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdl
KG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55
KCksIGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1h
Z2UuZ2V0KCkpOyAgIAorICAgIENHQ29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKS0+bV9jZ0NvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55
KCksIGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1h
Z2UuZ2V0KCkpOyAgIAogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgm
IHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBp
ZGVudGljYWwgdG8gdGhlIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBp
biBHcmFwaGljc0NvbnRleHRNYWMubW0uCiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBo
aWNzQ29udGV4dENHLmNwcCBhbmQgYmUgc2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0
aCAtIDEpIC8gMi4wZjsKICAgICBvZmZzZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29s
b3JSZWYgPSBjb2xvci5pc1ZhbGlkKCkgPyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7
CkBAIC0xNjQsMTEgKzE0OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBpZiAoc3R5bGUubW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9k
ZTo6U3BlbGxpbmcgJiYgc3R5bGUubW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9k
ZTo6R3JhbW1hcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1
c2gobV9jZ0NvbnRleHQuZ2V0KCkpOwogfQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIEdyYXBoaWNzQ29udGV4dENHOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2RhdGE7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRD
YWlyb1dpbi5jcHAKaW5kZXggZjE0NDI1NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2
NC4uZjNjOGYxZGQxMTQ1YjIxZWM1NjFkYWY5MGExM2UzNmNmMzdkNGI3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJv
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm9XaW4uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNjYsMjggKzY2
LDkgQEAgc3RhdGljIGNhaXJvX3QqIGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoSERDIGhkYywg
Ym9vbCBoYXNBbHBoYSkKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQoSERDIGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6
IEdyYXBoaWNzQ29udGV4dENhaXJvKGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0Fs
cGhhKSkKIHsKLSAgICBwbGF0Zm9ybUluaXQoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAg
aWYgKCFkYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjcmVhdGVDYWly
b0NvbnRleHRXaXRoSERDKGRjLCBoYXNBbHBoYSk7Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+
KGNyKSk7Ci0gICAgbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZShtX2RhdGEpOwotICAgIG1fZGF0YS0+bV9oZGMgPSBkYzsKLSAgICBpZiAocGxhdGZvcm1D
b250ZXh0KCktPmNyKCkpIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0
cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSk7Ci0gICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3Io
KSk7Ci0gICAgfQotICAgIGlmIChjcikKLSAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CiB9CiAj
ZW5kaWYKIApAQCAtMTI3LDkgKzEwOCw5IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRl
eHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3Qg
SW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNy
ZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5j
eUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29u
dGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWhkYyB8
fCAhY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAg
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTc4LDQgKzE1OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpmbHVzaCgpCiB9CiAjZW5kaWYKIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBHcmFwaGljc0NvbnRleHRDYWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJELmNwcAppbmRleCAyOWE4MmE4OTc4MjI5YjBmNTg3M2FiZGY4MmJmYWY4MDZj
ZjE2NTk4Li42NWU5N2Y5NzM0NjkyMjgyZDI3ZmMxZWQ3ODQ4OGQxODE3M2MxNjFiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKQEAgLTQ3LDE3ICs0NywxNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMs
IGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRj
LCBoYXNBbHBoYSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBo
ZGMsIElEMkQxRENSZW5kZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBo
YXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3Qs
IGJvb2wgaGFzQWxwaGEpCiB7CiAgICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAg
ICBhdXRvIHRhcmdldFByb3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGll
cygpOwogCi0gICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
LT5DcmVhdGVEQ1JlbmRlclRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsK
KyAgICBIUkVTVUxUIGhyID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3Rvcnko
KS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7
CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdl
dCktPkJpbmREQyhoZGMsICZyZWN0KTsKQEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRl
eHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVy
VGFyZ2V0LCBSRQogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGUgcmVuZGVyZXJUeXBlKQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCwgcmVuZGVyZXJUeXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6c3lzdGVtRmFjdG9yeSgpCiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0
MkRGYWN0b3J5ID0gbnVsbHB0cjsKICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODks
NyArODksNyBAQCBJRDJEMUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgp
CiAgICAgcmV0dXJuIGRpcmVjdDJERmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdy
YXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCog
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0
YXRpYyBJRDJEMVJlbmRlclRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAg
ICAgaWYgKCFkZWZhdWx0UmVuZGVyVGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFS
ZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAg
cmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUluaXQoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlm
ICghaGRjKQogICAgICAgICByZXR1cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8g
RklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBv
bGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNv
bnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
Q29udGV4dCkKIHsKICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0
Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7
CiAgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiAr
MTU1LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShD
R0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2Rh
dGE7CiB9CiAKLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0CitQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkK
LSAgICAgICAgcmV0dXJuIG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFw
YWludGluZ0Rpc2FibGVkKCkpOwogICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQo
KTsKIH0KIApAQCAtMTk1LDMzICsxOTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpjdXJyZW50R2xvYmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhh
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6
c2F2ZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9y
ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQ6OnJlc3RvcmUoKTsKICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3Qg
Q09NUHRyPElEMkQxQml0bWFwPiYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxv
YXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdl
LmdldCgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBo
YSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRp
dmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5n
ZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEs
IERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3Qs
IGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwg
fHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBj
cmVhdGVkQml0bWFwID0gIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7
CiAgICAgaWYgKCFjcmVhdGVkQml0bWFwKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgICAgIERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3Qm
IGRzdFJlY3QsIGJvbwogICAgIDo6RGVsZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQ
b2ludCYgcG9pbnQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0Jp
dG1hcChXaW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1h
cmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxl
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQog
eworICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0LCBzdHlsZSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBw
bGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGUgcmVuZGVyaW5nVHlwZSkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQogICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250
ZXh0KQogICAgICwgbV9yZW5kZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1f
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAg
ICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRD4mJiBvd25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlx
dWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVy
aW5nVHlwZSkKICAgICA6IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRm
b3JtQ29udGV4dCkpCiAgICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29u
dGV4dCkKICAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkw
LDcgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KQorICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3
KCk7CiB9CiAKQEAgLTMxMCw5ICszMDMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7
CiB9CiAKLUlEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4
dCgpLT5icnVzaFdpdGhDb2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwog
fQogCkBAIC0zNzIsNzMgKzM2NCw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3ND
b250ZXh0Ojpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitE
MkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhh
KGNvbnN0IENvbG9yJiBjb2xvcikgY29uc3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNv
bG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcs
IGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCog
R3JhcGhpY3NDb250ZXh0Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAot
SUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJE
MUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAog
ewogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsK
IH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBj
b25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VC
cnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5T
dHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0
ZXJuRmlsbEJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPm1fcGF0dGVybkZpbGxCcnVzaC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmJlZ2luRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQog
ewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmJlZ2luRHJhdygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpmbHVzaCgpCiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6Zmx1c2goKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd1BhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisg
ICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdl
ID0gaW1hZ2U7CiAgICAgRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwg
V1RGTW92ZSh0aWxlSW1hZ2UpLCBJbnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3Rhbmds
ZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3Qo
cmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFT
U0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENv
bG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUy
ICs0NjksMjkgQEAgRDJEMV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ry
b2tlU3R5bGVQcm9wZXJ0aWVzKG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9y
bUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZv
cm1Db250ZXh0Lm1fbGluZUpvaW4sIG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJE
MV9EQVNIX1NUWUxFX1NPTElELCAwLjBmKTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUq
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCkt
PnN0cm9rZVN0eWxlKCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVy
cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2lu
dDIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6
OmRyYXdMaW5lKCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eVN0cm9rZVBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJv
a2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRl
ZCBvbiBXaW5kb3dzCiAKQEAgLTU0MywxMSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0
cm9rZUJydXNoID0gYWRvcHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMg
aXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJu
LT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNU
TSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0
aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQ
YXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJl
Y3QyRDo6ZmlsbFBhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUs
ICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAg
aWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6
c3Ryb2tlUGF0aChjb250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAq
dGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291
cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBEaXJlY3QyRDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0
Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRo
R3JhZGllbnQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Cit7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENv
bXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
cjsKKworICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6
ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKKyAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlv
bihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBs
KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVk
UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAg
RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJl
Y3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBP
dXQoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNs
aXBSdWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cGF0aCwgY2xpcFJ1bGUpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5k
cygpIGNvbnN0CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkg
Y29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJv
dW5kcygpOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4g
RGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAK
QEAgLTczNSwxOCArNjEzLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0
eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1faW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJl
Z2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0
ZS5hbHBoYSA9IG9wYWNpdHk7CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwg
b3BhY2l0eSk7CiB9CiAKQEAgLTc1NCwxMTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXll
cigpOwogICAgIERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0
KCkpOwogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0
YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3co
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MgZmxhZ3MpCiB7Ci0gICAgKHZvaWQpb2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZv
aWQpY29sb3I7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3Qy
RDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ry
b2tlVGhpY2tuZXNzKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFk
b3coKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJv
a2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBp
ZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5p
bmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNl
IENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1
dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9
IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZz
ZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Cisg
ICAgICAgIH0KKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHls
ZSk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9w
ZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVy
YXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBs
aW1pdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5n
ZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9y
bUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIC8vIE1heWJlIHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAg
ICBtX2ltcGwtPnNldE1pdGVyTGltaXQobGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkp
IHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Io
c3Ryb2tlQ29sb3IoKSk7ICAgIAorICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMo
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJU
KG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
Pm1fc29saWRGaWxsQnJ1c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQog
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0
ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAg
IGF1dG8gZm9udFNtb290aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01P
REVfQ0xFQVJUWVBFIDogRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUo
Zm9udFNtb290aGluZ01vZGUpOworICAgIH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBB
U1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBhbHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEo
YWxwaGEpOwogICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
RGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChm
bGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eUNoYW5nZSkpIHsKKyAgICAgICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dp
dGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6
CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9O
RUlHSEJPUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpEb05vdEludGVycG9sYXRlOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0
eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAg
IHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJw
b2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxp
bWl0KGZsb2F0IGxpbWl0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCks
IGxpbWl0KTsKK30KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VS
ZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQorewor
ICAgIERpcmVjdDJEOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRo
KQorewogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0
ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQs
IHJlY3QsIGxpbmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVDYXAoTGluZUNhcCBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRM
aW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgY2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0
IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRh
c2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hl
cywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9m
ZnNldCA8IDApIHsKICAgICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKICAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hP
ZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgp
LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gam9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExp
bmVKb2luKExpbmVKb2luIGpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExp
bmVKb2luKGpvaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29u
dGV4dCgpLCBqb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0
aCwgZmlsbFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgRGlyZWN0MkQ6OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xl
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2Rh
dGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OnRyYW5zbGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1F
OiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRD
VE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RN
KHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9y
bSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxl
KSBjb25zdAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0o
SW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJE
OjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBS
b3VuZGluZ01vZGUgcm91bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdN
b2RlIHJvdW5kaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gcmVjdDsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwt
PnJvdW5kVG9EZXZpY2VQaXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBE
aXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlKQotewotICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFw
cGVuZCgwKTsKLSAgICB3aWR0aHMuYXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVz
Rm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcs
IGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5k
cmF3TGluZXNGb3JUZXh0KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJs
ZVVuZGVybGluZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZv
cm1Db250ZXh0KCksIHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVu
ZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVS
TCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHll
dCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47
IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBh
aW50aW5nRGlzYWJsZWQoKSk7Ci0KLSAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAg
ICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVy
cG9sYXRlOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVT
VF9ORUlHSEJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6TG93OgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFS
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06
Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAg
cXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0
eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBw
cm9iYWJhbHkgbm90IG5lZWRlZC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rp
b24gaXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAor
Ym9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25z
dAogewotICAgIGlmICghaGFzUGxhdGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpw
bGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvcikKIHsKLSAgICAodm9pZCltb2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBBU1NFUlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAg
Ly8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkKIHsKLSAgICBBU1NFUlQobV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsK
LSAgICBtX2RhdGEtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmICht
X3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9n
cmFkaWVudCBicnVzaGVzIGluIEQyRC4KKyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBz
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3Rh
dGUuZmlsbENvbG9yID09IGNvbG9yKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29s
b3IoZmlsbENvbG9yKCkpOworICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250
ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBt
X3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0
ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwp
OwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERp
cmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUu
c3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9u
dHMoYm9vbCBlbmFibGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9u
dFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgIFVOVVNFRF9QQVJBTShmb250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxh
dGZvcm1EYXRhKCkuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1w
bCk7CisgICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBz
aG9ydD4gZ2x5cGhzKG51bUdseXBocyk7CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2
YW5jZXMobnVtR2x5cGhzKTsKKyAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhP
ZmZzZXRzKG51bUdseXBocyk7CiAKLSAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxl
ID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJ
QVNfTU9ERV9BTElBU0VEOwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+
U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20g
Pj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBh
ZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFk
dmFuY2UpCisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhh
ID09IGFscGhhKTsKLSAgICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0g
Z2x5cGhCdWZmZXIuZ2x5cGhBdChpICsgZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNl
c1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNl
T2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2Vu
ZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVpZ2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2lt
cGwpOworICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xk
T2Zmc2V0KCk7CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29t
cG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250
ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJl
Y3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zm
c2V0LCBnbHlwaHMsIGhvcml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAor
ICAgICAgICBzdGF0ZS50ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVG
YWN0b3IpCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3ND
b250ZXh0Jik+JiYpCiB7Ci0gICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAg
ICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29t
bWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUu
ZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50
IGJydXNoZXMgaW4gRDJELgotICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7CisgICAgaWYgKCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpw
bGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ry
b2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
KyAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1
cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURF
TykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1f
c3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0
ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4K
IH0KKyNlbmRpZgorCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZk
ZjIxNTVmMWExNTRhYzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0Uo
RElSRUNUMkQpCi0KLSNpbmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJG
bG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQp
OwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBs
RmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdl
dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJ
bXBsKGNvbnRleHQpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0g
ICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+
KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNz
Q29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250
ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1w
bChjb250ZXh0KQotICAgICwgbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEPihyZW5kZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRl
eHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGlj
c0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdl
dCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEKCkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRl
KG51bGxwdHIpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250
ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAg
ICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3Rh
dGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQg
aXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAg
Ly8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBv
c2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8
R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAg
ICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAg
ICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAt
c2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAg
ICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29u
dGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQot
ICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29u
dGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmNsZWFyU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJE
OjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3Bs
YXRmb3JtQ29udGV4dCwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAg
IERpcmVjdDJEOjpzZXRMaW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBt
aXRlckxpbWl0KQotewotICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250
ZXh0LCBtaXRlckxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZv
cm1Db250ZXh0LCByZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250
ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBh
dXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCkpOwotICAgIGlmICghYnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVj
dDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2gu
Z2V0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRv
ciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29t
cG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxh
dGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNv
bnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAg
Q29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6
OlNoYWRvd1N0YXRlIHNoYWRvd1N0YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQo
KSkKLSAgICAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpm
aWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0
ZSk7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRm
b3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7Ci0KLSAgICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNl
KHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxh
dGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVS
ZWN0LCBmaWxsU291cmNlLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRo
IHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0
ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVj
dDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7
Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIERpcmVjdDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBo
cyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZv
bnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRT
bW9vdGhpbmcpOwotICAgIGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5z
aWduZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpv
bnRhbEFkdmFuY2VzKG51bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+
IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bUdseXBoczsgKytpKSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5h
ZHZhbmNlc0NvdW50KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFu
Y2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5j
ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVm
ZmVyLmdseXBoQXQoaSArIGZyb20pOwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBh
ZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9
IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNl
dCA9IGFkdmFuY2UtPmhlaWdodCgpOwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xk
T2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9w
bGF0Zm9ybUNvbnRleHQsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRl
eHQoKSksIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwK
LSAgICAgICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRo
ZXRpY0JvbGRPZmZzZXQsIGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMs
IHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBp
bWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJ
bWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAo
YXV0byBzdXJmYWNlID0gaW1hZ2UucGxhdGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6
ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUo
aW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
b3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9y
bUNvbnRleHQsIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCht
X3BsYXRmb3JtQ29udGV4dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91
YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJE
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHls
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRl
eHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGly
ZWN0MkQ6OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6cmVzdG9yZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0
Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3Bs
YXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0
ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAg
IERpcmVjdDJEOjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4
dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6
OmdldENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAg
RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNp
dHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJl
bmN5TGF5ZXIoKQotewotICAgIERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRm
b3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3Jt
Q29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpj
bGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dCht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBP
dXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUp
Ci17Ci0gICAgRGlyZWN0MkQ6OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlw
UnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91
bmRzKCkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxh
dGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCi17Ci0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGF1dG8qIGNvbnRleHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3Vy
ZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4g
RGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdp
bmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBs
ZW1lbnRlZC4KLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBj
ZWIwNDUwNTMxNzAzZmI5MGVlYTdiNDJmMjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQg
ZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3Rv
cnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5
IGNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYp
OwotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJE
MVJlbmRlclRhcmdldCopOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RCgpOwotCi0gICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2Fw
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRo
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJy
aWRlOwotICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhz
KGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJh
d2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29s
b3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0j
aWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5Q
YWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IG1fcGxhdGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAx
ZDgwNDIwY2Y3ZWM2Y2Q3NzVhNjJiYWVhMjJmOTkwNjA3ZWI0Y2JkLi43N2RhZmUzMjBiYjA3MzA4
OTAxMDBkN2M0YWYxMDQxNjM2OWU3MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYs
MTIgKzU2LDEyIEBAIHN0YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1h
cCkKICNpZiBQTEFURk9STShXSU4pCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93cyhib29sIGluY2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZElu
Y2x1ZGVDaGlsZFdpbmRvd3MgPSBpbmNsdWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDo6c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fZGF0YS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwog
fQogCiBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhk
YywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKQEAgLTk1LDE1ICs5NSwxMyBAQCBHcmFwaGljc0NvbnRl
eHQ6OldpbmRvd3NCaXRtYXA6On5XaW5kb3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dDo6V2luZG93c0JpdG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5k
b3dzQml0bWFwKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8
V2luZG93c0JpdG1hcD4obV9kYXRhLT5tX2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8V2luZG93c0JpdG1hcD4oZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXpl
KTsKIH0KICNlbmRpZgogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChj
b25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIEhE
QyBoZGMgPSBudWxscHRyOwotICAgIGlmICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEt
Pm1faGRjOworICAgIEhEQyBoZGMgPSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7
CiAgICAgLy8gRklYTUU6IFNob3VsZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNo
YWRvdyBpcyBzZXQ/CiAgICAgaWYgKCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsK
ICAgICAgICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzMsMTcgQEAgSERD
IEdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVj
dCwgYm9vbCBzdXBwb3J0QWxwaGEKICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAg
ICB9CiAKLSAgICBtX2RhdGEtPmZsdXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0
dXJuIG1fZGF0YS0+bV9oZGM7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNo
KCk7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4g
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250
ZXh0OjpoZGMoKSBjb25zdAogewotICAgIGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRl
ZFByaXZhdGVDb250ZXh0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJu
IG1fZGF0YS0+bV9oZGM7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5t
X2hkYzsKIH0KIAogI2lmIFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRX
aW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNTk5YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNjNzljMGNiYzBj
NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShD
RykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29u
dGV4dFdpbiBHcmFwaGljc0NvbnRleHRDRworCisjZWxpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHREaXJlY3QyRC5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRX
aW4gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKKworI2VsaWYgVVNFKENBSVJPKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdy
YXBoaWNzQ29udGV4dENhaXJvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5jcHAKaW5kZXggYThlZTM1YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRlMDhjNC4u
YWQ5NTU0YzA1MGFlZTJlMTBlYzE1MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OmNyZWF0ZShjCiAgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBs
YXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEPihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVjNDM2ZTcw
NjA4OTg3MDdiYThiNjU0NjQxY2UyYmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2NmYjhmMjY0
ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6
Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBh
dXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcEluZm8uYm1C
aXRzLCBibXBJbmZvLmJtV2lkdGgsIGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgsIGJtcElu
Zm8uYm1XaWR0aEJ5dGVzLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0gICAgR3Jh
cGhpY3NDb250ZXh0IGdjKGNnQ29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z2MoY2dDb250ZXh0LmdldCgpKTsKIAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJ
bWFnZTo6c2l6ZSgpOwogICAgIGlmIChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5OWRjNzI5
ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVjNWUyZDgz
Yjk0N2NiN2M5NDk3NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUNhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNh
aXJvLmg+CiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBC
aXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSog
c2l6ZSkKICAgICBjYWlyb190KiB0YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOwogICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2Mo
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikpOworICAg
IEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNpemUgaW1h
Z2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5k
ZXggZDk2MjAzMDBhYmNlYmE0OTRjYTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWExN2I3Nzhh
MjQ4MGNkZjNjMGViZmEyZDZlNzI3MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3ICsyMzIs
NyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVy
VGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENv
bnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQ
VU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNj
cmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlOjpHUFVNZW1vcnkpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7
CiAKICNpZiBBU1NFUlRfRU5BQkxFRApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mIHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAg
ICBHcmFwaGljc0NvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHRE
MkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9y
eSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VTdHlsZUFw
cGxpZXIoc2NyYXRjaENvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFn
SW1hZ2VJT1MubW0KaW5kZXggNzM1OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIzNDBjNGY5
OS4uMzYxNjAyZTU3YjI0ZmIxNmNiZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3IEBAIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uCiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJl
ckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2UgKmltYWdl
Q29weSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJl
bmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0Nv
bnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4dC5zY2Fs
ZSh7IGFkanVzdGVkSW1hZ2VTY2FsZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAgICAgICAg
Y29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRpb24gfSk7
CkBAIC0xMzYsNyArMTM2LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmso
RWxlbWVudCYgbGlua0VsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIGF1dG8g
cmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0
YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1hZ2UgPSBb
cmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4
dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJl
bmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250
ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0
ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUo
eyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVk
UmVjdChpbWFnZVJlY3QsIEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6OndoaXRl
KTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGljYQogCiAgICAgYXV0
byByZW5kZXJlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlcklu
c3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1cm4gW3Jl
bmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQg
KnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5k
ZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb250
ZXh0IGZsaXAgaGVyZSBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3RzIHRoYXQg
c29tZXdoZXJlIGVsc2UgaW4gdGhlIHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0aWF0aW9u
IGZsb3csIHdlIHVubmVjZXNzYXJpbHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICAg
ICAgY29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIzOCw3ICsy
MzgsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1l
LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0gKnRleHRJ
bmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFM
OjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1h
Z2Uuc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0KCkgaW1h
Z2VXaXRoQWN0aW9uczpbJmltYWdlXShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJl
bmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJl
ckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChy
ZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1h
Z2UsIEZsb2F0UG9pbnQoKSk7CiAgICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBG
bG9hdFJlY3QmIGVsZW1lbgogCiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9j
VUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Qu
c2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFjdGlvbnM6
XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQg
fTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5D
R0NvbnRleHQgfTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0
KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAg
IGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCAwOWZh
ZWVlZTllYWNiNTAzMmYxYTc5ZDczYmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZlZDAzYWQw
NTI1NjFkMDRjOWNkYWZkZmI0MTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5oIgogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIyZTdlMTkx
ZGFjODE2MzZkNTI5NTFkNDBkNTNiODg3M2Y1NTA5Li44NjIzOTk1ZjcxYTI4ZWU5ZTMzMDM4OTYw
MTJmM2QzYmViMWI2MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RHJhZ0ltYWdlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlV2luLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgog
I2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCkBAIC0xODYs
NyArMTg3LDExIEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQm
LCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBpbkxhYmVsLCBUCiAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAKICAgICA6OlNlbGVjdE9iamVjdCh3b3JraW5nREMuZ2V0KCksIGltYWdlLmdldCgp
KTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChjb250ZXh0UmVmKTsKKyNpZiBVU0UoQ0FJ
Uk8pCisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gY29udGV4dCgqY29udGV4dFJlZik7CisjZWxz
ZQorICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGNvbnRleHRSZWYpOworI2VuZGlmCiAg
ICAgLy8gT24gTWFjIGFscGhhIGlzIHswLjcsIDAuNywgMC43LCAwLjh9LCBob3dldmVyIHdlIGNh
bid0IGNvbnRyb2wgYWxwaGEKICAgICAvLyBmb3IgZHJhZyBpbWFnZXMgb24gd2luLCBzbyB3ZSB1
c2UgMQogICAgIGNvbnN0ZXhwciBhdXRvIGJhY2tncm91bmRDb2xvciA9IFNSR0JBPHVpbnQ4X3Q+
IHsgMTQwLCAxNDAsIDE0MCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBN
ZW51V2luLmNwcAppbmRleCA5MzlhNzlhZWYzYmJmODIwNzY2YjlmZWY3YWI2YjEzYWY4MzQ3MmU3
Li4yNDhlM2RjMWUzODIxMjgzYWUwM2RiMmUzMjJjZjE1ZjZjZmJhYjNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdESVV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkhv
c3RXaW5kb3cuaCIKQEAgLTYwOSw3ICs2MTAsNyBAQCB2b2lkIFBvcHVwTWVudVdpbjo6cGFpbnQo
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgSERDIGhkYykKICAgICAgICAgOjpTZWxlY3RPYmpl
Y3QobV9EQy5nZXQoKSwgbV9ibXAuZ2V0KCkpOwogICAgIH0KIAotICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KG1fREMuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KG1f
REMuZ2V0KCkpOwogCiAgICAgLy8gbGlzdFJlY3QgaXMgdGhlIGRhbWFnZVJlY3QgdHJhbnNsYXRl
ZCBpbnRvIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZW50aXJlIG1lbnUgbGlzdCAod2hpY2ggaXMg
bGlzdFNpemUgKiBtX2l0ZW1IZWlnaHQgcGl4ZWxzIHRhbGwpCiAgICAgSW50UmVjdCBsaXN0UmVj
dCA9IGRhbWFnZVJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29u
dGVudGZ1bFBhaW50Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVu
dGZ1bFBhaW50Q2hlY2tlci5jcHAKaW5kZXggZGE5NTJiZjZiM2NmYTJmYjZjMDlhZjBkMmQ2OWY0
NjNkNzZhZWMyNi4uMWIxODJhMWQzNmI3Y2ZhYWEwYjE2OWQwZDhjODU0MzVmNDNiNzY3ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2Vy
LmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsNyAr
MzksNyBAQCBib29sIENvbnRlbnRmdWxQYWludENoZWNrZXI6OnF1YWxpZmllc0ZvckNvbnRlbnRm
dWxQYWludChGcmFtZVZpZXcmIGZyYW1lVmlldykKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRCZWhh
dmlvcihQYWludEJlaGF2aW9yOjpGbGF0dGVuQ29tcG9zaXRpbmdMYXllcnMpOwogICAgIGZyYW1l
Vmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyh0cnVlKTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCBjaGVja2VyQ29udGV4dChHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
czo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKKyAgICBOdWxsR3JhcGhpY3NDb250ZXh0IGNo
ZWNrZXJDb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
czo6RGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KTsKICAgICBmcmFtZVZpZXcucGFpbnQoY2hlY2tl
ckNvbnRleHQsIGZyYW1lVmlldy5yZW5kZXJWaWV3KCktPmRvY3VtZW50UmVjdCgpKTsKIAogICAg
IGZyYW1lVmlldy5zZXRQYWludHNFbnRpcmVDb250ZW50cyhvbGRFbnRpcmVDb250ZW50cyk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApp
bmRleCAwMjU0MjI1YmIzMTM4YzM4MmMzNjhiMDk0OGQ2NWFlNmZiMGI3YzBiLi4xNDNhMzU5Y2Jh
ZTg4ZTNlM2M2YjNjNmE3YzczNWJjZmZjNTVlNGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKQEAgLTY5MCwxMCArNjkwLDcgQEAg
c3RhdGljIHZvaWQgYXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgUmVuZGVyU3QKICAgICAgICAgYm94U2hhZG93ID0gYm94U2hhZG93LT5u
ZXh0KCk7CiAKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0KGJveFNoYWRvdy0+eCgpLCBib3hT
aGFkb3ctPnkoKSk7Ci0gICAgaWYgKCFib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCi0g
ICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMo
KSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSk7
Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQs
IGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJv
eFNoYWRvdy0+Y29sb3IoKSkpOworICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
Ym94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94
U2hhZG93LT5jb2xvcigpKSwgYm94U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiB9CiAKIElu
dGVycG9sYXRpb25RdWFsaXR5IFJlbmRlckJveE1vZGVsT2JqZWN0OjpjaG9vc2VJbnRlcnBvbGF0
aW9uUXVhbGl0eShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEltYWdlJiBpbWFnZSwgY29uc3Qg
dm9pZCogbGF5ZXIsIGNvbnN0IExheW91dFNpemUmIHNpemUpCkBAIC0yNDM5LDEwICsyNDM2LDcg
QEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJ
bmZvJiBpbmZvLCBjb25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIEZsb2F0UG9pbnQgc25hcHBl
ZFNoYWRvd09yaWdpbiA9IEZsb2F0UG9pbnQocm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1JlY3RP
cmlnaW4ueCgpLCBkZXZpY2VTY2FsZUZhY3RvciksIHJvdW5kVG9EZXZpY2VQaXhlbChzaGFkb3dS
ZWN0T3JpZ2luLnkoKSwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICAgICAgICAgIEZsb2F0U2l6
ZSBzbmFwcGVkU2hhZG93T2Zmc2V0ID0gc25hcHBlZFNoYWRvd09yaWdpbiAtIHBpeGVsU25hcHBl
ZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgICAgICBpZiAoc2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hh
ZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRT
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgY29u
dGV4dC5zZXRTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dD
b2xvciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVn
YWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgICAgIGlmIChoYXNC
b3JkZXJSYWRpdXMpIHsKICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwg
aXQgaXMgdW5uZWNlc3NhcnkgdG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVz
IHRpbWUKQEAgLTI1NDMsMTEgKzI1MzcsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpw
YWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAg
ICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICAgICAgc2hh
ZG93T2Zmc2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgICAgICBpZiAoc2hhZG93LT5pc1dl
YmtpdEJveFNoYWRvdygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFk
b3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLQorICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0
Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2Rl
OjpEZWZhdWx0KTsKICAgICAgICAgICAgIGNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
cGl4ZWxTbmFwcGVkT3V0ZXJSZWN0LCBwaXhlbFNuYXBwZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKaW5kZXggNDliNzJkMTRjM2JkNjYyNjIxZTc2ZDY3Y2M2NmVlNWEyNWM3
NGRmZS4uMjlhYTE5MDZjYWQyZmU5YjQ4ZmZlMjliNDI4YmYxM2NjNjA1N2M2YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTUxLDYg
KzUxLDcgQEAKICNpbmNsdWRlICJMYXllckFuY2VzdG9yQ2xpcHBpbmdTdGFjay5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNb2RlbC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2VMb2dn
aW5nQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKQEAgLTE3ODksNyArMTc5
MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVFdmVudFJlZ2lvbigpCiAgICAg
fTsKIAogICAgIGF1dG8gdXBkYXRlRXZlbnRSZWdpb25Gb3JMYXllciA9IFsmXShHcmFwaGljc0xh
eWVyJiBncmFwaGljc0xheWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBudWxsQ29udGV4
dChudWxscHRyKTsKKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4dCBudWxsQ29udGV4dChOdWxs
R3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOwogICAgICAg
ICBFdmVudFJlZ2lvbiBldmVudFJlZ2lvbjsKICNpZiBFTkFCTEUoRURJVEFCTEVfUkVHSU9OKQog
ICAgICAgICBpZiAocmVuZGVyZXIoKS5wYWdlKCkuc2hvdWxkQnVpbGRFZGl0YWJsZVJlZ2lvbigp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFw
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fp
cm8uY3BwCmluZGV4IDljZWE1ZmEzNGM0YTZjMDg3ZmRlMjhjMjUyYTMxZjE1NThkZTYxZmYuLjE2
MTc3YzAwMDcxZWU4MjZlODA5NmYzZWRmOWI4MmJiOGM4NTBmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEltYWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9DYWlyb09wZXJhdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVz
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQu
aD4KIApAQCAtNjAsNyArNjAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gaW1hZ2UgPSBjcmVhdGVDYWlyb1N1cmZhY2UoKTsKICAgICBSZWZQdHI8
Y2Fpcm9fdD4gYml0bWFwQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShpbWFnZS5nZXQo
KSkpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGJpdG1hcENvbnRleHQuZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4oYml0bWFwQ29udGV4dC5nZXQo
KSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNw
cCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcAppbmRleCAz
NmRjMjRiODJmZGVlYzE1NTUxMDQ3Njk5NGU4N2RiMWQ3NjYyZGE3Li4xZDA2ZjQ2YzJmMzQ2Yjkx
YzQ4MTcyYTEyNmU3Njk5ZjllYjQxNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2cv
U2hhcmVhYmxlQml0bWFwQ0cuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQo
KQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShiaXRtYXBDb250ZXh0LmdldCgpLCAwLCBtX3Np
emUuaGVpZ2h0KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCks
IDEsIC0xKTsKIAotICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oYml0bWFw
Q29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q0c+
KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZGVzdGlu
YXRpb24sIGNvbnN0IEludFJlY3QmIHNvdXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCmluZGV4IDA4ZjZmYjUyYzgwYzM3
Y2VkZDE2ZmUwNzAyYTU0YmJiNTg4ZDdlZjMuLmNkMTU4ZjBjYjY0NzZiZDI0OGY5N2MwMDY5NjU5
YjRmMWJmNjRlMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFi
bGVCaXRtYXBEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJl
YWJsZUJpdG1hcERpcmVjdDJELmNwcApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvRElCUGl4ZWxEYXRhLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRE9wZXJhdGlvbnMu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KICNpbmNs
dWRlIDxkMmQxXzEuaD4KQEAgLTEwNCw3ICsxMDQsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpCiAgICAg
aWYgKCFzdXJmYWNlQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6Y3JlYXRlRmFjdG9yeShzdXJmYWNlQ29udGV4dC5nZXQoKSkpOworICAgIHJldHVybiBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihzdXJmYWNlQ29udGV4dC5nZXQoKSk7CiB9
CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFBvaW50JiBkc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApp
bmRleCBkYzBhNzBiODgyNGFmZGM3ZWMzZGQxZjY5ZjRkOWI1MTk0MjkyNGY2Li40Zjc4YjVlYjVj
ZGI1MWYyZWJmY2FmZjY0ZWNkMTliMWU2MzBhZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CYWNraW5nU3Rv
cmVCYWNrZW5kQ2Fpcm9JbXBsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllcy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAj
aW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBCYWNraW5nU3RvcmU6Omlu
Y29ycG9yYXRlVXBkYXRlKFNoYXJlYWJsZUJpdG1hcCogYml0bWFwLCBjb25zdCBVcGRhdGVJbmZv
JgogICAgIC8vIFBhaW50IGFsbCB1cGRhdGUgcmVjdHMuCiAgICAgSW50UG9pbnQgdXBkYXRlUmVj
dExvY2F0aW9uID0gdXBkYXRlSW5mby51cGRhdGVSZWN0Qm91bmRzLmxvY2F0aW9uKCk7CiAgICAg
UmVmUHRyPGNhaXJvX3Q+IGNhaXJvQ29udGV4dCA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2Jh
Y2tlbmQtPnN1cmZhY2UoKSkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQo
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvQ29udGV4dC5nZXQo
KSkpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdyYXBoaWNzQ29udGV4dChjYWlyb0NvbnRl
eHQuZ2V0KCkpOwogCiAgICAgLy8gV2hlbiBtX3dlYlBhZ2VQcm94eS5kcmF3c0JhY2tncm91bmQo
KSBpcyBmYWxzZSwgYml0bWFwIGNvbnRhaW5zIHRyYW5zcGFyZW50IHBhcnRzIGFzIGEgYmFja2dy
b3VuZCBvZiB0aGUgd2VicGFnZS4KICAgICAvLyBGb3Igc3VjaCBjYXNlLCBiaXRtYXAgbXVzdCBi
ZSBkcmF3biB1c2luZyBDb21wb3NpdGVPcGVyYXRvcjo6Q29weSB0byBvdmVyd3JpdGUgdGhlIGV4
aXN0aW5nIHN1cmZhY2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMv
V0tQcmludGluZ1ZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGlu
Z1ZpZXcubW0KaW5kZXggZjE4YmE4ZjAxYjI2ZGUzZmQzY2RmYjAyODEyODVjZjBkNGE2NjY5Zi4u
ZDAzZTY0MzRiMWFiMmZiZDVlNTU0MzI5NjhiM2U5ZjU2NTkyYmFjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQpAQCAtMzAsMTUgKzMwLDE2IEBA
CiAKICNpbXBvcnQgIkFQSURhdGEuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKLSNpbXBvcnQgIlBE
RktpdFNvZnRMaW5rLmgiCiAjaW1wb3J0ICJQcmludEluZm8uaCIKICNpbXBvcnQgIlNoYXJlYWJs
ZUJpdG1hcC5oIgogI2ltcG9ydCAiV2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0IDxRdWFydHovUXVh
cnR6Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2NhbERlZmF1bHRT
eXN0ZW1BcHBlYXJhbmNlLmg+CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogCisjaW1wb3J0ICJQ
REZLaXRTb2Z0TGluay5oIgorCiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsVG9wUHJp
bnRpbmdNYXJnaW5LZXkgPSBAIldlYktpdE9yaWdpbmFsVG9wTWFyZ2luIjsKIE5TU3RyaW5nICog
Y29uc3QgV2ViS2l0T3JpZ2luYWxCb3R0b21QcmludGluZ01hcmdpbktleSA9IEAiV2ViS2l0T3Jp
Z2luYWxCb3R0b21NYXJnaW4iOwogCkBAIC01NTUsNyArNTU2LDcgQEAgLSAodm9pZClfZHJhd1By
ZXZpZXc6KE5TUmVjdCluc1JlY3QKIAogICAgIFJlZlB0cjxXZWJLaXQ6OlNoYXJlYWJsZUJpdG1h
cD4gYml0bWFwID0gcGFnZVByZXZpZXdJdGVyYXRvci0+dmFsdWU7CiAKLSAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBDR0NvbnRleHRdKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtb
TlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOwogICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIAogICAg
IGJpdG1hcC0+cGFpbnQoY29udGV4dCwgX3dlYkZyYW1lLT5wYWdlKCktPmRldmljZVNjYWxlRmFj
dG9yKCksIFdlYkNvcmU6OkludFBvaW50KG5zUmVjdC5vcmlnaW4pLCBiaXRtYXAtPmJvdW5kcygp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVE
aXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGly
ZWN0MkQuY3BwCmluZGV4IGFiZGFhNmViMmM1N2RlM2VlNjZjMmMzZmYxNjRhMzM0YjEyNDE1ZDku
LjkwYjQyNGFjZTI5ODM3ZDA1Yjk3MDZkMDA0ODVkOTVmN2UxZTJkMGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQmFja2luZ1N0b3JlQmFja2VuZERpcmVj
dDJESW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KICNpbmNs
dWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8ZDNkMTFfMS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKaW5kZXggM2NhY2I5YWVj
NjRjODlhNTEyMDg3MDAwZDI2YTU3ZTA2ZTE4MWUzNC4uZTRjMTFmM2ViMDg2MjlmNjEzZDMxYjg0
NzM5OTMzZTI5MjMxYjFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2lu
L1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93
aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAi
V2ViVmlldy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvR0RJVXRpbGl0aWVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRX
aW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1Nb3VzZUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXJUaGVtZS5oPgpA
QCAtODUyLDcgKzg1Myw3IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAgIDo6U2VsZWN0T2JqZWN0KG1f
REMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChtX0RDLmdl
dCgpKTsKICNlbHNlCiAgICAgQ09NUHRyPElEM0QxMVRleHR1cmUyRD4gYmFja0J1ZmZlcjsgCiAg
ICAgSFJFU1VMVCBociA9IG1fc3dhcENoYWluLT5HZXRCdWZmZXIoMCwgX191dWlkb2YoSUQzRDEx
VGV4dHVyZTJEKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZiYWNrQnVmZmVyKSk7IApAQCAt
ODY3LDcgKzg2OCw3IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnBhaW50KGNvbnN0IElu
dFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCBwbGF0Zm9ybUNvbnRleHQocmVuZGVyVGFyZ2V0LmdldCgpKTsKICAgICBwbGF0Zm9ybUNvbnRl
eHQuc2V0RDNERGV2aWNlKG1fZDNkRGV2aWNlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0
KCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7CiAjZW5kaWYKIAogICAgIEludFJlY3QgdHJhbnNsYXRlZERhbWFn
ZVJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggMDRhNDBkZjAyZTQ3NDQ4ZjViOThjODlkZjQ4NWI3
MDZmMGJlMDM3Yy4uZTQ3YTQ0Y2M0N2U5OTFkZWU5OGY5YjRhMzZjNWEyY2RmNmYwZDA2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
CkBAIC0zNSw3ICszNSw2IEBACiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQREZBbm5v
dGF0aW9uVGV4dFdpZGdldERldGFpbHMuaCIKICNpbXBvcnQgIlBERkNvbnRleHRNZW51LmgiCi0j
aW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUERGTGF5ZXJDb250cm9sbGVyU1BJ
LmgiCiAjaW1wb3J0ICJQREZQbHVnaW5Bbm5vdGF0aW9uLmgiCiAjaW1wb3J0ICJQREZQbHVnaW5Q
YXNzd29yZEZpZWxkLmgiCkBAIC03Miw3ICs3MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lVmlldy5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEJvZHlF
bGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxGb3JtRWxlbWVudC5oPgpAQCAtMTA2LDYgKzEwNSw4IEBACiAjaW1wb3J0IDx3dGYv
Y29jb2EvVmVjdG9yQ29jb2EuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAor
I2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogI2lmIEhBVkUoSU5DUkVNRU5UQUxfUERGX0FQ
SVMpCiBAaW50ZXJmYWNlIFBERkRvY3VtZW50ICgpCiAtKGluc3RhbmNldHlwZSlpbml0V2l0aFBy
b3ZpZGVyOihDR0RhdGFQcm92aWRlclJlZilkYXRhUHJvdmlkZXI7CkBAIC0xOTQ0LDcgKzE5NDUs
NyBAQCB2b2lkIFBERlBsdWdpbjo6cGFpbnRDb250cm9sRm9yTGF5ZXJJbkNvbnRleHQoQ0FMYXll
ciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZQogICAgIExvY2FsRGVmYXVsdFN5c3RlbUFwcGVh
cmFuY2UgbG9jYWxBcHBlYXJhbmNlKHBhZ2UtPnVzZURhcmtBcHBlYXJhbmNlKCkpOwogI2VuZGlm
CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdy
YXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAogICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDE2
MjUzYzg4NzA3MzA3NzgwMDBkODUzZDRkZGZkMzIyNzlkODE4OWUuLmY3YmRiOTU3MDRkYzQ1NjAy
MzU5MjYzODFkZjYwNGYwMjgwZDAxMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTQyLDYgKzQyLDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvRXZlbnROYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Gb2N1c0Nv
bnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVWaWV3Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTE9MaXN0RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9IVE1MVUxpc3RFbGVtZW50Lmg+CkBAIC0zMTcsNyArMzE4LDcgQEAgUmV0YWluUHRyPENGRGF0
YVJlZj4gV2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUoSW50UmVjdCByZWN0LCBJbnRTaXplIGJp
dG1hcFNpemUKIAogICAgICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UocGRmQ29udGV4dC5nZXQo
KSwgZGljdGlvbmFyeSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhp
Y3NDb250ZXh0IHsgcGRmQ29udGV4dC5nZXQoKSB9OwogICAgICAgICBncmFwaGljc0NvbnRleHQu
c2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSgwLCAt
Yml0bWFwU2l6ZS5oZWlnaHQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdy
YXBoaWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVk
R3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcAppbmRleCA4NzE2ZGY0
OWJkMTkyZDAxMDUxMTZiNmJkYjBhYjY5NjMxODc3YmI4Li5lOTk0NTdjNzQyMzIxYjUzZTFmNmVh
NWRjOTBkZGVhODY1MjNlYjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCkBAIC00Myw3ICs0Myw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogCiAjaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxkMmQxLmg+CiAjaW5jbHVkZSA8
ZDNkMTFfMS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAppbmRleCAwYTc2ZTcyOWZlMDM3YjUxYTczNWE2ZDI3N2U2YTYzNTE3NDFjNWMzLi4wMDlmZTg5
MDk2NTcwZmM3MzU2MDI0N2E0MjBmNTQ0NmE4N2Q5NzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMzcyLDYgKzM3MiwxMSBAQAogI2luY2x1
ZGUgIldlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlc0lPUy5oIgogI2VuZGlmCiAKKyNpZiBVU0Uo
Q0cpCisvLyBCdXQgcmVhbGx5IHByb2JhYmx5IHdlIHNob3VsZCBtb3ZlIHRoZSBDRy1zcGVjaWZp
YyBQREYgcGFpbnRpbmcgY29kZSBvdXQgb2YgV2ViUGFnZS5jcHAuCisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTM3NSw3ICs1
MzgwLDcgQEAgdm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkltcGwoRnJhbWVJZGVudGlmaWVy
IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnQKICAgICAgICAgICAgICAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwYWdlSW5mbyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
TXV0YWJsZSgwLCAwLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiAgICAgICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVn
aW5QYWdlKGNvbnRleHQuZ2V0KCksIHBhZ2VJbmZvLmdldCgpKTsKIAotICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBjdHgoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgY3R4KGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN0eC5z
Y2FsZShGbG9hdFNpemUoMSwgLTEpKTsKICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAs
IC1tX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSkuaGVpZ2h0KCkpOwogICAgICAgICAgICAg
ICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoY3R4LCBwYWdlLCBtX3ByaW50Q29udGV4dC0+
cGFnZVJlY3QocGFnZSkud2lkdGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCBk
ZTFmMDZkZDhhZGE4ZmRmZmM1YTA5ODczOWM0YWVhYjliYjMzYTg1Li4zOTliMWU4MGEzZDg0ZDFk
MGQzMDA5NmFjNDQ2NTBhYzk4ZjU4MTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKQEAg
LTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgV2Vi
UHJpbnRPcGVyYXRpb25HdGs6OnJlbmRlclBhZ2UoaW50IHBhZ2VOdW1iZXIpCiAgICAgcHJlcGFy
ZUNvbnRleHRUb0RyYXcoKTsKIAogICAgIGRvdWJsZSBwYWdlV2lkdGggPSBndGtfcGFnZV9zZXR1
cF9nZXRfcGFnZV93aWR0aChtX3BhZ2VTZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCkgKiBtX3hE
UEk7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9jYWlyb0NvbnRleHQu
Z2V0KCkpKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRl
eHQobV9jYWlyb0NvbnRleHQuZ2V0KCkpOwogICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2Uo
Z3JhcGhpY3NDb250ZXh0LCBwYWdlTnVtYmVyLCBwYWdlV2lkdGggLyBtX3NjYWxlKTsKIAogICAg
IGNhaXJvX3Jlc3RvcmUobV9jYWlyb0NvbnRleHQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU0MWM0YzA0ZjJk
NzVkMDZiZWUwODBlYmNmZTY2YjBhNDVmYmVmNi4uOTI4YWU3ZDUxZTNmMGI3ZDkxMDIwYzdkYTI4
OGVkZTI0NWMzODU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tCkBAIC0zOSw3ICszOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9HbHlwaFBhZ2UuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9N
V2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BhZ2VDb25zb2xlQ2xpZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1ByaW50Q29udGV4dC5oPgpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKHZvaWQpcHJp
bnRUb0NHQ29udGV4dDooQ0dDb250ZXh0UmVmKWNnQ29udGV4dCBwYWdlV2lkdGg6KGZsb2F0KXBh
Z2VXaWR0aEluUGl4CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY2dDb250ZXh0KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY2dDb250ZXh0KTsKICAgICBQcmludENvbnRleHQ6
OnNwb29sQWxsUGFnZXNXaXRoQm91bmRhcmllcygqY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQs
IEZsb2F0U2l6ZShwYWdlV2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdF
eHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0
cmFzLm1tCmluZGV4IDJiYTAwNmRkM2U3YjJhZmM1MGVmZjI4NDUzMjBkOTY1MDViYTcxYmEuLjc4
MzI1NjE5YzFhYzc3NDRlODhmZDQ5MjUzNmM5NTdhMDQyNDRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQpAQCAtMzAs
NyArMzAsNyBAQAogCiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0ZvbnRDYXNjYWRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9M
b2FkZXJOU1VSTEV4dHJhcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAjaW1wb3J0
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtNzgsNyArNzgsNyBAQCAtICh2b2lk
KV93ZWJfZHJhd0F0UG9pbnQ6KE5TUG9pbnQpcG9pbnQgZm9udDooTlNGb250ICopZm9udCB0ZXh0
Q29sb3I6KE5TQ29sb3IgKgogCiAgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQg
PSBbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdOwogICAgICAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gW25zQ29udGV4dCBDR0NvbnRleHRdOwotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0IHsgY2dDb250ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IGNnQ29udGV4dCB9OwogCiAgICAgICAgIC8vIFdlYkNv
cmUgcmVxdWlyZXMgYSBmbGlwcGVkIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGJvb2wgZmxp
cHBlZCA9IFtuc0NvbnRleHQgaXNGbGlwcGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQppbmRl
eCBkMzk3M2UyOTQ0NTllY2YxZGJkZWY0NDllZjJjZmQyY2FjYjhlZDM1Li45NTBhZThlMDBkMzBh
NDUyMDlmOWFkZGEzYzJiMzNmMTMxMDAyMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0ICJXZWJOb2RlSGlnaGxpZ2h0Vmlldy5oIgogI2ltcG9y
dCAiV2ViTm9kZUhpZ2hsaWdodC5oIgogCi0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgog
CkBAIC05OCw3ICs5OCw3IEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAKICAgICAg
ICAgQVNTRVJUKFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0p
OwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBj
b250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOwog
ICAgICAgICBbX3dlYk5vZGVIaWdobGlnaHQgaW5zcGVjdG9yQ29udHJvbGxlcl0tPmRyYXdIaWdo
bGlnaHQoY29udGV4dCk7CiAgICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhp
Y3NTdGF0ZV07CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KaW5kZXggZjM1ZDdiZDVhMjM1MWIyYjAxYjY4YmIxZTIxNmY3NDU3ZTQxOGE3MS4uOTVi
ZGEzOTBjYTY5YmE2Yjk2MjBmNTFiZWU2OTZiMjEyMzlhYjE0ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC04MSw3ICs4MSw3IEBACiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Zy
YW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5o
PgpAQCAtNjEzLDcgKzYxMyw3IEBAIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250
ZW50c09ubHk6KEJPT0wpY29udGVudHNPbmx5CiAjZWxzZQogICAgIENHQ29udGV4dFJlZiBjdHgg
PSBXS0dldEN1cnJlbnRHcmFwaGljc0NvbnRleHQoKTsKICNlbmRpZgotICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KGN0eCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChjdHgpOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXZWJDb3Jl
OjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAppbmRleCA1MTlhNTczNmQyYTM1
MGQ3Mjc4Njc2NWZiMThmY2YzMzljNWVjNjhlLi5hZDY2MDdlNDUxMGU1OWY1MThmZWVmMWQ4Y2M2
MzY1NmE4NGVkNDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvRm9udENhc2NhZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRTZWxlY3Rvci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFJ1bi5oPgpAQCAtNDkw
LDcgKzQ5MSw3IEBAIHZvaWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZHJhdygpCiAgICAg
YXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmRE
QyhtX2h1ZFdpbmRvdykpKTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IFNlbGVjdE9iamVjdChi
aXRtYXBEQy5nZXQoKSwgbV9iaXRtYXAuZ2V0KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNv
bnRleHQoYml0bWFwREMuZ2V0KCksIHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250
ZXh0KGJpdG1hcERDLmdldCgpLCB0cnVlKTsKIAogICAgIGNvbnRleHQuc2F2ZSgpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXggMmY1MTEwMzEzNjE5NDU3Y2RhYzNiMzFj
YTViZDUzNzZhYmNiMjE3Ny4uOGRhOTE5NDgzYjBkYWE3MTBkNjIzNjJlOWIzYTA0NjlkNTAyYmRj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcApAQCAtNzQsNiArNzQsNyBAQAog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dESU9iamVj
dENvdW50ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgpAQCAtMzIxLDcg
KzMyMiw3IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KFJF
Q1QgcmVjdCwgX0luXyBIREMgZGV2aWNlQ29udGV4dCkKICAgICAvLyBXZSBjYW4ndCBwYWludCB3
aXRoIGEgbGF5b3V0IHN0aWxsIHBlbmRpbmcuCiAgICAgdmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5
bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGRldmljZUNv
bnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhkZXZpY2VDb250ZXh0KTsKICAgICBn
Yy5zZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogICAgIGdjLnNhdmUoKTsKICAg
ICBMT05HIHdpZHRoID0gcmVjdC5yaWdodCAtIHJlY3QubGVmdDsKQEAgLTM1Miw3ICszNTMsNyBA
QCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludFNjcm9sbFZpZXdSZWN0VG9Db250ZXh0QXRQb2ludChS
RUNUIHJlY3QsIFBPSU5UIHB0LCBfSW5fCiAgICAgLy8gV2UgY2FuJ3QgcGFpbnQgd2l0aCBhIGxh
eW91dCBzdGlsbCBwZW5kaW5nLgogICAgIHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhkZXZpY2VDb250ZXh0KTsK
KyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoZGV2aWNlQ29udGV4dCk7CiAgICAgZ2Muc2V0U2hv
dWxkSW5jbHVkZUNoaWxkV2luZG93cyh0cnVlKTsKICAgICBnYy5zYXZlKCk7CiAgICAgSW50UmVj
dCBkaXJ0eVJlY3QocmVjdCk7CkBAIC0xODA4LDcgKzE4MDksNyBAQCBIUkVTVUxUIFdlYkZyYW1l
OjpzcG9vbFBhZ2VzKEhEQyBwcmludERDLCBVSU5UIHN0YXJ0UGFnZSwgVUlOVCBlbmRQYWdlLCB2
b2lkKiBjdAogICAgIGZsb2F0IGhlYWRlckhlaWdodCA9IDAsIGZvb3RlckhlaWdodCA9IDA7CiAg
ICAgaGVhZGVyQW5kRm9vdGVySGVpZ2h0cygmaGVhZGVySGVpZ2h0LCAmZm9vdGVySGVpZ2h0KTsK
ICNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykKLSAgICBHcmFwaGljc0NvbnRleHQgc3Bvb2xDdHgo
cGN0eCk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIHNwb29sQ3R4KHBjdHgpOwogICAgIHNwb29s
Q3R4LnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAKICAgICBmb3IgKFVJTlQg
aWkgPSBzdGFydFBhZ2U7IGlpIDwgZW5kUGFnZTsgaWkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKaW5kZXggMDdhMmY2MDRmMzk3YTJhNThiMmQ3NzUx
YzQ0ZWE5MjE5NDMxODczMC4uNDhlOWQxYThkNzY2NzI1YjU3OWMzNDExYzNlY2Q0NWI2ZGJmNGNm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5j
cHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSFduZERDLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+CkBAIC0xNTcsNyArMTU4LDcgQEAgdm9pZCBXZWJOb2Rl
SGlnaGxpZ2h0Ojp1cGRhdGUoKQogCiAgICAgOjpTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1w
LmdldCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGhkYy5nZXQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQoaGRjLmdldCgpKTsKICAgICBjb250ZXh0LnNjYWxl
KG1faW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBt
X2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdo
bGlnaHQoY29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYzEx
YWM5ZDk3ZGJhZmUyYTNmMjg0NzdjY2UwNDQxZDliOTc3MDM2MC4uN2UxN2Y3MWQxNDJjMTZkYTUz
ZmU3MjY2ZjQ0Yzg4OWNkNDM4MmUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAK
QEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25Db250cm9s
bGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkVycm9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KQEAg
LTEyNTAsNyArMTI1MSw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRXaXRoRGlyZWN0MkQoKQogCiAg
ICAgUkVDVCBjbGllbnRSZWN0ID0ge307CiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxh
dGZvcm1Db250ZXh0KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQg
Z2MoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250
ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoJnBsYXRmb3Jt
Q29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKIAogICAgIHsKICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3MoV0VCS0lU
X0RSQVdJTkcsIF9fTElORV9fKTsKQEAgLTE0MDcsNyArMTQwOCw3IEBAIHZvaWQgV2ViVmlldzo6
cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBIREMgYml0bWFwREMs
IGNvbnN0IEluCiAgICAgbV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwogI2Vu
ZGlmCiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoYml0bWFwREMsIG1fdHJhbnNwYXJlbnQpOwor
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAg
Z2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh3aW5kb3dzVG9QYWludCA9PSBQYWludFdl
YlZpZXdBbmRDaGlsZHJlbik7CiAgICAgZ2Muc2F2ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA1
MDY5OGIwYmFmZGJlMDI4NzViMzM3ODg3NGY5NGJkZjdhZDNmOGYuLjg3OTUyOTYwYmE4OTQ4MGUy
YWI5ZTJkMTJiZDBjMjFjZjczOTI0N2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdyYXBo
aWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIxLTA1LTI0ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252ZXJ0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcgYSBwbGF0Zm9ybSBjb2xvciBz
cGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRjLikKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHND
Ry5jcHAKaW5kZXggODdhMzZhY2ZlNmExMDBjYzMyM2UyNDg5N2ZjZTM4MDNmMjM0YTc3OC4uYTU5
OGQ1NGEyNzUyOTU4YzQyZTRlMmI3OWU1MzM3YzU3YjE3NGI0NiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHND
Ry5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRl
bXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0dyYWRpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRD
Ry5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKQEAgLTQ5LDcgKzUwLDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBSZXBsYXlXaXRoTWlz
c2luZ1Jlc291cmNlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNw
YWNlOjpTUkdCKCk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250
ZXh0V2lkdGgsIGNvbG9yU3BhY2UucGxhdGZvcm1Db2xvclNwYWNlKCksIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250
ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5n
ZXQoKSB9OwogCiAgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBSZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAKQEAgLTExMyw3ICsxMTQsNyBAQCBURVNUKERp
c3BsYXlMaXN0VGVzdHMsIE91dE9mTGluZUl0ZW1EZWNvZGluZ0ZhaWx1cmUpCiAKICAgICBhdXRv
IGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9y
U3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250
ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAg
RGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0OwogICAgIFdyaXRpbmdDbGllbnQgd3JpdGVyOwpAQCAt
MTQ0LDcgKzE0NSw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgSW5saW5lSXRlbVZhbGlkYXRp
b25GYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VD
cmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250
ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7
IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0Nv
bnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gcnVuVGVzdFdpdGhJbnZhbGlkSWRlbnRpZmllciA9
IFsmXShGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgewogICAgICAgICBFWFBFQ1RfRkFMU0Uo
aWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>
<flag name="commit-queue"
          id="450876"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429638</attachid>
            <date>2021-05-25 01:40:22 -0700</date>
            <delta_ts>2021-05-25 02:48:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525014021.patch</filename>
            <type>text/plain</type>
            <size>385299</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjYwMjgxYTI3ZjExNmI3M2FmYjgzMWMxZDRiMDUyYjQ4
NTQ4OWZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNo
aWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8g
cmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBE
ZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgog
I2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSBy
ZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVt
RmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCog
ZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZh
Y3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBi
ZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3Qg
Q29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2
b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMg
dm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGlt
cGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0
cm95KCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBi
b29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
dm9pZCBwbGF0Zm9ybUluaXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhh
c0FscGhhID0gZmFsc2UpOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lk
IHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZp
bGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlh
bGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNo
YWRvdygpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0
UmVjdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZv
cm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0
IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3Ju
ZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBA
IHByaXZhdGU6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wg
aXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dEltcGw+IG1faW1wbDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisK
K3ByaXZhdGU6CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwog
Ci0gICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQg
bV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZCB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9Owog
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5
ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjJmZmI0NTQ1YWUyMzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRl
eHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9
IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIy
YjBhNjYyMDg1Li4xMzgwZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4
LDkgQEAgSW1hZ2VEcmF3UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVo
YXZpb3IgZGlmZmVyZW5jZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2lu
ZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0
LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAg
aWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0
UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYx
N2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZk
ZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwog
CkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAg
IHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2
YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRy
b2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGlj
c0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5n
UGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0
aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29s
IGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5k
aWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwg
T3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0K
KworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0g
V1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKwor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0p
IGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVy
biBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykK
KyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6
CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1
M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyAr
MTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVy
cyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAor
ICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNh
bnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2Mx
Li4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAg
IAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7
CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJl
Y29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
aW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERp
c3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4
YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRm
MzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShX
VEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250
ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4
dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3
YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJl
NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4
dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJv
bSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNt
YWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENv
dW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFj
a2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFp
bnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91
bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4
IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2Rj
ZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3du
ZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2Ug
aXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJv
dW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uZTQyM2Y1Y2RmNDdk
NjRjY2M0YWEwY2M5NDBlMDg2M2Y3NWIxNzE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5o
IgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9P
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNjIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3By
aXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRl
eHQuY3IoKSk7Cit9CiAKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0
KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorICAgIDogbV9vd25lZFBsYXRmb3Jt
Q29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWlyb0NvbnRleHQpKQor
ICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCisgICAgLCBt
X3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxh
dGZvcm1Db250ZXh0KSkKK3sKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRl
eHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dCht
X3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8o
UGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29u
dGV4dENhaXJvKCpwbGF0Zm9ybUNvbnRleHQpCiB7Ci0gICAgaWYgKG1fZGF0YSkgewotICAgICAg
ICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxw
dHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgIH0KIH0KIAotQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUp
IGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdyYXBoaWNzQ29udGV4dENhaXJvKCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShu
dWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdl
dENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorewogICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1Q
bGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2lt
cGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRl
eHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNh
dmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJl
c3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFu
Z2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChy
ZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNT
RVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3Is
IHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0
aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250ZXh0KCks
IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsg
b3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRv
IGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZSgqcGxhdGZvcm1D
b250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tl
Q29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0K
IAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVz
IHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZp
bGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0
cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29u
dGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworfQogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBh
dXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZp
bGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOworICAgIENh
aXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Cisg
ICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2
aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4
dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KIAotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBDYWlybzo6Y2xpcCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAK
LUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBs
KQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3Vu
ZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0
LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Cit9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogI2lmIFBM
QVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1
cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICNpZiBQTEFURk9STShXUEUpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3Rz
LCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgd2lkdGgs
IGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJl
Y3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91
YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9r
ZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjp0cmFuc2xhdGUoKnBs
YXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBj
YW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBz
ZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBh
bmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFj
dHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
dHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9h
dCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqcGxhdGZv
cm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNl
dCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0
ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAg
ICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VT
dHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
c3Ryb2tlU3R5bGUpOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFs
aWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJl
Y3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCwgY29uc3QgQ29sb3ImKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0g
ICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAvLyBXZSBmbGlwIHRoZSBo
ZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAg
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVp
Z2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwog
ICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3Bh
Y2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5j
eUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGVh
clJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VS
ZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGxpbmVX
aWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW5lQ2FwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFz
aE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVK
b2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihs
aW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCks
IGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFy
dCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCkKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRN
b2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6
Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpy
b3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRl
KHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFk
aWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwT3V0
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3Qo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKKyAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVy
bihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKKyAgICBDYWly
bzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK1JlbmRlcmluZ01vZGUg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLX0KKyAgICBp
ZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlw
aHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAg
ICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9Owor
ICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOworICAgICAgICAgICAg
eU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZv
cm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFs
aWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86
OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBo
cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAg
IGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2JlMDE1NjEyZTQ4MzkyZDJmOTk4NWY4NTRlNWZj
Njg2ZWZiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtMCwwICsxLDEyMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKKworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9y
bUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3JtQ29udGV4
dENhaXJvKik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCopOworCisjaWYgUExB
VEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKEhEQywgYm9vbCBoYXNBbHBoYSA9
IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCisjZW5kaWYKKworICAgIHZpcnR1YWwg
fkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5l
Sm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9h
dCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAg
ICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQp
IGZpbmFsOworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwor
CisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dENhaXJvPiBtX293bmVkUGxhdGZv
cm1Db250ZXh0OworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4MTdiZmQ0ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0K
LSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRl
ICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
cmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0g
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0g
ICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybz4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAg
W2NhaXJvQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRl
eHQsIGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0Nv
bnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5z
eW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNv
bnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1D
b250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9v
d25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxh
dGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsK
LSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQot
Ci1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86On5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0
cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWly
byogR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewot
ICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVh
bmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAg
YXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0
ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09m
ZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hv
dWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJTaGFkb3coKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXAp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExp
bmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4p
Ci17Ci0gICAgQ2Fpcm86OnNldExpbmVKb2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRl
eHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6
cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRm
b3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hh
ZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQot
ICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAg
IENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBw
cmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImKQotewotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRk
RWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwotICAgIENhaXJvOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lk
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJv
OjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7
Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFy
UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZykKLXsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVj
dG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAgICAg
ICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlw
aHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRG
b250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICgh
Zm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwK
LSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5
bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50
ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAgZm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXco
Z3JhcGhpY3NDb250ZXh0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3Jt
SW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9Q
QVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQs
IGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3
RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3Vz
UmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSgpCi17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0
Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9y
ZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
Ci17Ci0gICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWly
bzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omdl
dENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQot
ewotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1D
b250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlw
Qm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFn
ZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJv
OjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17
Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThk
YmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZjZjJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAq
IENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBj
YWlyb190OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENh
aXJvOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQ
bGF0Zm9ybUNvbnRleHRDYWlybyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9f
dCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBs
YXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBo
aWNzQ29udGV4dCYsIGNhaXJvX3QqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8oKTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNh
cCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVy
cmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5
ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4
dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGQzN2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYz
MzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3NTJlNzk1MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNp
bmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUw
NzYyNzVmNTIzZmE4MDcxZWEuLjliNWMwYWQwNzQ0NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQy
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25z
dCBQYXJhbWV0ZXJzJgogCiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNy
LmdldCgpKTsKLSAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7
CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0
Zm9ybUNvbnRleHQpOwogfQogCiBHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJm
MDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFmLi4yYTE5ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4
NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BhdGhDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1Vu
aXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3
ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRo
LmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7
CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihnYyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUw
LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAg
IHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcxYjhlMWM5MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZk
YjFhZTA2NTc0YmRmODE1YzYxNjcwZTA2Y2I2NzdhMDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4dFNldEZpbGxD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0
LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7Ci19Ci0KIGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBn
ZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIHJldHVybiBDR0Fm
ZmluZVRyYW5zZm9ybUNvbmNhdChDR0NvbnRleHRHZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJh
bnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldEJhc2VDVE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGlj
IEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVy
cG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCitzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29y
ZUludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsK
ICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKICAgICBjYXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0
OgpAQCAtODIsNiArNzcsMzQgQEAgc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4g
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ7CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRp
b25RdWFsaXR5IGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVh
bGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpEZWZhdWx0OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7
CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAg
ICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25lOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Mb3c7CisgICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJw
b2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAg
ICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJ
bnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKworc3RhdGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4
dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxs
ID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tl
ID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwg
JiYgc3Ryb2tlKQorICAgICAgICByZXR1cm4ga0NHVGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZp
bGwpCisgICAgICAgIHJldHVybiBrQ0dUZXh0RmlsbDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9r
ZTsKK30KKwogc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3
aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xNTYsMzUgKzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1v
ZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTQogICAgIHJldHVybiBrQ0dCbGVuZE1vZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNz
Q29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewog
ICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBs
YXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRo
aWNrbmVzcygpKTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252
ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJl
Y2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9uIHRoZSBHcmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBp
dCBkb2Vzbid0IG1hdHRlcj8KKyAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yKCkpOworICAgIHNl
dFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJv
a2VUaGlja25lc3MoKSk7CisgICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAg
ICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBH
cmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
IXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwog
ICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2
ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAv
LyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVt
ZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBv
ZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBs
YXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVz
dG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAK
ICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3Mg
aW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8g
cmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsyMzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRp
dmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNp
ZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwog
CiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwog
ICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxh
dGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3Jp
ZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0
UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8K
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQpOwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUp
OworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9s
ZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFt
IDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8
ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sg
IiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8
ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8
IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQog
CiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJl
ZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2Fs
bGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0Q0coY29udGV4dCkucm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0
KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lk
KiBpbmZvKQpAQCAtMzQ3LDE2ICszNzIsMTggQEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxPbk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRD
RihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZvKSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRl
c3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBk
ZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9y
ZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2Vz
IG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0
IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4
LDE5ICs0NzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkg
dXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5l
KHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRo
aWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAo
cG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIu
eCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSArNTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5h
ZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ry
b2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vy
VG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7
CiAKQEAgLTU2NSwxNiArNTYwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRm
b3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5Rmls
bFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJu
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0g
PSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2
LDE1ICs2MDMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxk
RmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpA
QCAtNjU0LDE2ICs2MzYsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1w
dHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2Vu
ZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBh
dGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAt
Nzk0LDE2ICs3NjYsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxS
ZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgewpAQCAtODMzLDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAg
ICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5
ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAg
ICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENH
Q29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBm
aWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9
ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNh
bnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93
KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZp
bGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xk
RmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xv
cik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAm
JiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093
blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3du
U2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBD
RyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwog
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBhdGggcGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAv
LyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpIGFzc3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVj
dCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9ubHkgY2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJv
dW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVy
YXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkg
JiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3du
U2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkx
MywyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxs
Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCks
IHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBG
SVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRo
ZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9i
bGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2Vs
ZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBh
cmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9w
cm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRp
bmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRD
VE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShw
bGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVk
Q29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRD
bGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKQpAQCAtMTAyMywxNiArOTQyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dS
ZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NjAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+
Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBj
b25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChw
bGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0
Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7CiAKQEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0
KTsKQEAgLTEwODgsMTEgKzk4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYg
eU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBA
IC0xMTAwLDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFS
QU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAo
Y29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQorICAgIGlmIChjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEyMSwyMSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBh
cHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisg
ICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgeworICAgICAgICBDR0NvbnRleHRTZXRT
aGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIAogICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGUgc2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBr
bm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93IG91cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9m
ZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWln
aHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0g
PSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJU
b0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jh
c2VDVE0uYjsKQEAgLTExNTYsNyArMTA1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAg
ICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBv
ciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6
bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAg
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zm
c2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0Nv
bnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQg
Y29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBz
aGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVs
dCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUwICsxMDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1Np
emVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9y
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAg
IENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlj
a25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlz
IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxp
bWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dD
b250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0
ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNv
bnRleHQoKSwgbGltaXQpOwotfQorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4
dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5h
bHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCisgICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5kTW9kZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwg
c3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250
ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOwor
CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4
dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQorICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMs
IHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0Nv
bG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4
dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ry
b2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBD
R0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQorewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIs
MTYgKzExODIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNh
cCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hP
ZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAw
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAtMTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMz
NSw5NCArMTIwOSw0MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgs
IGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRl
eHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNp
emUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xl
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAg
ICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5z
bGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0Jl
SWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5z
Zm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZv
cm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsK
ICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25z
dAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdl
dENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRo
ZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBj
b250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVn
cmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNj
YWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1
NSw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0o
cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJl
Y3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91
bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAg
ICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdp
dGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhhdmUgYQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxp
a2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBjbG9jayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUg
c2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk5LDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01v
CiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAt
IHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAg
ICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAg
ICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUo
d2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsK
QEAgLTE1NTYsMTYgKzEzNTcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0
KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkg
aXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAg
ICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJs
UmVmKQogICAgICAgICByZXR1cm47CkBAIC0xNTc5LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVm
LmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0o
Y29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFT
U0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkg
cXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkg
PSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtD
R0ludGVycG9sYXRpb25Ob25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0g
ICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0g
a0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXll
ckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAg
ICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNMYXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSAr
MTM4MiwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29s
IGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xh
eWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYmIChtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNM
YXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2Nl
bGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVk
Q0dDb250ZXh0OwogICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+
SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4g
bV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0K
LSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRl
eHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAot
ICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAg
ICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwot
ICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ryb2tlKTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAg
ICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwot
ICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2Rl
KGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIHNldENHU3Ryb2tlQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
Q0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25l
c3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAg
ICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZv
cm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRNb2RlKGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1v
ZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRD
R0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGlj
cyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2Nh
bGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJh
c2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1
cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAg
IENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3Jt
U2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxl
RmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRl
eHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0
U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAg
ICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBl
bGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5r
cygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3Mo
KSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3QgcmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwx
NSArMTQ1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0
RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwg
dHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVU
cmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZD
b250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2
ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBkYzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5
MzYyMmNmZDFjMmVjNGYyODllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JN
KFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7
IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0
Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkg
ZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9p
ZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwor
ICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwor
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5h
bDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHZv
aWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpIGZpbmFsOworCisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQm
KSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7
CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lO
RE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Cit9OworCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCA1ZmZjZTEyZmVhMjE5ZjMx
MDBhOGJlYjk2MjMzMDgwODc4Y2E3YmE2Li42ODY1ZjBiZDQxYmI0ODQ2MGRiYTFmNGY2YmE1ODA3
ODRjY2FlZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3
ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oY2dDb250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxw
dHIsIGRhdGEsIG51bUJ5dGVzLCBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkg
ewogICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJi
NGMxMmYwZTgyM2EwODhkMjVmYzE1YWE4ODlhNDI3Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4
Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KQEAgLTI0NCw3ICsyNDQsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
QwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCiAg
ICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwg
cG9pbnQsIGtDR1BhdGhTdHJva2UpOwpAQCAtMzA1LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mIHN0cm9rCiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7
CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBo
aWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCA3NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVk
ZmRhYjIzZGY4MTM0Li4wNWEzOTE2NTQwYmI3NmRhM2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNp
bmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2
b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0Nv
bnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3Qo
MCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBs
YXRmb3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBs
YXRmb3JtSW1hZ2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAw
NjdmY2JhMTkzOWZhZTUxZWRjODc5MmQ0Yy4uZTFlNWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQy
MmZiNTgxY2Y3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQppbmRleCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4
OTY4ODEzYTMwNTQzZjdkLi4zODhhZmNkNmY0NmFmYzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3Rh
dGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQ
YXRoUmVmIGZvY3VzUmluZ1BhdGgKICAgICBkcmF3Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNOdWxsKCkpCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBh
dGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1Q
YXRoKCksIGNvbG9yKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJh
d0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVm
IGZvY3VzUmluZ1BhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitz
dGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250
ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZzZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgp
OwogICAgIHJldHVybiBkcmF3Rm9jdXNSaW5nQXRUaW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6bWF4KCksIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29s
JiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisg
ICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3
ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1FOiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMg
cmluZyBkcmF3aW5nLgotICAgICAgICByZXR1cm47Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxl
UGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVj
dChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1JlY3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lTwogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0
cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVN
dXRhYmxlKCkpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhB
ZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQs
IC1vZmZzZXQpKTsKQEAgLTE5OSwxMSArMTc2LDggQEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JG
b3JNYXJrZXJMaW5lU3R5bGUoRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIK
ICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2Fu
dCB0byBmaW5kIHRoZSBudW1iZXIgb2YgZnVsbCBkb3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBl
cXVhdGlvbnM6CiAgICAgLy8gZG90RGlhbWV0ZXIgPSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRl
ciAvIGRvdEdhcCA9IDEzLjI0NyAvIDkuNDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggNThjNTEyNGQ0YjZjNjEzNjRl
OGQzNjk2ZjM0OTVmZGIyNjQ1OTdhMC4uZTEzOGMzMjAxZGRlNjQ1MDA1Yjg2ZDBhOWY2MWE4ZjQw
Zjc0Njg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQpAQCAtMzcxLDcgKzM3MSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9T
dXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4
dCkKICAgICAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3ND
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
Q0c+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0
SXNBY2NlbGVyYXRlZENvbnRleHQodHJ1ZSk7CiAKICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250
ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXIuaAppbmRleCAyMGRhZWY0YmI0MWY1MDY0ZjNjMWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li5kNzdm
NzQxNmRkNTY1YzNkM2Y5YjQ1NTg4NjMwOGI2YTM5YjVlZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5
cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBV
U0UoQ09SRV9URVhUKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAg
LTU4LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpOwogCi0jaWYgVVNFKENPUkVfVEVYVCkKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAh
UExBVEZPUk0oV0lOKQogICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKICAgICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKICAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMo
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3Jt
KiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291
bnQpOwpAQCAtNjgsNyArNjksOSBAQCBwdWJsaWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0
aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4p
CisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7
CisjZW5kaWYKIAogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwpAQCAtODUsMTMgKzg4LDE3IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwg
ZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CiAKLSNpZiBVU0UoQ09SRV9URVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYm
ICFQTEFURk9STShXSU4pCiAgICAgdm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7CiAjZW5k
aWYKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKLSAgICBHcmFwaGljc0NvbnRleHQgbV9pbnRl
cm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQorICAg
IFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OworI2VuZGlmCisK
ICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBGb250U21v
b3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290
aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcAppbmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzljZTU5OGI1Mjc3MDJjOGFh
MzNkLi5jYWNmNzY0ZjVkZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkxYzg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBDR0Vycm9yIGRy
YXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiByc3RhCiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotR3JhcGhpY3NDb250ZXh0
IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK1VuaXF1ZVJlZjxH
cmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0
KCkKIHsKICAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdh
dGVDcmVhdGUodGhpcykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4
dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0
RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcgKzg1LDcgQEAgR3JhcGhp
Y3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAg
ICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVE
cmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENHQ29udGV4dERlbGVnYXRl
U2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJbWFnZSwgcmVpbnRlcnBy
ZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0ltYWdlKSk7CiAgICAgYXV0
byBjb250ZXh0ID0gYWRvcHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVsZWdhdGUoY29udGV4dERl
bGVnYXRlLmdldCgpLCBrQ0dDb250ZXh0VHlwZVVua25vd24sIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAogRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtMTE5LDM0
ICsxMjAsMzEgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
Y29udGV4dFN0YXRlKQogewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbENvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwogICAgIGVsc2Ug
aWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsUGF0
dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKICAgICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlQ29s
b3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5h
bENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xv
cik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJv
a2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAg
ICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRT
dHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAg
fQogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwor
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CiAKLSAg
ICBtX2ludGVybmFsQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFs
U3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChjb250ZXh0U3RhdGUuc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0TGVnYWN5
U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hh
ZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
Y29sb3IpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOworICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgY29u
dGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5n
TW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBA
IC0zMDIsNyArMzAwLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlw
aHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgcmV0dXJu
OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3NpdGlvbiA9IENHQ29udGV4
dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5h
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi54
KTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpAQCAtMzIxLDcgKzMxOSw3
IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91IHNldCB0aGVzZSB0d28g
ZXF1YWwgdG8gZWFjaCBvdGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3UgZ2V0CiAgICAgLy8gQ1RN
ICogY3VycmVudFRleHRNYXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRyaXgKICAg
ICAvLyBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5hbFRleHRNYXRyaXgpID0g
WAotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRl
eHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9p
bnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtRml4dXA7CiAgICAgaWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXggPSBtX29y
aWdpbmFsVGV4dE1hdHJpeC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZpeHVwID0gY3VycmVudFRl
eHRNYXRyaXggKiBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDU0ZDg1NDcx
MjNmODk0N2Q2ZjJmYWNkN2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3NmZlOTEyZDY4MTAyMDc2
MTAwMWNjMjRmNjg2ODg2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSwgUmVjb3JkZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY29udGV4dChb
Jl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKLSAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0
aWFsQ1RNLCBkZWxlZ2F0ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGlu
aXRpYWxDVE0sIGRlbGVnYXRlKQogewogfQogCkBAIC00NiwxMyArNDQsNiBAQCB2b2lkIERyYXdp
bmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KQogICAgIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNldCgpOwogfQogCi1SZWNv
cmRlciYgRHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBhdXRvKiBncmFwaGljc0Nv
bnRleHRJbXBsID0gY29udGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0
SW1wbCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4oKmdyYXBoaWNzQ29udGV4
dEltcGwpOwotfQotCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewogICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmlu
ZGV4IGQzN2MwNzM1YmViNTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRkZGVmODU3
NTI4YzgyNzllNGYxZWZiZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBEcmF3aW5n
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd2luZ0NvbnRleHQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNID0geyB9LCBSZWNvcmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7CiAKKyAgICAvLyBGSVhN
RTogRGVkdXBsaWNhdGUgdGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7
IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRl
ciYgcmVjb3JkZXIoKSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFr
ZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0p
OyB9CiAgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlz
dDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheUxpc3Q7IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3Rl
Y3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVyIG1fY29u
dGV4dDsKICAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbk1lbW9yeURpc3BsYXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAppbmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJj
MGEzLi5mMjIyZTIxODNhMzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYg
aXRlbSkKIAogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewotI2lmIFVTRShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggMDc0MDQxZjI2YTFlOTY0ZGM0Yzc2ZjQ4MmJj
NGM5OTNlODdlZTMxNS4uZjExN2NmYTgzOTM2MDg5ZTcxZmQwNWFiNzg2NDhiZDI0OGQ1ZTc5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVu
dGlmaWVyOyB9CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1h
Z2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVu
dGlmaWVyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkg
KzMzMSw3IEBAIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9y
OwotI2lmIFVTRShDRykKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5
UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3
LDEyIEBAIE9wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dD
b2xvcjsKIAotI2lmIFVTRShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxl
Z2FjeVJhZGl1czsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwot
ICAgICAgICBpZiAoIXNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNo
YWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93UmFkaXVzTW9kZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
YWRvd3NVc2VMZWdhY3lSYWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAv
LyBVU0UoQ0cpCisgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
aW5kZXggNjk0NDgyOGRmYzY0Yjg3NGI5MzdjZWVhZGYyYWVkYzJhNjczODExNS4uMzExMWI5MTcx
MzAyMDBmOTFmMWQ4MWJkYWZmMGI0YzA2YWY0ZTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxh
eUxpc3QoZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdh
dGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlM
aXN0KQogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2Up
CiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uKQpAQCAtNTAsOSArNTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAK
LVJlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDog
R3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQu
bV9kaXNwbGF5TGlzdCkKK1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxp
c3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVn
YXRlKQogICAgICwgbV9pc05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIo
KnRoaXMsIHBhcmVudC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b24oKSkKQEAgLTE2NiwxMSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVy
aW5nTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5k
ZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJl
Y29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQot
CiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBl
bmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDExIEBAIHZvaWQgUmVjb3Jk
ZXI6OmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7CisgICAgLy8gRklYTUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMgd2hhdCB1c2VkIHRvIGhh
cHBlbi4KKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Rpc3Bs
YXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAgIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5LDcgQEAgdm9pZCBSZWNv
cmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIGFwcGVu
ZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3Jt
IFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVE
ZXZpY2VTY2FsZS4KICAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwpAQCAtMjk4LDggKzI5
Nyw5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBw
b2ludDIpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpCiB7CisgICAgLy8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHlsZSBub3QgdXNlZD8KICAg
ICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2lu
dCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCkBAIC0z
MjgsNiArMzI4LDE4IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0Zv
Y3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisjaWYgUExB
VEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91
YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBk
b3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyNlbmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUyLDkgQEAgdm9p
ZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
CiAgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVj
b3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0
CiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1
cHBvcnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVj
dCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCkBAIC00NTIsMzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAg
IGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
JiBkcmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
ZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICAvLyBUaGUgaW5pdGlh
bCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zv
cm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci0gICAgICAgIGF1dG8gc2NhbGVkU2l6
ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0g
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOwotICAgICAgICBpbml0aWFsQ1RNLnNj
YWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUu
aGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5h
dGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRjaGVzIEltYWdlQnVmZmVy
J3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEZsb2F0
U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7
CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRlc3RpbmF0aW9uLnNpemUo
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsKKyAgICBp
bml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBpbml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2Nh
bGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVz
dGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlY29y
ZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0gICAgfSk7CisgICAgUmVjb3JkZXIgbmVzdGVk
Q29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRp
YWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRp
b24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdGdW5jdGlvbihuZXN0ZWRDb250ZXh0KTsKICAg
ICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbik7Ci19CiAKLSNp
ZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVyOjpjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QKLXsKLSAgICByZXR1cm4gISFwbGF5ZXIuaWRl
bnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nl
c3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwogICAgIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOwogfQpAQCAtNTE3LDcg
KzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAg
IGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5k
czsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hh
ZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CkBA
IC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgp
IGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKIH0KIAotY29uc3QgRmxvYXRS
ZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRT
dGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGI4NzZkNmFkYjUxNDczZjFm
MzBhYWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2MWMxNzljN2NhOWM3YzlkMjFmMTk0MzQwYzk3
YmI5OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjgs
NyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVk
ZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiAr
NTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
K2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVi
bGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBE
ZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpE
ZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoRGlzcGxheUxpc3QmLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhl
bEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3NywyNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNSZWNvcmRlcjsKLSAgICBSZWNvcmRlcihSZWNv
cmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuRHJhd0ltYWdl
QnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gRklYTUU6
IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IElt
YWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgb3ZlcnJp
ZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwg
Ym9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwog
ICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSNpZiBVU0UoQ0cpCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBvdmVycmlk
ZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIw
LDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25z
dCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNiw3ICsxNTEsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkg
b3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CisgICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShWSURFTykK
ICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlh
KGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CkBAIC0xNzMsNyArMTg4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGF1dG8g
aXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgIGlmIChh
dXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAgICAgICAg
ICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkKICAgICAgICAgICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJv
dW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRlbS5nbG9i
YWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVt
RXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewogICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjkyODZkMjVhMTk1MTkyMWI4
NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAxZjMzZDJmYjIwMzFmMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAKKyNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIK
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvTG9jay5o
PgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IG1ha2VT
aW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAgICAgICBSZXRhaW5QdHI8
TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VS
ZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZToxIHBpeGVs
c0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBsZXNQZXJQaXhlbDo0IGhh
c0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0
aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0
KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChiaXRt
YXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01ha2VSZWN0
KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1ZDliM2NhNGQxY2UwZmVi
OWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1NDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCiAKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgi
CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUxLDcgKzUxLDcgQEAgLSAo
dm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gbGF5
ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChf
X2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCByZWN0c1RvUGFpbnQgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFpbnQoZ3JhcGhpY3NDb250
ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6ZHJh
d0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSwgcmVjdHNUb1BhaW50
LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsKTsKICAgICB9
CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYp
Y29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBsYXllciA9IFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdl
IHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXItPmFjY2Vs
ZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1MWNjN2UwMWQ0NzBjNTcw
ZDlkOWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQwOTJkODRiNzMyZTk4NDM5MDYzNjNlMDU2MjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogICAg
IHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWludGluZ09w
ZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlz
dCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAgICAgbV9zdGF0ZVN0YWNr
LmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwogfQpAQCAt
MTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAogICAgIH0KIH0KIAotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
c3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVj
dD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0Pihy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkp
KSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
QEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBv
c2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwg
Y29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM4Niw3
ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQwOCw3ICs0MDMs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDI4LDcg
KzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+
KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMsNyArNTE4LDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRf
Zm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCkBAIC01NTMsNyArNTQ4
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFN
KGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTYxMywx
MSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGlu
ZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRl
eHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBm
bG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAgICAgICB2aXJ0dWFsIH5E
cmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYyOCw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VD
b2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0
IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQ
YXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAg
ICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6Omdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMyLDcgKzEwMjMsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJv
dW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0
ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBj
b21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAK
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1w
bGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYxZmY2MzY1NmFkYTQwOWYw
ZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhmZGY3YzVjMzM5OTcyNzdi
YmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAogbmFtZXNwYWNlIE5pY29z
aWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewogcHVibGljOgotICAgIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFpbnRpbmdP
cGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAg
IHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3Qg
V2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAtNTMsNiArNTIsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJy
aWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdl
YkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRl
OwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3Qg
Y2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1l
Rm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRp
bmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1YjhjMWQ4N2EyYzZjMzdj
Y2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBjZmJkMDZhZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmlj
b3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKICNp
bmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29z
aWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50
aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmcoQnVmZmVyJiBidWZmZXIp
CiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jYWlyby5z
dXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQuZ2V0KCkpOwotICAgIG1f
Z3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSgqbV9wbGF0Zm9y
bUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIFBhaW50aW5n
Q29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkKQEAgLTEwNCwxMSArMTA0
LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OnJlcGxheShjb25z
dCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZv
clJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVy
YXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJh
dGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25zKTsKIH0KIAogUGFpbnRp
bmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGluZygpID0gZGVmYXVsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJmNTc1ZDUyYzhiZGJkMWNl
MjgyYjhlYmE3ZDUwYmIuLmQ5NzlmM2RmMDRiOWRlYzU5NGZlNTkzZWMxNjE3ODJhM2JhODA1NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIFVTRShD
RykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAt
NjcsMzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBDR0NvbnRleHRX
aXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
CitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERDIGhkYywgYm9vbCBoYXNB
bHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNB
bHBoYSkuZ2V0KCkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
Ci17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0Fs
cGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRhLT5tX2NnQ29u
dGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMg
d2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigp
KTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICB9
CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dzQ29udGV4
dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3VpdGFibGUg
Zm9yIGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kKQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hk
YyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAh
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUo
KTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0
IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGltYWdlID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7Ci0g
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3Qs
IGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVD
b250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CiAgICAg
CiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhkYyk7CkBAIC0x
MjQsMjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAo
V2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUoKS53aWR0aCgp
LCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVyUm93KCksIHNS
R0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdl
QWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lk
dGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAorICAgIENH
Q29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9jZ0NvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lk
dGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRleHRNYWMu
bW0uCiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNwcCBhbmQg
YmUgc2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4wZjsKICAgICBv
ZmZzZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5pc1ZhbGlk
KCkgPyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEgKzE0OCw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3R5bGUu
bW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcgJiYgc3R5bGUu
bW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRleHQuZ2V0KCkp
OwogfQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENH
OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGE7
Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKaW5kZXggZjE0
NDI1NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjNjOGYxZGQxMTQ1YjIxZWM1
NjFkYWY5MGExM2UzNmNmMzdkNGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNp
bmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNjYsMjggKzY2LDkgQEAgc3RhdGljIGNhaXJvX3Qq
IGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICBy
ZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERD
IGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4
dENhaXJvKEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJv
KGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0FscGhhKSkKIHsKLSAgICBwbGF0Zm9y
bUluaXQoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBo
YXNBbHBoYSk7Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNyKSk7Ci0gICAgbV9kYXRhLT5w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwotICAgIG1f
ZGF0YS0+bV9oZGMgPSBkYzsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmNyKCkpIHsKLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0
YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAg
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQotICAgIGlmIChj
cikKLSAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CiB9CiAjZW5kaWYKIApAQCAtMTI3LDkgKzEw
OCw5IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwg
fHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBj
cmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1hcCkgewot
ICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4LDQgKzE1
OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiB9CiAj
ZW5kaWYKIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRl
eCAyOWE4MmE4OTc4MjI5YjBmNTg3M2FiZGY4MmJmYWY4MDZjZjE2NTk4Li42NWU5N2Y5NzM0Njky
MjgyZDI3ZmMxZWQ3ODQ4OGQxODE3M2MxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAKQEAgLTQ3LDE3ICs0NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9v
bCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJn
ZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAg
ICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAgICBhdXRvIHRhcmdldFByb3BlcnRp
ZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCi0gICAgSFJFU1VMVCBo
ciA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdl
dCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKKyAgICBIUkVTVUxUIGhyID0gR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJn
ZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMsICZyZWN0
KTsKQEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChI
REMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRQogICAgIG1fZGF0
YS0+bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBl
KQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJU
eXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgp
CiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsK
ICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODksNyBAQCBJRDJEMUZhY3Rv
cnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAgcmV0dXJuIGRpcmVjdDJE
RmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVs
dFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdl
dCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYgKCFkZWZhdWx0UmVuZGVy
VGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJU
YXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywg
Ym9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5p
dChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRjKQogICAgICAgICByZXR1
cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRl
eHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBw
bGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUlu
aXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBwbGF0
Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZv
cm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFwbGF0Zm9ybUNv
bnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
Q29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1w
bC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwog
ICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIApAQCAtMTk1LDMzICsx
OTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJyZW50R2xv
YmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKICAg
ICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0bWFwPiYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdO
YXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250
ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250
ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxl
bmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93c0NvbnRleHQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkK
IHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwg
aXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIW1fZGF0
YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVhdGVkQml0
bWFwKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIERp
cmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdp
bmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAgIDo6
RGVsZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0
bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBp
bWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJEOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQog
ICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJl
clR5cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQor
ICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25l
ZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fb3du
ZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAgICAgLCBt
X3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVy
ZXJUeXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlx
dWVfcHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3JlbmRl
cmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMxMCw5ICsz
MDMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29saWRDb2xv
ckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1c2hX
aXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihj
b2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMgKzM2NCw2
MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFu
Z2xlKQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9i
YWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikg
Y29uc3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJl
bnRHbG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKIH0K
IAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QK
K0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVz
aC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCiB7CiAg
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1c2goKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9y
bVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJh
d1BhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
IXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAgRGlyZWN0
MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJ
bnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJEMV9TVFJP
S0VfU1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9r
ZVN0eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1f
cGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBt
X3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUpvaW4s
IG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAw
LjBmKTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0
cm9rZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNU
TTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU0
MywxMSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigp
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRDT00o
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRl
cm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZpbGxQ
YXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBv
biBXaW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxs
QnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdQ
YXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwg
RGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4
dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBw
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9
ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5m
aWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxS
ZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJl
Y3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6Zmls
bFJlY3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBhdXRv
IGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCgh
bV9pbXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZp
b3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVP
cGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwg
cHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8m
IGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6OkZp
bGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xp
cE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwogfQog
Ci1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRD
bGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEzLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
IW1faW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKQEAgLTc1
NCwxMTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVjdDJEOjpl
bmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNTRVJUKCFt
X2ltcGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhh
KCk7CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBw
b3J0c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgKHZv
aWQpb2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRo
aWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29u
dGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNz
IGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAg
ICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMg
aGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNv
bnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
KTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsK
KyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53
aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAg
ICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3Vs
ZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMg
c2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGlt
aXQobGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1f
c3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAor
ICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09
IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBi
cnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250
ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290aGluZ01v
ZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJEMV9U
RVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5y
ZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUpOwor
ICAgIH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9
PSBhbHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0KIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKKyAgICAg
ICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9s
YXRlOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJF
U1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZv
cm1Db250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBEaXJlY3Qy
RDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpjbGVhclJl
Y3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgp
OwogICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGly
ZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBj
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2Fw
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAg
ZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMu
c2l6ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
ICAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5n
dGg7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4p
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNj
YWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgqcGxh
dGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgp
LCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
ICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGlu
Y2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICBy
ZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0
Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMo
cmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewot
ICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMu
YXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9u
KCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VT
dHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25z
dCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVj
b3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5
IGxpc3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0K
LSAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9O
X01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwg
cXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5
ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBu
ZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICghaGFzUGxh
dGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBEaXJl
Y3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0
RHJhd2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICAodm9p
ZCltb2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBU1NF
UlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0g
YnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZv
ciBEaXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNldFN0cm9r
ZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8
fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KKyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9y
KTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOworICAg
IERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3Rh
dGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
fHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMo
KnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNFRF9QQVJB
TShmb250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4T2Zmc2V0
ID0gcG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBo
cyk7CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKKyAg
ICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7CiAK
LSAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElB
U19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUo
Zm9udFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1H
bHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAgICBtX2Rh
dGEtPnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChp
ICsgZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRo
KCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lk
dGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+
aGVpZ2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJsZSBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0
YXRlLCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250
YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJh
d2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0
ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGljc0NvbnRl
eHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7Ci0gICAg
Ly8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3Rh
dGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAg
ICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxs
aXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250ZXh0ID0g
JmdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0
UmVjdCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
fHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBE
aXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRl
LnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRl
ICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dERpcmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNy
ZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgK
LSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBs
RmFjdG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0pOwotfQot
Ci1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBt
X3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBH
cmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2
YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihy
ZW5kZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNv
bnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUt
PnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBtX3BsYXRm
b3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAg
ICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4
dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAg
ICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8v
IE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0
IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAg
ICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUm
PihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09m
ZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFk
b3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgp
IH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRl
T3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFyU2hh
ZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVD
YXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1fcGxhdGZv
cm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVz
LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lSm9p
bihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIERp
cmVjdDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQu
Y3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICgh
YnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFk
aWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0g
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJl
dmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09w
ZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNoYWRvd1N0
YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGlyZWN0MkQ6
OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0
YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNP
cGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0K
LSAgICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRl
eHQoKSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNlLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGly
ZWN0MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRF
bGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxp
bmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkp
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9r
ZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3Rh
dGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNl
KHJlY3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIERp
cmVjdDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICgh
Zm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhu
dW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBo
cyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlw
aHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0g
ICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20p
OwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAg
ICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0g
ICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgp
OwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJv
a2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBo
cywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0
YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dP
ZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6
ZHJhd05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhh
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9y
bUNvbnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRl
clRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ry
b2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVV
bmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1Bh
dGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cmVzdG9y
ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwg
YW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZShtX3Bs
YXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAg
RGlyZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIERp
cmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQs
IHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNs
aXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3Qg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4g
RGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAm
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0Nv
bnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9h
dFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1F
OiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5MGVlYTdi
NDJmMjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGlj
c0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCopOwotICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9vbCBoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBC
bGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRT
bW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4o
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQ
YXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsK
LQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0Owot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9w
cml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3NzVhNjJi
YWVhMjJmOTkwNjA3ZWI0Y2JkLi43N2RhZmUzMjBiYjA3MzA4OTAxMDBkN2M0YWYxMDQxNjM2OWU3
MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0YXRpYyB2
b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9STShXSU4p
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhib29s
IGluY2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgPSBp
bmNsdWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1ZGVD
aGlsZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hvdWxk
SW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9zaG91
bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRl
eHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKQEAgLTk1LDE1ICs5NSwxMyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5X
aW5kb3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6V2luZG93
c0JpdG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0IEludFNp
emUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4obV9kYXRh
LT5tX2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4oZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgogCiBIREMg
R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIEhEQyBoZGMgPSBudWxscHRyOwotICAg
IGlmICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEtPm1faGRjOworICAgIEhEQyBoZGMg
PSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAgICAgaWYg
KCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgaWYgKGRzdFJlY3Qu
aXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzMsMTcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0
V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEK
ICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAgICB9CiAKLSAgICBtX2RhdGEtPmZs
dXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7Cisg
ICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpoZGMoKSBjb25zdAogewot
ICAgIGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAg
cmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NTk5YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNjNzljMGNiYzBjNDc2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRl
eHRDRworCisjZWxpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQKKworI2VsaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENhaXJvCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1
YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1
MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFw
bGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250
ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsK
KyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihw
bGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2Uy
YmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAK
QEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklU
TUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcEluZm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgs
IGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29u
dGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsK
IAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlm
IChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3
YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWly
b1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fp
cm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0
YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
IGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6
OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRj
YTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWExN2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3
MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBo
aWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29u
dGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAg
IHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxF
RApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hD
b250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNj
cmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tl
U3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1
OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNi
ZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
RHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
CiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0
TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhT
aXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2UgKmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkg
aW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVy
ZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29u
dGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRl
cmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFn
ZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2Fs
ZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQs
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTpp
bWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0
aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRl
eHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5D
R0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQo
aW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwg
VGV4dEluZGljYXRvckRhdGEmIGluZGljYQogCiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXpl
OmltYWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlv
bnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dD
b250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQg
bm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhl
IHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJp
bHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
MCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0gKnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJ
bWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdl
XShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAg
ICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
Rm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAg
ICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVy
ZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFn
ZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAg
ICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRS
ZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDcz
YmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUg
IkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIyZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNi
ODg3M2Y1NTA5Li5hYzZlMjQ0ZDA0MWU5ZmU2YmY2MmYxZTYxNWFmOTllNmNmMjUwMmU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFdpbi5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCkBAIC0xODYsNyArMTg3LDcgQEAgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGluTGFiZWwsIFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0
T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KGNvbnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGNv
bnRleHRSZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwg
aG93ZXZlciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9u
IHdpbiwgc28gd2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBT
UkdCQTx1aW50OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2Fi
NmIxM2FmODM0NzJlNy4uMjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRXaW4uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIK
ICNpbmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1l
bnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAg
IDo6U2VsZWN0T2JqZWN0KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRX
aW4gY29udGV4dChtX0RDLmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VS
ZWN0IHRyYW5zbGF0ZWQgaW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxp
c3QgKHdoaWNoIGlzIGxpc3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIElu
dFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2
YzA5YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1
ZjQzYjc2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVs
UGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1
bFBhaW50Q2hlY2tlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM4LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZp
ZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3
LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
KTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBo
aWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3
LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJl
Y3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJl
Q29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2Mw
Yi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAs
MTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9
IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFk
b3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNo
YWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRv
dy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3co
c2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hv
b3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYg
aW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQz
OSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
aWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJv
eCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBk
b2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYg
KHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNl
dExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3Qs
IGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2
N2NjNjZlZTVhMjVjNzRkZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdj
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRl
ICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBl
cmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBA
IC0xNzg5LDcgKzE3OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRS
ZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBb
Jl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgbnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVs
bENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1No
YXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYx
NTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
YWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewog
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7
CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVh
dGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+
KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0Lmdl
dCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1h
cENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFi
bGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBD
Ry5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQw
NmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5n
ZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBD
b250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVC
aXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAw
OGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQy
NDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0
MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRl
eHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRm
Ni4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fp
cm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQ
dHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFj
a2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29u
c3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBv
aW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2Nh
dGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWly
b0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRl
eHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJh
d3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0
cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwg
Yml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3Zl
cndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1
Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMw
LDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
Ci0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1w
b3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9y
dCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4K
IAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRP
cmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7
CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkg
PSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0g
KHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0g
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRd
KTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0
bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
QmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0Jh
Y2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0
YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJl
Y3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmlu
ZGV4IDNjYWNiOWFlYzY0Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4
NjI5ZjYxM2QzMWI4NDczOTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
YmFyVGhlbWUuaD4KQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2lu
OjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNl
bGVjdE9iamVjdChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNv
bnRleHQobV9EQy5nZXQoKSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJh
Y2tCdWZmZXI7IAogICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9f
dXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1
ZmZlcikpOyAKQEAgLTg2Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpw
YWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAg
cGxhdGZvcm1Db250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRl
eHRXaW4gY29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRy
YW5zbGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1
Yjk4Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNk
ZjZmMGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250
ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVy
Q29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9y
dCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAog
I2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JF
TUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAt
MTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1
bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5j
ZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2Jk
Yjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00
Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
VE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJl
dGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVj
dCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBk
ZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVh
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAK
aW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0
MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApA
QCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVT
RShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5o
PgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQx
YzVjMy4uMDA5ZmU4OTA5NjU3MGZjNzM1NjAyNDdhNDIwZjU0NDZhODdkOTcwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIs
MTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRp
ZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJlYWxseSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0
aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTUzNzUsNyArNTM4MCw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50CiAgICAgICAgICAg
ICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICAgICAgICAgIENH
UERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAg
ICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4
LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsK
ICAgICAgICAgICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9w
cmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0
ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5
YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUwYWM5OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYs
NyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVy
KQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3KCk7CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0g
Z3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lkdGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklU
X0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1f
Y2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8g
Z3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4
dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9z
Y2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3JlKG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4
IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBi
N2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBA
QCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdp
ZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAg
UHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3Jh
cGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBp
eGVscykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dl
YktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJL
aXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAyYmEwMDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2
NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFz
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRy
YXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1
bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4
LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9u
dCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICoKIAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4
dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7IGNnQ29udGV4dCB9OworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAg
ICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEgZmxpcHBlZCBncmFwaGljcyBjb250ZXh0LgogICAg
ICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdo
dFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5ZWNmMWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4u
OTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2MyYjMzZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxp
Z2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZp
ZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3Qp
cmVjdAogCiAgICAgICAgIEFTU0VSVChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBD
R0NvbnRleHRdKTsKICAgICAgICAgW193ZWJOb2RlSGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xs
ZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQg
cmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYzNWQ3YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1
N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5NjIwZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2MTMsNyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNS
ZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRlbnRzT25seQogI2Vsc2UKICAgICBDR0Nv
bnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29udGV4dChjdHgpOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKaW5kZXgg
NTE5YTU3MzZkMmEzNTBkNzI3ODY3NjVmYjE4ZmNmMzM5YzVlYzY4ZS4uYWQ2NjA3ZTQ1MTBlNTlm
NTE4ZmVlZjFkOGNjNjM2NTZhODRlZDQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250
U2VsZWN0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25k
REMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRS
dW4uaD4KQEAgLTQ5MCw3ICs0OTEsNyBAQCB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6
OmRyYXcoKQogICAgIGF1dG8gYml0bWFwREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBh
dGlibGVEQyhIV25kREMobV9odWRXaW5kb3cpKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSBT
ZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG1fYml0bWFwLmdldCgpKTsKIAotICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KGJpdG1hcERDLmdldCgpLCB0cnVlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRXaW4gY29udGV4dChiaXRtYXBEQy5nZXQoKSwgdHJ1ZSk7CiAKICAgICBjb250ZXh0LnNh
dmUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDJmNTExMDMxMzYx
OTQ1N2NkYWMzYjMxY2E1YmQ1Mzc2YWJjYjIxNzcuLjhkYTkxOTQ4M2IwZGFhNzEwZDYyMzYyZTli
M2EwNDY5ZDUwMmJkY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTc0
LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lV2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HRElPYmplY3RDb3VudGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQu
aD4KQEAgLTMyMSw3ICszMjIsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVj
dFRvQ29udGV4dChSRUNUIHJlY3QsIF9Jbl8gSERDIGRldmljZUNvbnRleHQpCiAgICAgLy8gV2Ug
Y2FuJ3QgcGFpbnQgd2l0aCBhIGxheW91dCBzdGlsbCBwZW5kaW5nLgogICAgIHZpZXctPnVwZGF0
ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCBnYyhkZXZpY2VDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoZGV2aWNlQ29u
dGV4dCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh0cnVlKTsKICAgICBn
Yy5zYXZlKCk7CiAgICAgTE9ORyB3aWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7CkBAIC0z
NTIsNyArMzUzLDcgQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29u
dGV4dEF0UG9pbnQoUkVDVCByZWN0LCBQT0lOVCBwdCwgX0luXwogICAgIC8vIFdlIGNhbid0IHBh
aW50IHdpdGggYSBsYXlvdXQgc3RpbGwgcGVuZGluZy4KICAgICB2aWV3LT51cGRhdGVMYXlvdXRB
bmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoZGV2
aWNlQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGdjKGRldmljZUNvbnRleHQpOwog
ICAgIGdjLnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAgICAgZ2Muc2F2ZSgp
OwogICAgIEludFJlY3QgZGlydHlSZWN0KHJlY3QpOwpAQCAtMTgwOCw3ICsxODA5LDcgQEAgSFJF
U1VMVCBXZWJGcmFtZTo6c3Bvb2xQYWdlcyhIREMgcHJpbnREQywgVUlOVCBzdGFydFBhZ2UsIFVJ
TlQgZW5kUGFnZSwgdm9pZCogY3QKICAgICBmbG9hdCBoZWFkZXJIZWlnaHQgPSAwLCBmb290ZXJI
ZWlnaHQgPSAwOwogICAgIGhlYWRlckFuZEZvb3RlckhlaWdodHMoJmhlYWRlckhlaWdodCwgJmZv
b3RlckhlaWdodCk7CiAjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgR3JhcGhpY3NDb250
ZXh0IHNwb29sQ3R4KHBjdHgpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBzcG9vbEN0eChwY3R4
KTsKICAgICBzcG9vbEN0eC5zZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogCiAg
ICAgZm9yIChVSU5UIGlpID0gc3RhcnRQYWdlOyBpaSA8IGVuZFBhZ2U7IGlpKyspCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCmluZGV4IDA3YTJmNjA0ZjM5
N2EyYTU4YjJkNzc1MWM0NGVhOTIxOTQzMTg3MzAuLjQ4ZTlkMWE4ZDc2NjcyNWI1NzljMzQxMWMz
ZWNkNDViNmRiZjRjZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5v
ZGVIaWdobGlnaHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdo
bGlnaHQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZv
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgpAQCAtMTU3LDcgKzE1OCw3IEBA
IHZvaWQgV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKCkKIAogICAgIDo6U2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcC5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChoZGMu
Z2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGhkYy5nZXQoKSk7CiAgICAg
Y29udGV4dC5zY2FsZShtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSk7CiAgICAgbV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xs
ZXIoKS5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwCmluZGV4IGMxMWFjOWQ5N2RiYWZlMmEzZjI4NDc3Y2NlMDQ0MWQ5Yjk3NzAzNjAuLjdlMTdm
NzFkMTQyYzE2ZGE1M2ZlNzI2NmY0NGM4ODljZDQzODJlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlZpZXcuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xv
Y2F0aW9uQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25FcnJvci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxOYW1lcy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
SFduZERDLmg+CkBAIC0xMjUwLDcgKzEyNTEsNyBAQCB2b2lkIFdlYlZpZXc6OnBhaW50V2l0aERp
cmVjdDJEKCkKIAogICAgIFJFQ1QgY2xpZW50UmVjdCA9IHt9OwogICAgIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEIHBsYXRmb3JtQ29udGV4dChtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0IGdjKCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2lu
IGdjKCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICB7CiAgICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5T
ZXRUYWdzKFdFQktJVF9EUkFXSU5HLCBfX0xJTkVfXyk7CkBAIC0xNDA3LDcgKzE0MDgsNyBAQCB2
b2lkIFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShGcmFtZVZpZXcqIGZyYW1lVmlldywg
SERDIGJpdG1hcERDLCBjb25zdCBJbgogICAgIG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0ID0g
bnVsbHB0cjsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGJpdG1hcERDLCBtX3Ry
YW5zcGFyZW50KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoYml0bWFwREMsIG1fdHJhbnNw
YXJlbnQpOwogICAgIGdjLnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3Mod2luZG93c1RvUGFp
bnQgPT0gUGFpbnRXZWJWaWV3QW5kQ2hpbGRyZW4pOwogICAgIGdjLnNhdmUoKTsKICAgICBpZiAo
bV90cmFuc3BhcmVudCkKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5n
ZUxvZwppbmRleCAwNTA2OThiMGJhZmRiZTAyODc1YjMzNzg4NzRmOTRiZGY3YWQzZjhmLi44Nzk1
Mjk2MGJhODk0ODBlMmFiOWUyZDEyYmQwYzIxY2Y3MzkyNDdmIDEwMDY0NAotLS0gYS9Ub29scy9D
aGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUt
MjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmly
dHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlM
aXN0VGVzdHNDRy5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAyMS0w
NS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5nIGEgcGxh
dGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0Yy4pCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxp
c3RUZXN0c0NHLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNw
bGF5TGlzdFRlc3RzQ0cuY3BwCmluZGV4IDg3YTM2YWNmZTZhMTAwY2MzMjNlMjQ4OTdmY2UzODAz
ZjIzNGE3NzguLmE1OThkNTRhMjc1Mjk1OGM0MmU0ZTJiNzllNTMzN2M1N2IxNzRiNDYgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRl
c3RzQ0cuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNw
bGF5TGlzdFRlc3RzQ0cuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEl0ZW1zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVy
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFkaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Q0cuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC00OSw3ICs1MCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywg
UmVwbGF5V2l0aE1pc3NpbmdSZXNvdXJjZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZTo6U1JHQigpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLnBsYXRmb3JtQ29sb3JTcGFjZSgpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQg
eyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gaW1hZ2VCdWZmZXJJZGVudGlmaWVyID0g
UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwogCkBAIC0xMTMsNyArMTE0
LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBPdXRPZkxpbmVJdGVtRGVjb2RpbmdGYWlsdXJl
KQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRo
TmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0
LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4
dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0
KCkgfTsKIAogICAgIERpc3BsYXlMaXN0IG9yaWdpbmFsTGlzdDsKICAgICBXcml0aW5nQ2xpZW50
IHdyaXRlcjsKQEAgLTE0NCw3ICsxNDUsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIElubGlu
ZUl0ZW1WYWxpZGF0aW9uRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0Yo
Q0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAgICBhdXRv
IGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRl
eHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5n
ZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBj
b250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRvIHJ1blRlc3RXaXRoSW52YWxp
ZElkZW50aWZpZXIgPSBbJl0oRmx1c2hJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGlkZW50aWZpZXIuaXNWYWxpZCgpKTsK
</data>
<flag name="commit-queue"
          id="450877"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429639</attachid>
            <date>2021-05-25 02:08:03 -0700</date>
            <delta_ts>2021-05-25 03:40:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525020802.patch</filename>
            <type>text/plain</type>
            <size>385421</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjYwMjgxYTI3ZjExNmI3M2FmYjgzMWMxZDRiMDUyYjQ4
NTQ4OWZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNo
aWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8g
cmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBE
ZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgog
I2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSBy
ZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVt
RmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCog
ZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZh
Y3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBi
ZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3Qg
Q29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2
b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMg
dm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGlt
cGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0
cm95KCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBi
b29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
dm9pZCBwbGF0Zm9ybUluaXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhh
c0FscGhhID0gZmFsc2UpOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lk
IHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZp
bGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlh
bGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNo
YWRvdygpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0
UmVjdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZv
cm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0
IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3Ju
ZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBA
IHByaXZhdGU6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wg
aXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dEltcGw+IG1faW1wbDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisK
K3ByaXZhdGU6CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwog
Ci0gICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQg
bV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZCB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9Owog
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5
ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjJmZmI0NTQ1YWUyMzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRl
eHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9
IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIy
YjBhNjYyMDg1Li4xMzgwZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4
LDkgQEAgSW1hZ2VEcmF3UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVo
YXZpb3IgZGlmZmVyZW5jZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2lu
ZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0
LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAg
aWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0
UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYx
N2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZk
ZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwog
CkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAg
IHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2
YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRy
b2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGlj
c0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5n
UGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0
aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29s
IGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5k
aWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwg
T3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0K
KworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0g
V1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKwor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0p
IGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVy
biBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykK
KyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6
CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1
M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyAr
MTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVy
cyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAor
ICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNh
bnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2Mx
Li4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAg
IAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7
CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJl
Y29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
aW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERp
c3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4
YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRm
MzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShX
VEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250
ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4
dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3
YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJl
NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4
dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJv
bSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNt
YWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENv
dW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFj
a2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFp
bnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91
bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4
IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2Rj
ZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3du
ZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2Ug
aXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJv
dW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uZTQyM2Y1Y2RmNDdk
NjRjY2M0YWEwY2M5NDBlMDg2M2Y3NWIxNzE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5o
IgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9P
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNjIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3By
aXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRl
eHQuY3IoKSk7Cit9CiAKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0
KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorICAgIDogbV9vd25lZFBsYXRmb3Jt
Q29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWlyb0NvbnRleHQpKQor
ICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCisgICAgLCBt
X3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxh
dGZvcm1Db250ZXh0KSkKK3sKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRl
eHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dCht
X3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8o
UGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29u
dGV4dENhaXJvKCpwbGF0Zm9ybUNvbnRleHQpCiB7Ci0gICAgaWYgKG1fZGF0YSkgewotICAgICAg
ICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxw
dHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgIH0KIH0KIAotQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUp
IGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdyYXBoaWNzQ29udGV4dENhaXJvKCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShu
dWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdl
dENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorewogICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1Q
bGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2lt
cGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRl
eHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNh
dmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJl
c3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFu
Z2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChy
ZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNT
RVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3Is
IHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0
aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250ZXh0KCks
IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsg
b3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRv
IGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZSgqcGxhdGZvcm1D
b250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tl
Q29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0K
IAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVz
IHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZp
bGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0
cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29u
dGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworfQogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBh
dXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZp
bGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOworICAgIENh
aXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Cisg
ICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2
aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4
dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KIAotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBDYWlybzo6Y2xpcCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAK
LUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBs
KQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3Vu
ZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0
LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Cit9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogI2lmIFBM
QVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1
cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICNpZiBQTEFURk9STShXUEUpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3Rz
LCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgd2lkdGgs
IGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJl
Y3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91
YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9r
ZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjp0cmFuc2xhdGUoKnBs
YXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBj
YW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBz
ZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBh
bmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFj
dHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
dHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9h
dCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqcGxhdGZv
cm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNl
dCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0
ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAg
ICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VT
dHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
c3Ryb2tlU3R5bGUpOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFs
aWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJl
Y3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCwgY29uc3QgQ29sb3ImKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0g
ICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAvLyBXZSBmbGlwIHRoZSBo
ZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAg
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVp
Z2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwog
ICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3Bh
Y2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5j
eUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGVh
clJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VS
ZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGxpbmVX
aWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW5lQ2FwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFz
aE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVK
b2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihs
aW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCks
IGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFy
dCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCkKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRN
b2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6
Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpy
b3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRl
KHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFk
aWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwT3V0
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3Qo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKKyAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVy
bihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKKyAgICBDYWly
bzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK1JlbmRlcmluZ01vZGUg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLX0KKyAgICBp
ZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlw
aHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAg
ICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9Owor
ICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOworICAgICAgICAgICAg
eU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZv
cm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFs
aWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86
OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBo
cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAg
IGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2JlMDE1NjEyZTQ4MzkyZDJmOTk4NWY4NTRlNWZj
Njg2ZWZiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtMCwwICsxLDEyMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKKworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9y
bUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3JtQ29udGV4
dENhaXJvKik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCopOworCisjaWYgUExB
VEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKEhEQywgYm9vbCBoYXNBbHBoYSA9
IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCisjZW5kaWYKKworICAgIHZpcnR1YWwg
fkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5l
Sm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9h
dCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAg
ICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQp
IGZpbmFsOworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwor
CisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dENhaXJvPiBtX293bmVkUGxhdGZv
cm1Db250ZXh0OworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4MTdiZmQ0ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0K
LSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRl
ICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
cmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0g
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0g
ICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybz4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAg
W2NhaXJvQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRl
eHQsIGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0Nv
bnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5z
eW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNv
bnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1D
b250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9v
d25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxh
dGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsK
LSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQot
Ci1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86On5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0
cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWly
byogR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewot
ICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVh
bmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAg
YXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0
ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09m
ZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hv
dWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJTaGFkb3coKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXAp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExp
bmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4p
Ci17Ci0gICAgQ2Fpcm86OnNldExpbmVKb2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRl
eHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6
cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRm
b3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hh
ZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQot
ICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAg
IENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBw
cmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImKQotewotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRk
RWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwotICAgIENhaXJvOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lk
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJv
OjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7
Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFy
UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZykKLXsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVj
dG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAgICAg
ICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlw
aHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRG
b250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICgh
Zm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwK
LSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5
bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50
ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAgZm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXco
Z3JhcGhpY3NDb250ZXh0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3Jt
SW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9Q
QVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQs
IGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3
RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3Vz
UmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSgpCi17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0
Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9y
ZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
Ci17Ci0gICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWly
bzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omdl
dENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQot
ewotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1D
b250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlw
Qm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFn
ZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJv
OjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17
Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThk
YmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZjZjJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAq
IENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBj
YWlyb190OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENh
aXJvOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQ
bGF0Zm9ybUNvbnRleHRDYWlybyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9f
dCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBs
YXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBo
aWNzQ29udGV4dCYsIGNhaXJvX3QqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8oKTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNh
cCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVy
cmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5
ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4
dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGQzN2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYz
MzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3NTJlNzk1MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNp
bmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUw
NzYyNzVmNTIzZmE4MDcxZWEuLjliNWMwYWQwNzQ0NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQy
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25z
dCBQYXJhbWV0ZXJzJgogCiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNy
LmdldCgpKTsKLSAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7
CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0
Zm9ybUNvbnRleHQpOwogfQogCiBHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJm
MDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFmLi4yYTE5ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4
NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BhdGhDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1Vu
aXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3
ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRo
LmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7
CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihnYyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUw
LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAg
IHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcxYjhlMWM5MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZk
YjFhZTA2NTc0YmRmODE1YzYxNjcwZTA2Y2I2NzdhMDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4dFNldEZpbGxD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0
LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7Ci19Ci0KIGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBn
ZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIHJldHVybiBDR0Fm
ZmluZVRyYW5zZm9ybUNvbmNhdChDR0NvbnRleHRHZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJh
bnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldEJhc2VDVE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGlj
IEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVy
cG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCitzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29y
ZUludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsK
ICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKICAgICBjYXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0
OgpAQCAtODIsNiArNzcsMzQgQEAgc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4g
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ7CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRp
b25RdWFsaXR5IGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVh
bGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpEZWZhdWx0OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7
CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAg
ICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25lOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Mb3c7CisgICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJw
b2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAg
ICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJ
bnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKworc3RhdGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4
dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxs
ID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tl
ID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwg
JiYgc3Ryb2tlKQorICAgICAgICByZXR1cm4ga0NHVGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZp
bGwpCisgICAgICAgIHJldHVybiBrQ0dUZXh0RmlsbDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9r
ZTsKK30KKwogc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3
aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xNTYsMzUgKzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1v
ZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTQogICAgIHJldHVybiBrQ0dCbGVuZE1vZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNz
Q29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewog
ICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBs
YXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRo
aWNrbmVzcygpKTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252
ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJl
Y2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9uIHRoZSBHcmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBp
dCBkb2Vzbid0IG1hdHRlcj8KKyAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yKCkpOworICAgIHNl
dFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJv
a2VUaGlja25lc3MoKSk7CisgICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAg
ICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBH
cmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
IXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwog
ICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2
ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAv
LyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVt
ZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBv
ZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBs
YXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVz
dG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAK
ICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3Mg
aW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8g
cmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsyMzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRp
dmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNp
ZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwog
CiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwog
ICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxh
dGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3Jp
ZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0
UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8K
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQpOwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUp
OworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9s
ZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFt
IDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8
ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sg
IiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8
ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8
IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQog
CiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJl
ZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2Fs
bGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0Q0coY29udGV4dCkucm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0
KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lk
KiBpbmZvKQpAQCAtMzQ3LDE2ICszNzIsMTggQEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxPbk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRD
RihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZvKSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRl
c3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBk
ZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9y
ZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2Vz
IG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0
IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4
LDE5ICs0NzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkg
dXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5l
KHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRo
aWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAo
cG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIu
eCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSArNTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5h
ZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ry
b2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vy
VG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7
CiAKQEAgLTU2NSwxNiArNTYwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRm
b3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5Rmls
bFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJu
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0g
PSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2
LDE1ICs2MDMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxk
RmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpA
QCAtNjU0LDE2ICs2MzYsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1w
dHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2Vu
ZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBh
dGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAt
Nzk0LDE2ICs3NjYsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxS
ZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgewpAQCAtODMzLDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAg
ICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5
ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAg
ICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENH
Q29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBm
aWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9
ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNh
bnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93
KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZp
bGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xk
RmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xv
cik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAm
JiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093
blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3du
U2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBD
RyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwog
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBhdGggcGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAv
LyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpIGFzc3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVj
dCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9ubHkgY2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJv
dW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVy
YXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkg
JiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3du
U2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkx
MywyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxs
Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCks
IHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBG
SVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRo
ZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9i
bGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2Vs
ZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBh
cmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9w
cm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRp
bmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRD
VE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShw
bGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVk
Q29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRD
bGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKQpAQCAtMTAyMywxNiArOTQyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dS
ZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NjAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+
Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBj
b25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChw
bGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0
Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7CiAKQEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0
KTsKQEAgLTEwODgsMTEgKzk4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYg
eU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBA
IC0xMTAwLDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFS
QU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAo
Y29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQorICAgIGlmIChjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEyMSwyMSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBh
cHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisg
ICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgeworICAgICAgICBDR0NvbnRleHRTZXRT
aGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIAogICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGUgc2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBr
bm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93IG91cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9m
ZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWln
aHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0g
PSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJU
b0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jh
c2VDVE0uYjsKQEAgLTExNTYsNyArMTA1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAg
ICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBv
ciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6
bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAg
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zm
c2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0Nv
bnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQg
Y29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBz
aGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVs
dCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUwICsxMDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1Np
emVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9y
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAg
IENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlj
a25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlz
IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxp
bWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dD
b250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0
ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNv
bnRleHQoKSwgbGltaXQpOwotfQorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4
dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5h
bHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCisgICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5kTW9kZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwg
c3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250
ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOwor
CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4
dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQorICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMs
IHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0Nv
bG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4
dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ry
b2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBD
R0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQorewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIs
MTYgKzExODIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNh
cCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hP
ZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAw
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAtMTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMz
NSw5NCArMTIwOSw0MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgs
IGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRl
eHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNp
emUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xl
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAg
ICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5z
bGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0Jl
SWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5z
Zm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZv
cm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsK
ICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25z
dAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdl
dENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRo
ZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBj
b250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVn
cmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNj
YWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1
NSw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0o
cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJl
Y3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91
bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAg
ICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdp
dGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhhdmUgYQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxp
a2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBjbG9jayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUg
c2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk5LDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01v
CiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAt
IHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAg
ICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAg
ICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUo
d2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsK
QEAgLTE1NTYsMTYgKzEzNTcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0
KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkg
aXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAg
ICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJs
UmVmKQogICAgICAgICByZXR1cm47CkBAIC0xNTc5LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVm
LmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0o
Y29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFT
U0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkg
cXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkg
PSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtD
R0ludGVycG9sYXRpb25Ob25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0g
ICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0g
a0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXll
ckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAg
ICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNMYXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSAr
MTM4MiwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29s
IGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xh
eWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYmIChtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNM
YXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2Nl
bGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVk
Q0dDb250ZXh0OwogICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+
SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4g
bV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0K
LSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRl
eHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAot
ICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAg
ICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwot
ICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ryb2tlKTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAg
ICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwot
ICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2Rl
KGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIHNldENHU3Ryb2tlQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
Q0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25l
c3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAg
ICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZv
cm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRNb2RlKGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1v
ZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRD
R0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGlj
cyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2Nh
bGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJh
c2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1
cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAg
IENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3Jt
U2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxl
RmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRl
eHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0
U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAg
ICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBl
bGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5r
cygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3Mo
KSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3QgcmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwx
NSArMTQ1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0
RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwg
dHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVU
cmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZD
b250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2
ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBkYzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5
MzYyMmNmZDFjMmVjNGYyODllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JN
KFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7
IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0
Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkg
ZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9p
ZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwor
ICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwor
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5h
bDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHZv
aWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpIGZpbmFsOworCisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQm
KSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7
CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lO
RE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Cit9OworCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCA1ZmZjZTEyZmVhMjE5ZjMx
MDBhOGJlYjk2MjMzMDgwODc4Y2E3YmE2Li42ODY1ZjBiZDQxYmI0ODQ2MGRiYTFmNGY2YmE1ODA3
ODRjY2FlZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3
ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oY2dDb250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxw
dHIsIGRhdGEsIG51bUJ5dGVzLCBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkg
ewogICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJi
NGMxMmYwZTgyM2EwODhkMjVmYzE1YWE4ODlhNDI3Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4
Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KQEAgLTI0NCw3ICsyNDQsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
QwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCiAg
ICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwg
cG9pbnQsIGtDR1BhdGhTdHJva2UpOwpAQCAtMzA1LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mIHN0cm9rCiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7
CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBo
aWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCA3NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVk
ZmRhYjIzZGY4MTM0Li4wNWEzOTE2NTQwYmI3NmRhM2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNp
bmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2
b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0Nv
bnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3Qo
MCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBs
YXRmb3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBs
YXRmb3JtSW1hZ2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAw
NjdmY2JhMTkzOWZhZTUxZWRjODc5MmQ0Yy4uZTFlNWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQy
MmZiNTgxY2Y3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQppbmRleCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4
OTY4ODEzYTMwNTQzZjdkLi4zODhhZmNkNmY0NmFmYzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3Rh
dGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQ
YXRoUmVmIGZvY3VzUmluZ1BhdGgKICAgICBkcmF3Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNOdWxsKCkpCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBh
dGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1Q
YXRoKCksIGNvbG9yKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJh
d0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVm
IGZvY3VzUmluZ1BhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitz
dGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250
ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZzZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgp
OwogICAgIHJldHVybiBkcmF3Rm9jdXNSaW5nQXRUaW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6bWF4KCksIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29s
JiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisg
ICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3
ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1FOiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMg
cmluZyBkcmF3aW5nLgotICAgICAgICByZXR1cm47Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxl
UGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVj
dChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1JlY3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lTwogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0
cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVN
dXRhYmxlKCkpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhB
ZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQs
IC1vZmZzZXQpKTsKQEAgLTE5OSwxMSArMTc2LDggQEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JG
b3JNYXJrZXJMaW5lU3R5bGUoRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIK
ICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2Fu
dCB0byBmaW5kIHRoZSBudW1iZXIgb2YgZnVsbCBkb3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBl
cXVhdGlvbnM6CiAgICAgLy8gZG90RGlhbWV0ZXIgPSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRl
ciAvIGRvdEdhcCA9IDEzLjI0NyAvIDkuNDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggNThjNTEyNGQ0YjZjNjEzNjRl
OGQzNjk2ZjM0OTVmZGIyNjQ1OTdhMC4uZTEzOGMzMjAxZGRlNjQ1MDA1Yjg2ZDBhOWY2MWE4ZjQw
Zjc0Njg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQpAQCAtMzcxLDcgKzM3MSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9T
dXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4
dCkKICAgICAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3ND
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
Q0c+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0
SXNBY2NlbGVyYXRlZENvbnRleHQodHJ1ZSk7CiAKICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250
ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXIuaAppbmRleCAyMGRhZWY0YmI0MWY1MDY0ZjNjMWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li5kNzdm
NzQxNmRkNTY1YzNkM2Y5YjQ1NTg4NjMwOGI2YTM5YjVlZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5
cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBV
U0UoQ09SRV9URVhUKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAg
LTU4LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpOwogCi0jaWYgVVNFKENPUkVfVEVYVCkKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAh
UExBVEZPUk0oV0lOKQogICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKICAgICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKICAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMo
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3Jt
KiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291
bnQpOwpAQCAtNjgsNyArNjksOSBAQCBwdWJsaWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0
aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4p
CisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7
CisjZW5kaWYKIAogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwpAQCAtODUsMTMgKzg4LDE3IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwg
ZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CiAKLSNpZiBVU0UoQ09SRV9URVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYm
ICFQTEFURk9STShXSU4pCiAgICAgdm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7CiAjZW5k
aWYKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKLSAgICBHcmFwaGljc0NvbnRleHQgbV9pbnRl
cm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQorICAg
IFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OworI2VuZGlmCisK
ICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBGb250U21v
b3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290
aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcAppbmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzljZTU5OGI1Mjc3MDJjOGFh
MzNkLi5jYWNmNzY0ZjVkZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkxYzg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBDR0Vycm9yIGRy
YXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiByc3RhCiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotR3JhcGhpY3NDb250ZXh0
IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK1VuaXF1ZVJlZjxH
cmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0
KCkKIHsKICAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdh
dGVDcmVhdGUodGhpcykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4
dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0
RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcgKzg1LDcgQEAgR3JhcGhp
Y3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAg
ICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVE
cmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENHQ29udGV4dERlbGVnYXRl
U2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJbWFnZSwgcmVpbnRlcnBy
ZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0ltYWdlKSk7CiAgICAgYXV0
byBjb250ZXh0ID0gYWRvcHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVsZWdhdGUoY29udGV4dERl
bGVnYXRlLmdldCgpLCBrQ0dDb250ZXh0VHlwZVVua25vd24sIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAogRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtMTE5LDM0
ICsxMjAsMzEgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
Y29udGV4dFN0YXRlKQogewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbENvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwogICAgIGVsc2Ug
aWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsUGF0
dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKICAgICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlQ29s
b3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5h
bENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xv
cik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJv
a2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAg
ICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRT
dHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAg
fQogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwor
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CiAKLSAg
ICBtX2ludGVybmFsQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFs
U3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChjb250ZXh0U3RhdGUuc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0TGVnYWN5
U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hh
ZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
Y29sb3IpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOworICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgY29u
dGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5n
TW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBA
IC0zMDIsNyArMzAwLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlw
aHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgcmV0dXJu
OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3NpdGlvbiA9IENHQ29udGV4
dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5h
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi54
KTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpAQCAtMzIxLDcgKzMxOSw3
IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91IHNldCB0aGVzZSB0d28g
ZXF1YWwgdG8gZWFjaCBvdGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3UgZ2V0CiAgICAgLy8gQ1RN
ICogY3VycmVudFRleHRNYXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRyaXgKICAg
ICAvLyBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5hbFRleHRNYXRyaXgpID0g
WAotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRl
eHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9p
bnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtRml4dXA7CiAgICAgaWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXggPSBtX29y
aWdpbmFsVGV4dE1hdHJpeC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZpeHVwID0gY3VycmVudFRl
eHRNYXRyaXggKiBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDU0ZDg1NDcx
MjNmODk0N2Q2ZjJmYWNkN2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3NmZlOTEyZDY4MTAyMDc2
MTAwMWNjMjRmNjg2ODg2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSwgUmVjb3JkZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY29udGV4dChb
Jl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKLSAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0
aWFsQ1RNLCBkZWxlZ2F0ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGlu
aXRpYWxDVE0sIGRlbGVnYXRlKQogewogfQogCkBAIC00NiwxMyArNDQsNiBAQCB2b2lkIERyYXdp
bmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KQogICAgIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNldCgpOwogfQogCi1SZWNv
cmRlciYgRHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBhdXRvKiBncmFwaGljc0Nv
bnRleHRJbXBsID0gY29udGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0
SW1wbCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4oKmdyYXBoaWNzQ29udGV4
dEltcGwpOwotfQotCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewogICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmlu
ZGV4IGQzN2MwNzM1YmViNTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRkZGVmODU3
NTI4YzgyNzllNGYxZWZiZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBEcmF3aW5n
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd2luZ0NvbnRleHQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNID0geyB9LCBSZWNvcmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7CiAKKyAgICAvLyBGSVhN
RTogRGVkdXBsaWNhdGUgdGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7
IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRl
ciYgcmVjb3JkZXIoKSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFr
ZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0p
OyB9CiAgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlz
dDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheUxpc3Q7IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3Rl
Y3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVyIG1fY29u
dGV4dDsKICAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbk1lbW9yeURpc3BsYXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAppbmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJj
MGEzLi5mMjIyZTIxODNhMzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYg
aXRlbSkKIAogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewotI2lmIFVTRShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggMDc0MDQxZjI2YTFlOTY0ZGM0Yzc2ZjQ4MmJj
NGM5OTNlODdlZTMxNS4uZjExN2NmYTgzOTM2MDg5ZTcxZmQwNWFiNzg2NDhiZDI0OGQ1ZTc5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVu
dGlmaWVyOyB9CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1h
Z2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVu
dGlmaWVyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkg
KzMzMSw3IEBAIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9y
OwotI2lmIFVTRShDRykKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5
UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3
LDEyIEBAIE9wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dD
b2xvcjsKIAotI2lmIFVTRShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxl
Z2FjeVJhZGl1czsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwot
ICAgICAgICBpZiAoIXNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNo
YWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93UmFkaXVzTW9kZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
YWRvd3NVc2VMZWdhY3lSYWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAv
LyBVU0UoQ0cpCisgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
aW5kZXggNjk0NDgyOGRmYzY0Yjg3NGI5MzdjZWVhZGYyYWVkYzJhNjczODExNS4uMzExMWI5MTcx
MzAyMDBmOTFmMWQ4MWJkYWZmMGI0YzA2YWY0ZTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxh
eUxpc3QoZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdh
dGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlM
aXN0KQogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2Up
CiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uKQpAQCAtNTAsOSArNTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAK
LVJlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDog
R3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQu
bV9kaXNwbGF5TGlzdCkKK1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxp
c3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVn
YXRlKQogICAgICwgbV9pc05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIo
KnRoaXMsIHBhcmVudC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b24oKSkKQEAgLTE2NiwxMSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVy
aW5nTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5k
ZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJl
Y29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQot
CiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBl
bmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDExIEBAIHZvaWQgUmVjb3Jk
ZXI6OmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7CisgICAgLy8gRklYTUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMgd2hhdCB1c2VkIHRvIGhh
cHBlbi4KKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Rpc3Bs
YXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAgIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5LDcgQEAgdm9pZCBSZWNv
cmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIGFwcGVu
ZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3Jt
IFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVE
ZXZpY2VTY2FsZS4KICAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwpAQCAtMjk4LDggKzI5
Nyw5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBw
b2ludDIpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpCiB7CisgICAgLy8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHlsZSBub3QgdXNlZD8KICAg
ICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2lu
dCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCkBAIC0z
MjgsNiArMzI4LDE4IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0Zv
Y3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisjaWYgUExB
VEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91
YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBk
b3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyNlbmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUyLDkgQEAgdm9p
ZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
CiAgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVj
b3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0
CiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1
cHBvcnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVj
dCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCkBAIC00NTIsMzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAg
IGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
JiBkcmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
ZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICAvLyBUaGUgaW5pdGlh
bCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zv
cm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci0gICAgICAgIGF1dG8gc2NhbGVkU2l6
ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0g
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOwotICAgICAgICBpbml0aWFsQ1RNLnNj
YWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUu
aGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5h
dGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRjaGVzIEltYWdlQnVmZmVy
J3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEZsb2F0
U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7
CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRlc3RpbmF0aW9uLnNpemUo
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsKKyAgICBp
bml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBpbml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2Nh
bGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVz
dGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlY29y
ZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0gICAgfSk7CisgICAgUmVjb3JkZXIgbmVzdGVk
Q29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRp
YWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRp
b24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdGdW5jdGlvbihuZXN0ZWRDb250ZXh0KTsKICAg
ICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbik7Ci19CiAKLSNp
ZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVyOjpjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QKLXsKLSAgICByZXR1cm4gISFwbGF5ZXIuaWRl
bnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nl
c3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwogICAgIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOwogfQpAQCAtNTE3LDcg
KzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAg
IGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5k
czsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hh
ZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CkBA
IC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgp
IGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKIH0KIAotY29uc3QgRmxvYXRS
ZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRT
dGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGI4NzZkNmFkYjUxNDczZjFm
MzBhYWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2MWMxNzljN2NhOWM3YzlkMjFmMTk0MzQwYzk3
YmI5OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjgs
NyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVk
ZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiAr
NTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
K2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVi
bGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBE
ZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpE
ZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoRGlzcGxheUxpc3QmLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhl
bEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3NywyNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNSZWNvcmRlcjsKLSAgICBSZWNvcmRlcihSZWNv
cmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuRHJhd0ltYWdl
QnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gRklYTUU6
IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IElt
YWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgb3ZlcnJp
ZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwg
Ym9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwog
ICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSNpZiBVU0UoQ0cpCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBvdmVycmlk
ZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIw
LDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25z
dCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNiw3ICsxNTEsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkg
b3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CisgICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShWSURFTykK
ICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlh
KGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CkBAIC0xNzMsNyArMTg4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGF1dG8g
aXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgIGlmIChh
dXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAgICAgICAg
ICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkKICAgICAgICAgICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJv
dW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRlbS5nbG9i
YWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVt
RXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewogICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjkyODZkMjVhMTk1MTkyMWI4
NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAxZjMzZDJmYjIwMzFmMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAKKyNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIK
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvTG9jay5o
PgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IG1ha2VT
aW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAgICAgICBSZXRhaW5QdHI8
TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VS
ZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZToxIHBpeGVs
c0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBsZXNQZXJQaXhlbDo0IGhh
c0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0
aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0
KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChiaXRt
YXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01ha2VSZWN0
KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1ZDliM2NhNGQxY2UwZmVi
OWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1NDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCiAKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgi
CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUxLDcgKzUxLDcgQEAgLSAo
dm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gbGF5
ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChf
X2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCByZWN0c1RvUGFpbnQgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFpbnQoZ3JhcGhpY3NDb250
ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6ZHJh
d0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSwgcmVjdHNUb1BhaW50
LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsKTsKICAgICB9
CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYp
Y29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBsYXllciA9IFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdl
IHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXItPmFjY2Vs
ZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1MWNjN2UwMWQ0NzBjNTcw
ZDlkOWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQwOTJkODRiNzMyZTk4NDM5MDYzNjNlMDU2MjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogICAg
IHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWludGluZ09w
ZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlz
dCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAgICAgbV9zdGF0ZVN0YWNr
LmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwogfQpAQCAt
MTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAogICAgIH0KIH0KIAotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
c3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVj
dD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0Pihy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkp
KSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
QEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBv
c2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwg
Y29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM4Niw3
ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQwOCw3ICs0MDMs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDI4LDcg
KzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+
KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMsNyArNTE4LDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRf
Zm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCkBAIC01NTMsNyArNTQ4
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFN
KGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTYxMywx
MSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGlu
ZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRl
eHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBm
bG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAgICAgICB2aXJ0dWFsIH5E
cmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYyOCw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VD
b2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0
IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQ
YXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAg
ICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6Omdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMyLDcgKzEwMjMsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJv
dW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0
ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBj
b21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAK
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1w
bGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYxZmY2MzY1NmFkYTQwOWYw
ZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhmZGY3YzVjMzM5OTcyNzdi
YmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAogbmFtZXNwYWNlIE5pY29z
aWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewogcHVibGljOgotICAgIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFpbnRpbmdP
cGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAg
IHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3Qg
V2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAtNTMsNiArNTIsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJy
aWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdl
YkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRl
OwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3Qg
Y2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1l
Rm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRp
bmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1YjhjMWQ4N2EyYzZjMzdj
Y2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBjZmJkMDZhZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmlj
b3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKICNp
bmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29z
aWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50
aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmcoQnVmZmVyJiBidWZmZXIp
CiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jYWlyby5z
dXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQuZ2V0KCkpOwotICAgIG1f
Z3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSgqbV9wbGF0Zm9y
bUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIFBhaW50aW5n
Q29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkKQEAgLTEwNCwxMSArMTA0
LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OnJlcGxheShjb25z
dCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZv
clJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVy
YXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJh
dGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25zKTsKIH0KIAogUGFpbnRp
bmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGluZygpID0gZGVmYXVsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJmNTc1ZDUyYzhiZGJkMWNl
MjgyYjhlYmE3ZDUwYmIuLmQ5NzlmM2RmMDRiOWRlYzU5NGZlNTkzZWMxNjE3ODJhM2JhODA1NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIFVTRShD
RykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAt
NjcsMzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBDR0NvbnRleHRX
aXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
CitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERDIGhkYywgYm9vbCBoYXNB
bHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNB
bHBoYSkuZ2V0KCkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
Ci17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0Fs
cGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRhLT5tX2NnQ29u
dGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMg
d2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigp
KTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICB9
CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dzQ29udGV4
dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3VpdGFibGUg
Zm9yIGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kKQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hk
YyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAh
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUo
KTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0
IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGltYWdlID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7Ci0g
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3Qs
IGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVD
b250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CiAgICAg
CiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhkYyk7CkBAIC0x
MjQsMjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAo
V2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUoKS53aWR0aCgp
LCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVyUm93KCksIHNS
R0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdl
QWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lk
dGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAorICAgIENH
Q29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9jZ0NvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lk
dGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRleHRNYWMu
bW0uCiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNwcCBhbmQg
YmUgc2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4wZjsKICAgICBv
ZmZzZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5pc1ZhbGlk
KCkgPyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEgKzE0OCw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3R5bGUu
bW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcgJiYgc3R5bGUu
bW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRleHQuZ2V0KCkp
OwogfQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENH
OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGE7
Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKaW5kZXggZjE0
NDI1NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjNjOGYxZGQxMTQ1YjIxZWM1
NjFkYWY5MGExM2UzNmNmMzdkNGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNp
bmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNjYsMjggKzY2LDkgQEAgc3RhdGljIGNhaXJvX3Qq
IGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICBy
ZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERD
IGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4
dENhaXJvKEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJv
KGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0FscGhhKSkKIHsKLSAgICBwbGF0Zm9y
bUluaXQoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBo
YXNBbHBoYSk7Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNyKSk7Ci0gICAgbV9kYXRhLT5w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwotICAgIG1f
ZGF0YS0+bV9oZGMgPSBkYzsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmNyKCkpIHsKLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0
YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAg
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQotICAgIGlmIChj
cikKLSAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CiB9CiAjZW5kaWYKIApAQCAtMTI3LDkgKzEw
OCw5IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwg
fHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBj
cmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1hcCkgewot
ICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4LDQgKzE1
OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiB9CiAj
ZW5kaWYKIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRl
eCAyOWE4MmE4OTc4MjI5YjBmNTg3M2FiZGY4MmJmYWY4MDZjZjE2NTk4Li42NWU5N2Y5NzM0Njky
MjgyZDI3ZmMxZWQ3ODQ4OGQxODE3M2MxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAKQEAgLTQ3LDE3ICs0NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9v
bCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJn
ZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAg
ICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAgICBhdXRvIHRhcmdldFByb3BlcnRp
ZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCi0gICAgSFJFU1VMVCBo
ciA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdl
dCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKKyAgICBIUkVTVUxUIGhyID0gR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJn
ZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMsICZyZWN0
KTsKQEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChI
REMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRQogICAgIG1fZGF0
YS0+bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBl
KQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJU
eXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgp
CiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsK
ICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODksNyBAQCBJRDJEMUZhY3Rv
cnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAgcmV0dXJuIGRpcmVjdDJE
RmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVs
dFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdl
dCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYgKCFkZWZhdWx0UmVuZGVy
VGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJU
YXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywg
Ym9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5p
dChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRjKQogICAgICAgICByZXR1
cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRl
eHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBw
bGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUlu
aXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBwbGF0
Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZv
cm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFwbGF0Zm9ybUNv
bnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
Q29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1w
bC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwog
ICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIApAQCAtMTk1LDMzICsx
OTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJyZW50R2xv
YmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKICAg
ICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0bWFwPiYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdO
YXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250
ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250
ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxl
bmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93c0NvbnRleHQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkK
IHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwg
aXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIW1fZGF0
YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVhdGVkQml0
bWFwKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIERp
cmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdp
bmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAgIDo6
RGVsZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0
bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBp
bWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJEOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQog
ICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJl
clR5cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQor
ICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25l
ZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fb3du
ZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAgICAgLCBt
X3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVy
ZXJUeXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlx
dWVfcHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3JlbmRl
cmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMxMCw5ICsz
MDMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29saWRDb2xv
ckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1c2hX
aXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihj
b2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMgKzM2NCw2
MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFu
Z2xlKQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9i
YWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikg
Y29uc3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJl
bnRHbG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKIH0K
IAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QK
K0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVz
aC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCiB7CiAg
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1c2goKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9y
bVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJh
d1BhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
IXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAgRGlyZWN0
MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJ
bnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJEMV9TVFJP
S0VfU1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9r
ZVN0eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1f
cGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBt
X3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUpvaW4s
IG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAw
LjBmKTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0
cm9rZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNU
TTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU0
MywxMSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigp
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRDT00o
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRl
cm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZpbGxQ
YXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBv
biBXaW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxs
QnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdQ
YXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwg
RGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4
dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBw
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9
ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5m
aWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxS
ZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJl
Y3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6Zmls
bFJlY3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBhdXRv
IGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCgh
bV9pbXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZp
b3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVP
cGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwg
cHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8m
IGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6OkZp
bGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xp
cE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwogfQog
Ci1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRD
bGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEzLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
IW1faW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKQEAgLTc1
NCwxMTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVjdDJEOjpl
bmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNTRVJUKCFt
X2ltcGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhh
KCk7CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBw
b3J0c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgKHZv
aWQpb2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRo
aWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29u
dGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNz
IGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAg
ICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMg
aGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNv
bnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
KTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsK
KyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53
aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAg
ICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3Vs
ZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMg
c2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGlt
aXQobGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1f
c3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAor
ICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09
IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBi
cnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250
ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290aGluZ01v
ZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJEMV9U
RVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5y
ZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUpOwor
ICAgIH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9
PSBhbHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0KIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKKyAgICAg
ICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9s
YXRlOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJF
U1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZv
cm1Db250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBEaXJlY3Qy
RDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpjbGVhclJl
Y3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgp
OwogICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGly
ZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBj
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2Fw
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAg
ZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMu
c2l6ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
ICAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5n
dGg7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4p
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNj
YWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgqcGxh
dGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgp
LCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
ICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGlu
Y2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICBy
ZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0
Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMo
cmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewot
ICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMu
YXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9u
KCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VT
dHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25z
dCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVj
b3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5
IGxpc3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0K
LSAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9O
X01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwg
cXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5
ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBu
ZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICghaGFzUGxh
dGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBEaXJl
Y3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0
RHJhd2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICAodm9p
ZCltb2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBU1NF
UlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0g
YnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZv
ciBEaXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNldFN0cm9r
ZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8
fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KKyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9y
KTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOworICAg
IERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3Rh
dGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
fHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMo
KnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNFRF9QQVJB
TShmb250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4T2Zmc2V0
ID0gcG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBo
cyk7CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKKyAg
ICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7CiAK
LSAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElB
U19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUo
Zm9udFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1H
bHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAgICBtX2Rh
dGEtPnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChp
ICsgZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRo
KCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lk
dGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+
aGVpZ2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJsZSBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0
YXRlLCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250
YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJh
d2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0
ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGljc0NvbnRl
eHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7Ci0gICAg
Ly8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3Rh
dGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAg
ICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxs
aXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250ZXh0ID0g
JmdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0
UmVjdCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
fHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBE
aXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRl
LnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRl
ICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dERpcmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNy
ZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgK
LSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBs
RmFjdG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0pOwotfQot
Ci1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBt
X3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBH
cmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2
YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihy
ZW5kZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNv
bnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUt
PnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBtX3BsYXRm
b3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAg
ICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4
dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAg
ICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8v
IE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0
IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAg
ICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUm
PihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09m
ZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFk
b3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgp
IH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRl
T3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFyU2hh
ZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVD
YXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1fcGxhdGZv
cm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVz
LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lSm9p
bihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIERp
cmVjdDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQu
Y3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICgh
YnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFk
aWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0g
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJl
dmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09w
ZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNoYWRvd1N0
YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGlyZWN0MkQ6
OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0
YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNP
cGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0K
LSAgICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRl
eHQoKSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNlLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGly
ZWN0MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRF
bGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxp
bmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkp
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9r
ZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3Rh
dGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNl
KHJlY3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIERp
cmVjdDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICgh
Zm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhu
dW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBo
cyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlw
aHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0g
ICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20p
OwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAg
ICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0g
ICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgp
OwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJv
a2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBo
cywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0
YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dP
ZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6
ZHJhd05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhh
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9y
bUNvbnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRl
clRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ry
b2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVV
bmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1Bh
dGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cmVzdG9y
ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwg
YW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZShtX3Bs
YXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAg
RGlyZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIERp
cmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQs
IHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNs
aXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3Qg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4g
RGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAm
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0Nv
bnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9h
dFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1F
OiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5MGVlYTdi
NDJmMjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGlj
c0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCopOwotICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9vbCBoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBC
bGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRT
bW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4o
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQ
YXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsK
LQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0Owot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9w
cml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3NzVhNjJi
YWVhMjJmOTkwNjA3ZWI0Y2JkLi43N2RhZmUzMjBiYjA3MzA4OTAxMDBkN2M0YWYxMDQxNjM2OWU3
MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0YXRpYyB2
b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9STShXSU4p
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhib29s
IGluY2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgPSBp
bmNsdWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1ZGVD
aGlsZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hvdWxk
SW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9zaG91
bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRl
eHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKQEAgLTk1LDE1ICs5NSwxMyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5X
aW5kb3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6V2luZG93
c0JpdG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0IEludFNp
emUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4obV9kYXRh
LT5tX2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4oZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgogCiBIREMg
R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIEhEQyBoZGMgPSBudWxscHRyOwotICAg
IGlmICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEtPm1faGRjOworICAgIEhEQyBoZGMg
PSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAgICAgaWYg
KCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgaWYgKGRzdFJlY3Qu
aXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzMsMTcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0
V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEK
ICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAgICB9CiAKLSAgICBtX2RhdGEtPmZs
dXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7Cisg
ICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpoZGMoKSBjb25zdAogewot
ICAgIGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAg
cmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NTk5YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNjNzljMGNiYzBjNDc2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRl
eHRDRworCisjZWxpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQKKworI2VsaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENhaXJvCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1
YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1
MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFw
bGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250
ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsK
KyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihw
bGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2Uy
YmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAK
QEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklU
TUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcEluZm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgs
IGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29u
dGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsK
IAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlm
IChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3
YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWly
b1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fp
cm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0
YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
IGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6
OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRj
YTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWExN2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3
MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBo
aWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29u
dGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAg
IHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxF
RApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hD
b250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNj
cmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tl
U3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1
OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNi
ZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
RHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
CiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0
TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhT
aXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2UgKmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkg
aW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVy
ZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29u
dGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRl
cmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFn
ZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2Fs
ZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQs
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTpp
bWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0
aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRl
eHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5D
R0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQo
aW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwg
VGV4dEluZGljYXRvckRhdGEmIGluZGljYQogCiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXpl
OmltYWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlv
bnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dD
b250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQg
bm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhl
IHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJp
bHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
MCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0gKnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJ
bWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdl
XShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAg
ICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
Rm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAg
ICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVy
ZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFn
ZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAg
ICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRS
ZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDcz
YmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUg
IkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIyZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNi
ODg3M2Y1NTA5Li5hYzZlMjQ0ZDA0MWU5ZmU2YmY2MmYxZTYxNWFmOTllNmNmMjUwMmU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFdpbi5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCkBAIC0xODYsNyArMTg3LDcgQEAgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGluTGFiZWwsIFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0
T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KGNvbnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGNv
bnRleHRSZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwg
aG93ZXZlciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9u
IHdpbiwgc28gd2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBT
UkdCQTx1aW50OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2Fi
NmIxM2FmODM0NzJlNy4uMjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRXaW4uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIK
ICNpbmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1l
bnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAg
IDo6U2VsZWN0T2JqZWN0KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRX
aW4gY29udGV4dChtX0RDLmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VS
ZWN0IHRyYW5zbGF0ZWQgaW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxp
c3QgKHdoaWNoIGlzIGxpc3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIElu
dFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2
YzA5YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1
ZjQzYjc2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVs
UGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1
bFBhaW50Q2hlY2tlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM4LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZp
ZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3
LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
KTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBo
aWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3
LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJl
Y3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJl
Q29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2Mw
Yi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAs
MTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9
IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFk
b3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNo
YWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRv
dy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3co
c2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hv
b3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYg
aW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQz
OSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
aWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJv
eCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBk
b2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYg
KHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNl
dExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3Qs
IGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2
N2NjNjZlZTVhMjVjNzRkZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdj
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRl
ICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBl
cmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBA
IC0xNzg5LDcgKzE3OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRS
ZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBb
Jl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgbnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVs
bENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1No
YXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYx
NTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
YWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewog
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7
CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVh
dGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+
KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0Lmdl
dCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1h
cENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFi
bGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBD
Ry5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQw
NmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5n
ZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBD
b250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVC
aXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAw
OGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQy
NDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0
MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRl
eHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRm
Ni4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fp
cm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQ
dHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFj
a2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29u
c3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBv
aW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2Nh
dGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWly
b0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRl
eHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJh
d3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0
cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwg
Yml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3Zl
cndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1
Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMw
LDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
Ci0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1w
b3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9y
dCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4K
IAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRP
cmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7
CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkg
PSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0g
KHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0g
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRd
KTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0
bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
QmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0Jh
Y2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0
YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJl
Y3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmlu
ZGV4IDNjYWNiOWFlYzY0Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4
NjI5ZjYxM2QzMWI4NDczOTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
YmFyVGhlbWUuaD4KQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2lu
OjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNl
bGVjdE9iamVjdChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNv
bnRleHQobV9EQy5nZXQoKSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJh
Y2tCdWZmZXI7IAogICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9f
dXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1
ZmZlcikpOyAKQEAgLTg2Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpw
YWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAg
cGxhdGZvcm1Db250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRl
eHRXaW4gY29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRy
YW5zbGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1
Yjk4Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNk
ZjZmMGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250
ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVy
Q29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9y
dCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAog
I2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JF
TUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAt
MTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1
bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5j
ZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2Jk
Yjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00
Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
VE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJl
dGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVj
dCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBk
ZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVh
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAK
aW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0
MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApA
QCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVT
RShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5o
PgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQx
YzVjMy4uMDA5ZmU4OTA5NjU3MGZjNzM1NjAyNDdhNDIwZjU0NDZhODdkOTcwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIs
MTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRp
ZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJlYWxseSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0
aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTUzNzUsNyArNTM4MCw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50CiAgICAgICAgICAg
ICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICAgICAgICAgIENH
UERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAg
ICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4
LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsK
ICAgICAgICAgICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9w
cmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0
ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5
YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUwYWM5OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYs
NyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVy
KQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3KCk7CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0g
Z3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lkdGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklU
X0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1f
Y2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8g
Z3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4
dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9z
Y2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3JlKG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4
IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBi
N2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBA
QCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdp
ZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAg
UHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3Jh
cGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBp
eGVscykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dl
YktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJL
aXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAyYmEwMDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2
NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFz
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRy
YXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1
bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4
LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9u
dCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICoKIAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4
dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7IGNnQ29udGV4dCB9OworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAg
ICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEgZmxpcHBlZCBncmFwaGljcyBjb250ZXh0LgogICAg
ICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdo
dFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5ZWNmMWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4u
OTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2MyYjMzZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxp
Z2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZp
ZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3Qp
cmVjdAogCiAgICAgICAgIEFTU0VSVChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBD
R0NvbnRleHRdKTsKICAgICAgICAgW193ZWJOb2RlSGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xs
ZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQg
cmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYzNWQ3YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1
N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5NjIwZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2MTMsNyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNS
ZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRlbnRzT25seQogI2Vsc2UKICAgICBDR0Nv
bnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29udGV4dChjdHgpOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKaW5kZXgg
NTE5YTU3MzZkMmEzNTBkNzI3ODY3NjVmYjE4ZmNmMzM5YzVlYzY4ZS4uYWQ2NjA3ZTQ1MTBlNTlm
NTE4ZmVlZjFkOGNjNjM2NTZhODRlZDQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250
U2VsZWN0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25k
REMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRS
dW4uaD4KQEAgLTQ5MCw3ICs0OTEsNyBAQCB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6
OmRyYXcoKQogICAgIGF1dG8gYml0bWFwREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBh
dGlibGVEQyhIV25kREMobV9odWRXaW5kb3cpKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSBT
ZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG1fYml0bWFwLmdldCgpKTsKIAotICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KGJpdG1hcERDLmdldCgpLCB0cnVlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRXaW4gY29udGV4dChiaXRtYXBEQy5nZXQoKSwgdHJ1ZSk7CiAKICAgICBjb250ZXh0LnNh
dmUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDJmNTExMDMxMzYx
OTQ1N2NkYWMzYjMxY2E1YmQ1Mzc2YWJjYjIxNzcuLjhkYTkxOTQ4M2IwZGFhNzEwZDYyMzYyZTli
M2EwNDY5ZDUwMmJkY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTc0
LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lV2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HRElPYmplY3RDb3VudGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQu
aD4KQEAgLTMyMSw3ICszMjIsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVj
dFRvQ29udGV4dChSRUNUIHJlY3QsIF9Jbl8gSERDIGRldmljZUNvbnRleHQpCiAgICAgLy8gV2Ug
Y2FuJ3QgcGFpbnQgd2l0aCBhIGxheW91dCBzdGlsbCBwZW5kaW5nLgogICAgIHZpZXctPnVwZGF0
ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCBnYyhkZXZpY2VDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoZGV2aWNlQ29u
dGV4dCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh0cnVlKTsKICAgICBn
Yy5zYXZlKCk7CiAgICAgTE9ORyB3aWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7CkBAIC0z
NTIsNyArMzUzLDcgQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29u
dGV4dEF0UG9pbnQoUkVDVCByZWN0LCBQT0lOVCBwdCwgX0luXwogICAgIC8vIFdlIGNhbid0IHBh
aW50IHdpdGggYSBsYXlvdXQgc3RpbGwgcGVuZGluZy4KICAgICB2aWV3LT51cGRhdGVMYXlvdXRB
bmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoZGV2
aWNlQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGdjKGRldmljZUNvbnRleHQpOwog
ICAgIGdjLnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAgICAgZ2Muc2F2ZSgp
OwogICAgIEludFJlY3QgZGlydHlSZWN0KHJlY3QpOwpAQCAtMTgwOCw3ICsxODA5LDcgQEAgSFJF
U1VMVCBXZWJGcmFtZTo6c3Bvb2xQYWdlcyhIREMgcHJpbnREQywgVUlOVCBzdGFydFBhZ2UsIFVJ
TlQgZW5kUGFnZSwgdm9pZCogY3QKICAgICBmbG9hdCBoZWFkZXJIZWlnaHQgPSAwLCBmb290ZXJI
ZWlnaHQgPSAwOwogICAgIGhlYWRlckFuZEZvb3RlckhlaWdodHMoJmhlYWRlckhlaWdodCwgJmZv
b3RlckhlaWdodCk7CiAjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgR3JhcGhpY3NDb250
ZXh0IHNwb29sQ3R4KHBjdHgpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBzcG9vbEN0eChwY3R4
KTsKICAgICBzcG9vbEN0eC5zZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogCiAg
ICAgZm9yIChVSU5UIGlpID0gc3RhcnRQYWdlOyBpaSA8IGVuZFBhZ2U7IGlpKyspCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCmluZGV4IDA3YTJmNjA0ZjM5
N2EyYTU4YjJkNzc1MWM0NGVhOTIxOTQzMTg3MzAuLjQxYTJkY2RiMWExYWE3YTVlMjBhYTA3NWY2
OTFjMzk5ODRjNGZiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5v
ZGVIaWdobGlnaHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdo
bGlnaHQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZv
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgpAQCAtMTU3LDggKzE1OCw4IEBA
IHZvaWQgV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKCkKIAogICAgIDo6U2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcC5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChoZGMu
Z2V0KCkpOwotICAgIGNvbnRleHQuc2NhbGUobV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGhkYy5n
ZXQoKSk7CisgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0Pihjb250ZXh0KS5zY2FsZSht
X2luc3BlY3RlZFdlYlZpZXctPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgbV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kcmF3SGlnaGxp
Z2h0KGNvbnRleHQpOwogCiAgICAgQkxFTkRGVU5DVElPTiBiZjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKaW5kZXggYzExYWM5ZDk3ZGJhZmUyYTNmMjg0NzdjY2UwNDQxZDliOTc3MDM2
MC4uN2UxN2Y3MWQxNDJjMTZkYTUzZmU3MjY2ZjQ0Yzg4OWNkNDM4MmUyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvR2VvbG9jYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlv
bkVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTE5h
bWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9IV25kREMuaD4KQEAgLTEyNTAsNyArMTI1MSw3IEBAIHZvaWQgV2ViVmlldzo6cGFp
bnRXaXRoRGlyZWN0MkQoKQogCiAgICAgUkVDVCBjbGllbnRSZWN0ID0ge307CiAgICAgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KG1fcmVuZGVyVGFyZ2V0LmdldCgpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQgZ2MoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0Nv
bnRleHRXaW4gZ2MoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIAogICAgIHsKICAgICAgICAgbV9yZW5kZXJU
YXJnZXQtPlNldFRhZ3MoV0VCS0lUX0RSQVdJTkcsIF9fTElORV9fKTsKQEAgLTE0MDcsNyArMTQw
OCw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJh
bWVWaWV3LCBIREMgYml0bWFwREMsIGNvbnN0IEluCiAgICAgbV9iYWNraW5nU3RvcmVSZW5kZXJU
YXJnZXQgPSBudWxscHRyOwogI2VuZGlmCiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoYml0bWFw
REMsIG1fdHJhbnNwYXJlbnQpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhiaXRtYXBEQywg
bV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh3aW5k
b3dzVG9QYWludCA9PSBQYWludFdlYlZpZXdBbmRDaGlsZHJlbik7CiAgICAgZ2Muc2F2ZSgpOwog
ICAgIGlmIChtX3RyYW5zcGFyZW50KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDA1MDY5OGIwYmFmZGJlMDI4NzViMzM3ODg3NGY5NGJkZjdhZDNm
OGYuLjg3OTUyOTYwYmE4OTQ4MGUyYWI5ZTJkMTJiZDBjMjFjZjczOTI0N2YgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAg
ICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cv
RGlzcGxheUxpc3RUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
CiAyMDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBD
b252ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBp
bmcgYSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywg
ZXRjLikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9E
aXNwbGF5TGlzdFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKaW5kZXggODdhMzZhY2ZlNmExMDBjYzMyM2UyNDg5
N2ZjZTM4MDNmMjM0YTc3OC4uYTU5OGQ1NGEyNzUyOTU4YzQyZTRlMmI3OWU1MzM3YzU3YjE3NGI0
NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3Bs
YXlMaXN0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYWRpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ5LDcgKzUwLDcgQEAgVEVTVChEaXNwbGF5TGlz
dFRlc3RzLCBSZXBsYXlXaXRoTWlzc2luZ1Jlc291cmNlKQogCiAgICAgYXV0byBjb2xvclNwYWNl
ID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UucGxhdGZvcm1Db2xvclNw
YWNlKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50
aWZpZXIgPSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAKQEAgLTEx
Myw3ICsxMTQsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIE91dE9mTGluZUl0ZW1EZWNvZGlu
Z0ZhaWx1cmUpCiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNy
ZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsg
Y2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29u
dGV4dC5nZXQoKSB9OwogCiAgICAgRGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0OwogICAgIFdyaXRp
bmdDbGllbnQgd3JpdGVyOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0
cywgSW5saW5lSXRlbVZhbGlkYXRpb25GYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0g
YWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwog
ICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0
ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xv
clNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29u
dGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gcnVuVGVzdFdp
dGhJbnZhbGlkSWRlbnRpZmllciA9IFsmXShGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgewog
ICAgICAgICBFWFBFQ1RfRkFMU0UoaWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>
<flag name="commit-queue"
          id="450879"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429640</attachid>
            <date>2021-05-25 03:09:42 -0700</date>
            <delta_ts>2021-05-25 12:41:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525030941.patch</filename>
            <type>text/plain</type>
            <size>386353</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc3OTg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjg5ZmZlMGYwYjA5ZTNk
Y2EyOGMzNmQxZTcwYjBiYmQwODcyMDMwMy4uYjFlNzZjNmYwMDE4ZmRhNDRjYzFjN2M4MTI2MzVk
YWI0ZWE0MzY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA1LTI0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUg
R3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwog
MjAyMS0wNS0yNCAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29u
dmVydCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UgZnJvbSBhbiBlbnVtIHRvIGNsYXNzIHdyYXBwaW5n
IGEgcGxhdGZvcm0gY29sb3Igc3BhY2UgKENHQ29sb3JTcGFjZVJlZiBmb3IgQ0cgcG9ydHMsIGV0
Yy4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCmluZGV4IGQ1NjI5NDBhOGVkNzFlNzBmNDQ0OWM4YjcyY2JhZWJhOWNkMmQ5NTMu
LjFmZGIxNjI0MGUyYTFjNjY0MmRkYjY0NGFjMjlkN2FkYjQ1YTFlNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMjEtMDUtMjQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC9jZy9TaGFyZWFibGVCaXRt
YXBDRy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KToKKyAgICAgICAgKiBTaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJE
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkJhY2tpbmdTdG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW06CisgICAgICAgICgtW1dLUHJp
bnRpbmdWaWV3IF9kcmF3UHJldmlldzpdKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbToKKyAgICAgICAgKFdlYktpdDo6UERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JM
YXllckluQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGRmU25hcHNob3RBdFNpemUp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkcmF3UGFnZXNUb1BE
RkltcGwpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcmludE9wZXJhdGlvbkd0azo6cmVuZGVy
UGFnZSk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFz
cyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENH
IHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGZkNjA5MjU0NGJi
MjU1YTE0MDBlOWQ5YjQ1YWVhMGE5YWY0ODc2M2QuLjE2MDU4YWZlMDBiZWM3YzhmZTlhNjIyYjc3
YTZkNzVkZThhNjZlNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAyMS0wNS0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
KworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
OgorICAgICAgICAoLVtXZWJGcmFtZSBwcmludFRvQ0dDb250ZXh0OnBhZ2VXaWR0aDpwYWdlSGVp
Z2h0Ol0pOgorICAgICAgICAqIE1pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW06CisgICAgICAg
ICgtW05TU3RyaW5nIF93ZWJfZHJhd0F0UG9pbnQ6Zm9udDp0ZXh0Q29sb3I6XSk6CisgICAgICAg
ICogV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tOgorICAgICAgICAoLVtXZWJO
b2RlSGlnaGxpZ2h0VmlldyBkcmF3UmVjdDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZHJhd1JlY3Q6Y29udGVudHNPbmx5Ol0pOgorCiAy
MDIxLTA1LTI0ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBDb252
ZXJ0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSBmcm9tIGFuIGVudW0gdG8gY2xhc3Mgd3JhcHBpbmcg
YSBwbGF0Zm9ybSBjb2xvciBzcGFjZSAoQ0dDb2xvclNwYWNlUmVmIGZvciBDRyBwb3J0cywgZXRj
LikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGVmODU2YmNhOTE0YmE4NGYyYjQ2NmE0ZDc4OTZmNTcy
MDljYmYzOWMuLmNlY2ZiNTU4YzI2ZjQyOGFiMjUxYmM4YmMwZjhhODJhZjA2MGY5YmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTIzOSw3ICsxMjM5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0wuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckZhY3RvcnkuaApAQCAtMTI4Niw2ICsx
Mjg1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFVc2FnZUluZm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL05hdGl2ZUltYWdl
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9PcGVuR0xFU1NoaW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9PcGVu
R0xTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRX
LmNtYWtlCmluZGV4IDRjYzM5MTk5MzE1NDczZDlhZDMxNzJiNmFhYzFiNTliYThiZjE5MWMuLjg2
N2QyNTM2MTMwN2ZjOWVkMDExNmM3YzExYTc4MGU0NzZmN2RlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
RlRXLmNtYWtlCkBAIC00Myw3ICs0Myw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dlbmVyaWMvS2V5ZWRFbmNvZGVyR2VuZXJpYy5jcHAKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHRJbXBsLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5j
cHAKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VnbC9HTENvbnRleHRFR0wuY3BwCkBAIC03MSw3
ICs3MCw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRHTERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRXaW4uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmNwcApAQCAtMTg5LDcgKzE4Nyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3RXcml0ZVV0aWxp
dGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZDA4MzA5OTg0ZmFmMTVlYWM2Njk0ZWM2MDRmM2U0NTlmZWY5NzUyNC4uYjIy
MGFmMjBiZDNiOTVhNGU3OWYxMTNmMjhkNmQwODBkMGUwY2I3NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKQEAgLTExNCw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGll
bnQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4
IGE1Yzc1ZGY3OTFkNzFiZDY3Mzc0NGZiM2YwNDgzNmI3NzJhYzk5ZDkuLmVhYWZiOWUwYjM2YmQz
MGY3ZDgxNzg5NjJlZjVmMzAwN2QzYzRjZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xOTgzLDcgKzE5
ODMsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0R0wuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFj
dG9yLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyVHJhbnNmb3JtLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggN2YwZmRmNDI5Mjg3NTRhOWY0ZjI3YWI3M2U4Y2FhY2JkNTgzOGVmZC4uNTFi
ZWIwNzNlMTI1ZmU1ZjgwNDA3NDU2ZTlkNzRkMWUzNWY3YzFiNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODYxLDcgKzg2MSw3
IEBACiAJCTJEOUJGNzQ2MURCRkRDNDcwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MzMxREJGREMwRjAw
N0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgKi87IH07CiAJCTJEOUJGNzQ3MURCRkRDNDkwMDdBN0Q5
OSAvKiBNZWRpYUtleU1lc3NhZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjcyRjFEQkZEQzBGMDA3QTdEOTkgLyogTWVkaWFLZXlN
ZXNzYWdlRXZlbnQuY3BwICovOyB9OwogCQkyRDlGMEUxMzE0RkYxQ0JGMDBCQTBGRjcgLyogbGlu
ZWFyU1JHQi5pY2MgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJEOUYwRTEyMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLzsgfTsKLQkJ
MkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMDAxMjNGMUZBRDg3RDYw
MDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51
bGxHcmFwaGljc0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRB
RjM0M0QxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEQUYzNDNCMUVBN0UwRjEwMDM4
MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggKi87IH07CiAJCTJEQzhEMzk4MjVGMkZFOTcw
MENGQ0JBQiAvKiBNb2RlbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRDOEQzOTcyNUYyRkU5NDAwQ0ZDQkFCIC8qIE1vZGVsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAw
OUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9z
aXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNjA4OCw4ICs2MDg4LDYgQEAKIAkJMEM0NTM0MjYxMENEQkJGQTAwODY5MTU3
IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRTcwNThFRDFCQzVCQzE5MDA0NUE1MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWFyY2hQb3B1cE1lbnVD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEU3MDU4RjMxQkM1Q0NENzAw
NDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlYXJjaFBv
cHVwTWVudUNvY29hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMDAxMjNGMUZB
RDg3RDYwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEy
NDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR3JhcGhpY3NDb250ZXh0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGMDNDMDczMTg4NDY5NUUwMEE1RjhDQSAvKiBTeXN0ZW1NZW1vcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3lzdGVtTWVtb3J5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMDk5RDA2MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRB
cnJheUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYwOTlEMDcxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5Q29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlVHlwZWRBcnJh
eUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTczMjksNiArNzMy
Nyw3IEBACiAJCTJEOUJGNzQwMURCRkRDMEYwMDdBN0Q5OSAvKiBOYXZpZ2F0b3JFTUUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmF2aWdhdG9yRU1FLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5QkY3NDExREJGREMwRjAwN0E3RDk5IC8qIE5h
dmlnYXRvckVNRS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JF
TUUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkQ5RjBFMTIxNEZGMUNCRjAwQkEw
RkY3IC8qIGxpbmVhclNSR0IuaWNjICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gZmlsZTsgcGF0aCA9IGxpbmVhclNSR0IuaWNjOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNz
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOdWxsR3JhcGhpY3ND
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJDMTlEQ0FGNjAw
MEUwMDJEMiAvKiBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkQxOURDQUY2MDAwRTAwMkQyIC8qIE1vY2tQYWdlT3Zl
cmxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUGFnZU92
ZXJsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBRjM0M0ExRUE3
RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0yNzAxNSw4ICsyNzAxNCw2IEBACiAJCQkJN0MzMzBBMDExREY4
RkFDNjAwRDMzOTVDIC8qIEdyYXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovLAogCQkJCTdC
QjM0QTQ3MjUzNzc2QzcwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTEltYWdlRXh0cmFjdG9y
LmNwcCAqLywKIAkJCQk3QkIzNEE0NTI1Mzc3NkM2MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0
R0xJbWFnZUV4dHJhY3Rvci5oICovLAotCQkJCTBGMDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLywKLQkJCQkwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovLAogCQkJCTBGNTgwQjA5MEYxMkEyNjkwMDUxRDY4
OSAvKiBHcmFwaGljc0xheWVyLmNwcCAqLywKIAkJCQkwRjU4MEIwQTBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllci5oICovLAogCQkJCTBGNTgwQjBCMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyQ2xpZW50LmggKi8sCkBAIC0yNzA5Nyw2ICsyNzA5NCw3IEBACiAJCQkJMzE0
QkUzQTUxQjMxMDNGQjAwMTQxOTgyIC8qIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZS5oICovLAog
CQkJCTcyNTIzOTZCMjU0Q0FEQzIwMEY1RkIxNSAvKiBOYXRpdmVJbWFnZS5jcHAgKi8sCiAJCQkJ
NTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJMkRBMzk3
RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMjc1
MzU1MjBCMDUzODE0MDAyQ0U2NEYgLyogUGF0aC5jcHAgKi8sCiAJCQkJQjI3NTM1NTMwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBhdGguaCAqLywKIAkJCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLywKQEAgLTMyMzAwLDcgKzMyMjk4LDYgQEAKIAkJCQkx
Q0U4RDEyNzI2MTg1QzBFMDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVtQnVmZmVySWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUY0Mzc3RDU3MjU1MUM5QzYwMDgwQUJG
RSAvKiBEaXNwbGF5TGlzdEl0ZW1UeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzNFNjI0MzI2
NTk3OTE4MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQ0U4RDEyRTI2MTg2MUM0MDBGQzNBRUYgLyogRGlzcGxheUxpc3RJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVj
b3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA1LDcgKzMyNzAyLDYg
QEAKIAkJCQk3QjZEQzgxOTI1NzEyRTkyMDAzODBDNzAgLyogR3JhcGhpY3NDb250ZXh0R0xJT1N1
cmZhY2VTd2FwQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5
RDQ0NyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5
QTcyODgyM0MyNjdGRTAwODUzNTNDIC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMTWFuYWdlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRBQ0I5RTkyMzc1NUQwMDAwQjRDMTg1IC8qIEdyYXBoaWNz
Q29udGV4dEltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEQ2NzA4MEU5RTlERUIwMEU0MjBG
MCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1ODBCMEQwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBoaWNzTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBp
biBIZWFkZXJzICovLApAQCAtMzQzNjYsNiArMzQzNjIsNyBAQAogCQkJCTFBNTY5RDExMEQ3RTJC
ODIwMDdDMzk4MyAvKiBucHJ1bnRpbWVfcHJpdi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5MjdG
RDQxNDE2QTE1QjAwM0E4M0M4IC8qIG5wdHlwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNTAw
RjMyMTNGREUzQkUwMDk5RUMyNCAvKiBOU1Njcm9sbGVySW1wRGV0YWlscy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRBMzk3RTUyNjVDNzM3NTAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NUIzREM4MTI1MUYxMkQwMDNFRjI2OSAvKiBOdW1iZXJJ
bnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDEyMEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2NsYXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxNDBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19oZWFkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ1MzgsNiArMzQ1MzUsNyBA
QAogCQkJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ5M0U1RTA5MTJENjQyMDUwMDAyMDA4MSAvKiBQbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENzBCQTEzMTgwNzREREYwMDAxOTA4QSAv
KiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMzRTYyNDMyNjU5
NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE0OTc4NzExQUJBRjNBNTAwQ0VGN0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM1Qzc2MkIxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9y
bUV2ZW50RmFjdG9yeUlPUy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAppbmRl
eCAwMDk3OWQwMDliODU1NjNlNTI3ZjgyODFmZTcyYTlkMTc5OTMwYWUzLi5kNDY4ZmJjMGY3NmFi
MGIyZGIyMjJhZDYwYWNjZGU0YzY2NWRmMjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKQEAgLTEy
OTgsMTAgKzEyOTgsNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRv
dyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBhdXRvIHNo
YWRvd1JlY3RPcmlnaW4gPSBmaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKSArIHNoYWRvd09mZnNl
dDsKICAgICAgICAgYXV0byBhZGp1c3RlZFNoYWRvd09mZnNldCA9IHNoYWRvd1JlY3RPcmlnaW4g
LSBhZGp1c3RlZEZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpOwogCi0gICAgICAgIGlmIChzaGFk
b3cuaXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFNoYWRvdyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3cuY29sb3IoKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRv
dyhhZGp1c3RlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSwgc2hh
ZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFk
b3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYm94IGlzIG9wYXF1ZSwgaXQgaXMgdW5uZWNlc3Nhcnkg
dG8gY2xpcCBpdCBvdXQuIEhvd2V2ZXIsIGRvaW5nIHNvIHNhdmVzIHRpbWUKQEAgLTE0MTIsMTEg
KzE0MDksNyBAQCB2b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJveFNoYWRvdyhQYWlu
dGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCwgU2hhZAogICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC50cmFuc2xhdGUoZXh0cmFPZmZzZXQpOwogICAgICAgICBzaGFkb3dPZmZzZXQg
LT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygp
KQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotCisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93
LmNvbG9yKCksIHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHNoYWRvd0Nhc3RpbmdSZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cAppbmRleCA0ZjQ2ZjY1OTA5NTlhMWU0Y2RkY2RjYzM3NTI4MDUxNmQ0MmNhMWQxLi5lN2MwMjg1
Zjc1NTQ1NDgwM2IxNDBjOTIwYmQ0YjJhZmRmZTYxZjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cApAQCAtMjUyLDcgKzI1Miw3IEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQmFzZSgpLmV4aXN0aW5nRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpOworICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCiAgICAgcmV0dXJuIGZhbHNl
OwogI2VuZGlmCkBAIC0xMTIwLDcgKzExMjAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNsaXBJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBDYW52YXNGaWxsUnVsZQog
ICAgICAgICByZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBjLT5jYW52YXNDbGlw
KHBhdGgsIHRvV2luZFJ1bGUod2luZGluZ1J1bGUpKTsKKyAgICBjLT5jbGlwUGF0aChwYXRoLCB0
b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6YmVnaW5Db21wb3NpdGVMYXllcigpCkBAIC0xMjEyLDcgKzEyMTIsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgc2F2ZWQgPSB0cnVlOwotICAgICAgICBjb250
ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJs
YWNrKTsKKyAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9CiAgICAg
aWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAgICBpZiAoIXNhdmVkKSB7CkBA
IC0xMzc5LDkgKzEzNzksOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFw
cGx5U2hhZG93KCkKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewogICAgICAgICBmbG9h
dCB3aWR0aCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCk7CiAgICAgICAgIGZsb2F0IGhl
aWdodCA9IHN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpOwotICAgICAgICBjLT5zZXRMZWdh
Y3lTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAtaGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBz
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgYy0+c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgU2hh
ZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKICAgICB9IGVsc2UKLSAgICAgICAgYy0+c2V0TGVnYWN5
U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisgICAgICAg
IGMtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2ssIFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiB9CiAKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2hvdWxkRHJhd1NoYWRvd3MoKSBjb25zdApAQCAtMjAzMCw3ICsyMDMwLDcgQEAg
RXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0
ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShuYXRpdmVJbWFnZS5yZWxlYXNlTm9uTnVsbCgp
LCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBy
ZW5kZXJpbmdNb2RlID0gIWRyYXdpbmdDb250ZXh0KCkgfHwgZHJhd2luZ0NvbnRleHQoKS0+aXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKyAgICBhdXRvIHJlbmRlcmluZ01vZGUgPSBkcmF3aW5n
Q29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIGltYWdlQnVmZmVyID0gdmlkZW9FbGVtZW50
LmNyZWF0ZUJ1ZmZlckZvclBhaW50aW5nKHNpemUodmlkZW9FbGVtZW50KSwgcmVuZGVyaW5nTW9k
ZSwgY29sb3JTcGFjZSgpLCBwaXhlbEZvcm1hdCgpKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI0NzMsNyArMjQ3Myw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd1RleHRVbmNoZWNrZWQoY29uc3QgVGV4dFJ1biYg
dGV4dFJ1biwgZmxvCiAKICAgICAgICAgICAgIHNoYWRvd09mZnNldCArPSBvZmZzZXQ7CiAKLSAg
ICAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywg
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgYy0+c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hh
ZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5KTsKIAogICAg
ICAgICAgICAgaWYgKGZpbGwpCiAgICAgICAgICAgICAgICAgYy0+c2V0RmlsbENvbG9yKENvbG9y
OjpibGFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggM2ZmM2M2OTlmZWYzZjQ2
Y2U0ZmM3ZTk1NmUzM2FkMzYwYWZhNzNlYy4uZDNjOWVkMzJjNzdmNTA1YjBjOGViZDMyNTNlNmQw
NDM1OWQ2NjEzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNjksNiArNjksNyBA
QAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKICNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJPdmVyZmxvd0V2ZW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgog
I2luY2x1ZGUgIlBhZ2VPdmVybGF5Q29udHJvbGxlci5oIgpAQCAtNDE4NCwxMiArNDE4NSwxMiBA
QCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlQ29udHJvbFRpbnRzKCkKICAgICAgICAgcGFnZS0+c2V0
SXNDb3VudGluZ1JlbGV2YW50UmVwYWludGVkT2JqZWN0cyhpc0N1cnJlbnRseUNvdW50aW5nUmVs
ZXZhbnRSZXBhaW50ZWRPYmplY3QpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCit2b2lkIEZyYW1lVmlldzo6dHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQogewogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBsYXlvdXRDb250ZXh0KCkubGF5b3V0KCk7CiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChwYWludEludmFsaWRhdGlvblJlYXNvbnMpOwogICAgIGlmIChwbGF0Zm9y
bVdpZGdldCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBjb25zdWx0IHBhaW50c0VudGlyZUNvbnRl
bnRzKCkuCiAgICAgICAgIHBhaW50Q29udGVudHMoY29udGV4dCwgdmlzaWJsZUNvbnRlbnRSZWN0
KExlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpKTsKQEAgLTQ3MzksNyArNDc0MCw3IEBAIHZv
aWQgRnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZChmbG9hdCAqbmV3Qm90dG9t
LCBmbG9hdCBvbGRUb3AsIGZsb2F0CiAKICAgICB9CiAgICAgLy8gVXNlIGEgY29udGV4dCB3aXRo
IHBhaW50aW5nIGRpc2FibGVkLgotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KEdyYXBoaWNz
Q29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zOjpOb25lKTsKICAgICByZW5kZXJWaWV3LT5zZXRUcnVuY2F0ZWRBdChzdGF0aWNfY2Fz
dDxpbnQ+KGZsb29yZihvbGRCb3R0b20pKSk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QoMCwgc3Rh
dGljX2Nhc3Q8aW50PihmbG9vcmYob2xkVG9wKSksIHJlbmRlclZpZXctPmxheW91dE92ZXJmbG93
UmVjdCgpLm1heFgoKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsZihvbGRCb3R0b20gLSBvbGRUb3Ap
KSk7CiAgICAgcmVuZGVyVmlldy0+c2V0UHJpbnRSZWN0KGRpcnR5UmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAppbmRleCA5ZWQxYzcyM2U5OWMyYTJjYTYxOWNjODg1ZWUyYWNhNTY2NmY5YTBm
Li5mOGUwMjExNzAwN2NjOWYwNmVkZWNlNTFmZjc5ZjU4MDQ4NWExN2QzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJMYXlvdXRNaWxlc3RvbmUuaCIKICNpbmNsdWRlICJMYXlvdXRSZWN0Lmgi
CisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2luYXRpb24u
aCIKICNpbmNsdWRlICJQYWludFBoYXNlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgpA
QCAtNjY2LDkgKzY2Nyw5IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lRmxh
dHRlbmluZyBlZmZlY3RpdmVGcmFtZUZsYXR0ZW5pbmcoKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQ29udHJvbFRp
bnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Ci0gICAg
dm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQYWlu
dEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6
SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGlu
dHMoKSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6
UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250cm9sVGludHMpOyB9Cisg
ICAgdm9pZCBpbnZhbGlkYXRlSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIHsgdHJhdmVyc2VGb3JQ
YWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CiAKICAgICB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJzRm9yQWxsU2Nyb2xsYWJsZUFyZWFzKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKaW5kZXggNzNkOGI0OWNlYTdjYTY1OGQ1NTQ2ZDNl
YjE1MjJhZDM0YzBhZWMxYy4uYTE4ZmU1YmJhYjdlMzY0OTkzMjlmMmFjZjdjZjZmMDNhZDI2YjZh
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAKQEAgLTcyLDcgKzcyLDcg
QEAgR0RJT2JqZWN0PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoY29uc3QgRnJhbWUqIGZyYW1lLCBJ
bnRSZWN0JiBpcikKICAgICAgICAgOCwgdyAqIHNpemVvZihSR0JRVUFEKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZEZpcnN0KSk7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0LmdldCgpKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjb250ZXh0LmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRDRyBnYyhjb250ZXh0LmdldCgpKTsKIAogICAgIGRyYXdSZWN0SW50b0NvbnRleHQoaXIs
IGZyYW1lLT52aWV3KCksIGdjKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS93
aW4vRnJhbWVHZGlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVHZGlXaW4u
Y3BwCmluZGV4IDE2MWI0ZTkzMjZmNWIyYjAxNjkwYWUxNDkxOTdlYmZlODMwZmViOTcuLmI3OWZl
YmY2MzhhNmFiOWM0MmYzZjI0NmVjNDFkMmM1MmFlZWVlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2RpV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L3dpbi9GcmFtZUdkaVdpbi5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgPHd0Zi93aW4vR0RJT2Jq
ZWN0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU5LDcgKzYwLDcgQEAgR0RJT2JqZWN0
PEhCSVRNQVA+IGltYWdlRnJvbVJlY3QoRnJhbWUqIGZyYW1lLCBJbnRSZWN0JiBpcikKICAgICBI
R0RJT0JKIGhibXBPbGQgPSA6OlNlbGVjdE9iamVjdChibXBEQy5nZXQoKSwgaEJtcC5nZXQoKSk7
CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBnYyhibXBEQy5nZXQoKSk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYyhibXBEQy5nZXQoKSk7CiAgICAgICAgIHZpZXctPnBh
aW50KCZnYywgaXIpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCBjMWI1MzYwNTcxMzc3NGRjMDA2ZDAyOGVkYTdjNmE4MjEzZDZjY2ExLi4yMzdlYmZiYjgwMzM4
ZDMxM2QyYTUxYTc3ZTI4MzA5ZDcwNWZiZjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTIsNyArMTIsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNr
ZW5kQ2Fpcm9YMTEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDVmMDE0OTRmM2Nh
MWUzMWQ3NDdiZjdjN2FmYjc2YWQwY2Q3ZjY3MGIuLjE5N2UzM2NkYzM3NTM4YWM5MDBjODdkNTRk
OWM2YzNmMzU2OWY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMjksNyArMjksNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0KaW5kZXggNmQ4MTE4ODg4NDY0ZDgxNTVk
OWQ1MDgzMmNjYmE2NDNiMTg3ZGFkOC4uYTA3ZDY0NmEyZTgwYzFmZTNlNTE1NGFkN2U4ZjZlMDE0
ODllYjlmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0lt
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdl
Q29jb2EubW0KQEAgLTM1LDcgKzM1LDcgQEAKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAjaW1w
b3J0ICJGb250RGVzY3JpcHRpb24uaCIKICNpbXBvcnQgIkZvbnRTZWxlY3Rvci5oIgotI2ltcG9y
dCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2lt
cG9ydCAiSW1hZ2UuaCIKICNpbXBvcnQgIkxvY2FsRGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaCIK
ICNpbXBvcnQgIlBhZ2UuaCIKQEAgLTMwMCw3ICszMDAsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBlbGVtZW50LCBVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiB0aQogICAgIFJldGFpblB0cjxOU0ltYWdlPiBkcmFnSW1hZ2UgPSBhZG9wdE5TKFtbTlNJbWFn
ZSBhbGxvY10gaW5pdFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFtkcmFnSW1hZ2UgX3dlYl9s
b2NrRm9jdXNXaXRoRGV2aWNlU2NhbGVGYWN0b3I6ZGV2aWNlU2NhbGVGYWN0b3JdOwogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XS5DR0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XS5DR0NvbnRleHQpOwogCiAgICAgY29udGV4dC5maWxsUm91
bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChsYXlvdXQuYm91bmRpbmdSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaShsaW5rSW1hZ2VDb3JuZXJSYWRpdXMpKSwgY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9yXSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHAKaW5kZXggODdhNDRhNTM0N2FiODZi
YThlMTkzMGYwNDIwZTY0NTA5NTYwYjgxZC4uOTZjOWYwZTY4ZDFiOWY0YTFhODg1YzAwYTAzZjNi
MWY1ZjM0OTc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnRDYXNjYWRlLmNwcApAQCAtMjI5LDkgKzIyOSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5
TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gRm9udENhc2NhZGU6OmRpc3BsYXlMaXN0Rm9yVGV4
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNw
bGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4gZGlzcGxheUxpc3QgPSBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PigpOwotICAgIEdyYXBoaWNzQ29udGV4dCBy
ZWNvcmRpbmdDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkg
ewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxEaXNwbGF5TGlzdDo6UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgKmRpc3BsYXlMaXN0LCBjb250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgp
LCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwgRGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEb250RGVjb25zdHJ1Y3QpOwotICAgIH0p
OworICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciByZWNvcmRpbmdDb250ZXh0KCpkaXNwbGF5TGlz
dCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJlY3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxw
dHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjo6RG9udERlY29uc3RydWN0KTsKICAgICAKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQg
PSB0b0Zsb2F0UG9pbnQoV2ViQ29yZTo6c2l6ZShnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgp
KSk7CiAgICAgZHJhd0dseXBoQnVmZmVyKHJlY29yZGluZ0NvbnRleHQsIGdseXBoQnVmZmVyLCBz
dGFydFBvaW50LCBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggOTkzNmI3
NzUzYmVmOWU1MTMxMTlmMjkwNjNmYzM1YWVlZGE2OTMyZS4uOTcwYzM3NWNiZDU4MTlhMjAwYjIw
YjY3MTMyODcwYWQ1ZDkxN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJNZWRp
YVBsYXllci5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIk51
bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC04MiwxMSAr
ODIsNiBAQCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUoKQogICAg
ICwgc2hvdWxkU21vb3RoRm9udHModHJ1ZSkKICAgICAsIHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250cyh0cnVlKQogICAgICwgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCi0jaWYgVVNF
KENHKQotICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdp
dGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAotICAgIC8vIGJ1dCB3
ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdl
YmtpdC1ib3gtc2hhZG93LgotICAgICwgc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyhmYWxzZSkKLSNl
bmRpZgogICAgICwgZHJhd0x1bWluYW5jZU1hc2soZmFsc2UpCiB7CiB9CkBAIC0xNjAsMTAgKzE1
NSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgRwogICAgIH0KIAogICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotICAgICAgICAv
LyBGSVhNRTogRGVhbCB3aXRoIHN0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMuCiAgICAgICAg
IG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwogICAgICAgICBtX3N0
YXRlLnNoYWRvd0JsdXIgPSBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBtX3N0YXRlLnNoYWRv
d0NvbG9yID0gc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgIG1fc3RhdGUuc2hhZG93UmFkaXVz
TW9kZSA9IHN0YXRlLnNoYWRvd1JhZGl1c01vZGU7CiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNv
bnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAt
MjI5LDE0ICsyMjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdl
KSkKICAgICAgICAgY29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0jaWYgVVNFKENHKQotICAg
ICAgICBpZiAobV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQotICAgICAgICAgICAgY29u
dGV4dC5zZXRMZWdhY3lTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93
Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgfQorICAgIGlmIChtX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKQorICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCiAg
ICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNzKG1f
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKQEAgLTMwMiw5ICsyOTEsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogICAgIGlmICht
X2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
KSB7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LWJsdXIiLCBtX3N0YXRlLnNoYWRv
d0JsdXIpOwogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1vZmZzZXQiLCBtX3N0YXRl
LnNoYWRvd09mZnNldCk7Ci0jaWYgVVNFKENHKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNo
YWRvd3MtdXNlLWxlZ2FjeS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMp
OwotI2VuZGlmCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93cy11c2UtbGVnYWN5LXJh
ZGl1cyIsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kpOwogICAgIH0KIAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpKQpAQCAtMzYxLDU1ICszNDgsMTkgQEAg
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2UmIHN0YXRlQ2gKICAgICByZXR1cm4gdHM7CiB9CiAKLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBwYWludEludmFs
aWRhdGlvblJlYXNvbnMpCi0gICAgOiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyhwYWludElu
dmFsaWRhdGlvblJlYXNvbnMpCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCkKLXsK
LSAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSYgZmFjdG9yeUZ1bmN0aW9uKQotICAgIDogbV9pbXBsKGZhY3RvcnlGdW5jdGlvbigqdGhpcykp
Ci17Ci19Ci0KIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiB7CiAgICAgQVNT
RVJUKG1fc3RhY2suaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fdHJhbnNwYXJlbmN5Q291bnQp
OwotICAgIHBsYXRmb3JtRGVzdHJveSgpOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aGFz
UGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5oYXNQbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gISFtX2RhdGE7Cisg
ICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZSgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV9zdGFjay5hcHBlbmQobV9zdGF0ZSk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2F2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmIChtX3N0YWNrLmlzRW1wdHkoKSkgewogICAgICAgICBMT0dfRVJST1IoIkVSUk9SIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCkgc3RhY2sgaXMgZW1wdHkiKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDIyLDIwICszNzMsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmUoKQogICAgIC8vIENhbnZhcyBlbGVtZW50cyB3aWxsIGltbWVkaWF0ZWx5IHNhdmUoKSBhZ2Fp
biwgYnV0IHRoYXQgZ29lcyBpbnRvIGlubGluZSBjYXBhY2l0eS4KICAgICBpZiAobV9zdGFjay5p
c0VtcHR5KCkpCiAgICAgICAgIG1fc3RhY2suY2xlYXIoKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5yZXN0b3JlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgZWxsaXBz
ZUNvbG9yLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc2F2ZSgpOwogCiAgICAgc2V0U3Ryb2tl
Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNDUxLDY3ICszOTIsMjEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGVsbGkKICAgICByZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
dHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKQotewotICAgIG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID0gdGhpY2tuZXNzOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51
cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNz
Q2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJv
a2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBtX3N0YXRlLnN0cm9rZVN0eWxlID0g
c3R5bGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdHlsZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9
IG9mZnNldDsKLSAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwotICAgIG1fc3RhdGUuc2hh
ZG93Q29sb3IgPSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVn
YWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0No
YW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zm
c2V0LCBibHVyLCBjb2xvcik7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExlZ2FjeVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlIHJhZGl1c01vZGUpCiB7CiAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBvZmZz
ZXQ7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBtX3N0YXRlLnNoYWRvd0Nv
bG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJh
ZGl1cyA9IHRydWU7Ci0jZW5kaWYKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3cob2Zmc2V0LCBi
bHVyLCBjb2xvcik7CisgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID0gcmFkaXVzTW9kZTsK
KyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKQEAgLTUxOSwx
NSArNDE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hhZG93KCkKICAgICBtX3N0
YXRlLnNoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSgpOwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9
IDA7CiAgICAgbV9zdGF0ZS5zaGFkb3dDb2xvciA9IENvbG9yKCk7Ci0jaWYgVVNFKENHKQotICAg
IG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJTaGFkb3coKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjbGVhclBsYXRmb3JtU2hhZG93KCk7CisgICAgbV9zdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdDsKKyAgICB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKIH0KIAogYm9v
bCBHcmFwaGljc0NvbnRleHQ6OmdldFNoYWRvdyhGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQmIGJs
dXIsIENvbG9yJiBjb2xvcikgY29uc3QKQEAgLTU0NCw2NiArNDMyLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAg
IG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
czsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0NoYW5nZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRB
bnRpYWxpYXMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxp
YXM7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzaG91
bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFNtb290
aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7Ci0gICAgCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
aG91bGRTbW9vdGhGb250c0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzaG91bGRTbW9vdGhGb250cyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRTdWJw
aXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHM7Ci0gICAgaWYg
KG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSkKLXsKLSAgICBtX3N0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5OwotCi0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYxMSw4
ICs0NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJiBwYXR0ZXJuKQogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSB7IH07CiAgICAgbV9z
dGF0ZS5zdHJva2VHcmFkaWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJu
ID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQYXR0ZXJuQ2hh
bmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0
dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjIwLDggKzQ0OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQogICAg
IG1fc3RhdGUuZmlsbENvbG9yID0geyB9OwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVs
bHB0cjsKICAgICBtX3N0YXRlLmZpbGxQYXR0ZXJuID0gV1RGTW92ZShwYXR0ZXJuKTsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVu
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjMwLDE1ICs0NTcsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGll
bnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcgogICAgIG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50U3BhY2VUcmFuc2Zvcm0gPSBzdHJva2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwogICAg
IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlR3JhZGllbnRDaGFuZ2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1
bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCi17Ci0gICAgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxl
OwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlR3JhZGllbnRDaGFuZ2UpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBn
cmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTY0Nyw2NCArNDY2LDM5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBjb25zdCBBZmZpbmVUcmFuCiAgICAgbV9z
dGF0ZS5maWxsR3JhZGllbnQgPSBXVEZNb3ZlKGdyYWRpZW50KTsKICAgICBtX3N0YXRlLmZpbGxH
cmFkaWVudFNwYWNlVHJhbnNmb3JtID0gZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAg
bV9zdGF0ZS5maWxsUGF0dGVybiA9IG51bGxwdHI7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
bV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdy
YWRpZW50Q2hhbmdlKTsgLy8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPworICAgIHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGllbnRDaGFuZ2UpOwor
ICAgIC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KQogewotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIG1faW1wbC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAgICBl
bHNlCi0gICAgICAgIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKLSAg
ICArK21fdHJhbnNwYXJlbmN5Q291bnQ7CisgICAgKyttX3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpCiB7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwot
ICAgIGVsc2UKLSAgICAgICAgZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpOwotICAgIEFT
U0VSVChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCk7Ci0gICAgLS1tX3RyYW5zcGFyZW5jeUNvdW50
OworICAgIEFTU0VSVChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKTsKKyAgICAtLW1fdHJh
bnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0KIAogRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1RleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gRmxvYXRTaXpl
KCk7Ci0KICAgICAvLyBEaXNwbGF5IGxpc3QgcmVjb3JkaW5nIGZvciB0ZXh0IGNvbnRlbnQgaXMg
ZG9uZSBhdCBnbHlwaHMgbGV2ZWwuIFNlZSBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMuCiAg
ICAgcmV0dXJuIGZvbnQuZHJhd1RleHQoKnRoaXMsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29u
c3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFk
dmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250
U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd0dseXBocyhmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMsIHBvaW50
LCBmb250U21vb3RoaW5nTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBGb250
Q2FzY2FkZTo6ZHJhd0dseXBocygqdGhpcywgZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5
cGhzLCBwb2ludCwgZm9udFNtb290aGluZ01vZGUpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIE9wdGlvbmFsPHVuc2lnbmVkPiB0bykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBmb250LmRyYXdFbXBoYXNpc01h
cmtzKCp0aGlzLCBydW4sIG1hcmssIHBvaW50LCBmcm9tLCB0byk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZvbnQsIGNvbnN0IFRl
eHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIEJpZGlSZXNvbHZlcjxU
ZXh0UnVuSXRlcmF0b3IsIEJpZGlDaGFyYWN0ZXJSdW4+IGJpZGlSZXNvbHZlcjsKICAgICBiaWRp
UmVzb2x2ZXIuc2V0U3RhdHVzKEJpZGlTdGF0dXMocnVuLmRpcmVjdGlvbigpLCBydW4uZGlyZWN0
aW9uYWxPdmVycmlkZSgpKSk7CiAgICAgYmlkaVJlc29sdmVyLnNldFBvc2l0aW9uSWdub3JpbmdO
ZXN0ZWRJc29sYXRlcyhUZXh0UnVuSXRlcmF0b3IoJnJ1biwgMCkpOwpAQCAtNzM0LDE5ICs1Mjgs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgYmlkaVJ1bnMuY2xlYXIoKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZHJhd1BsYXRmb3JtSW1hZ2UoaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBp
bWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQogSW1hZ2VEcmF3UmVz
dWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50
aW5nT3B0aW9ucykKIHsKICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVz
dGluYXRpb24sIGltYWdlLnNpemUoKSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNp
emUoKSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKQEAgLTc2MCwxOCArNTQxLDEyIEBAIEltYWdl
RHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluCiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3
UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVy
IGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9s
YXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlv
biwgc291cmNlLCBvcHRpb25zKTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUs
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5p
bnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhd1RpbGVkKCp0aGlz
LCBkZXN0aW5hdGlvbiwgc291cmNlLCB0aWxlU2l6ZSwgc3BhY2luZywgb3B0aW9ucyk7CiB9CkBA
IC03NzksOSArNTU0LDYgQEAgSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1Rp
bGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGQKIEltYWdlRHJhd1Jlc3Vs
dCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0
U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLAogICAgIEltYWdlOjpUaWxlUnVsZSBoUnVsZSwgSW1hZ2U6
OlRpbGVSdWxlIHZSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOwotCiAgICAgaWYgKGhSdWxlID09IEltYWdlOjpTdHJldGNoVGlsZSAm
JiB2UnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRpbGUpIHsKICAgICAgICAgLy8gSnVzdCBkbyBhIHNj
YWxlLgogICAgICAgICByZXR1cm4gZHJhd0ltYWdlKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNl
LCBvcHRpb25zKTsKQEAgLTgwMywxNCArNTc1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGkK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1h
Z2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsICYmIG1faW1w
bC0+Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlKSkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFn
ZUJ1ZmZlcihpbWFnZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1
YWxpdHkoKSk7CiAgICAgaW1hZ2UuZHJhdygqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0
aW9ucyk7CiB9CkBAIC04MzMsMzYgKzU5NywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWltYWdlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVmZmVyKCppbWFn
ZSwgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CisgICAgaWYgKCFpbWFnZSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBp
bnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0
aW9uUXVhbGl0eSgpKTsKICAgICBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhXVEZNb3ZlKGlt
YWdlKSwgKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8ICFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdHRlcm4oaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBkcmF3UGxh
dGZvcm1QYXR0ZXJuKGltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwg
dGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIFBhdGggcGF0aDsKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwog
ICAgIGNsaXBQYXRoKHBhdGgpOwpAQCAtODcwLDkgKzYxMiw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIGlmICghcmVjdC5pc1JvdW5kZWQoKSkgewogICAgICAgICBjbGlwT3V0KHJlY3Qu
cmVjdCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODg1LDE0ICs2MjQsNiBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QpCiAKIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdDo6U3VjY2VzczsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlw
VG9EcmF3aW5nQ29tbWFuZHMoZGVzdGluYXRpb24sIGNvbG9yU3BhY2UsIFdURk1vdmUoZHJhd2lu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6
OlN1Y2Nlc3M7Ci0gICAgfQotCiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGRlc3RpbmF0aW9uLnNpemUoKSwgY29sb3JTcGFjZSwgKnRo
aXMpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5n
Q29tbWFuZHNSZXN1bHQ6OkZhaWxlZFRvQ3JlYXRlSW1hZ2VCdWZmZXI7CkBAIC05MDQsNjEgKzYz
NSwyMiBAQCBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uUmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFRv
SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RpbmF0aW9uUmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KICAgICBpbWFnZUJ1ZmZlci5jbGlwVG9NYXNrKCp0aGlzLCBkZXN0aW5hdGlv
blJlY3QpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYgIVVTRShDQUlS
TykKIEludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQotI2VuZGlmCi0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKLXsKLSAgICBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpUZXh0RHJhd2luZ01vZGVDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKG1vZGUpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGdyYWRpZW50
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGdyYWRpZW50LmZpbGwoKnRoaXMsIHJl
Y3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1v
ZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0
LCBjb2xvciwgb3AsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
b21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uKCk7
CiAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwogICAgIGZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKQEAgLTk2NywyOCArNjU5LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29t
cG9zCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2Rl
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUm91bmRlZFJlY3QocmVjdCwgY29s
b3IsIGJsZW5kTW9kZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAocmVjdC5p
c1JvdW5kZWQoKSkgewogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7Ci0gICAgICAgIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KHJl
Y3QsIGNvbG9yKTsKKyAgICAgICAgZmlsbFJvdW5kZWRSZWN0SW1wbChyZWN0LCBjb2xvcik7CiAg
ICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRpb24oKSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIGZpbGxSZWN0KHJlY3QucmVjdCgpLCBjb2xvciwgY29tcG9zaXRlT3Bl
cmF0aW9uKCksIGJsZW5kTW9kZSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KSAmJiAhVVNFKENBSVJPKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgUGF0aCBwYXRo
OwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKIApAQCAtMTAwOCw3MCArNjg4LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBGbG9hdFJvCiAgICAgc2V0RmlsbFJ1bGUob2xkRmlsbFJ1bGUpOwogICAgIHNl
dEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQotI2VuZGlmCi0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLmFscGhhID0gYWxwaGE7
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShhbHBoYSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIG1fc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb247CiAgICAgbV9zdGF0ZS5ibGVuZE1vZGUgPSBibGVu
ZE1vZGU7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9u
KGNvbXBvc2l0ZU9wZXJhdGlvbiwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1hc2spCi17Ci0gICAg
bV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsKLX0KLQotI2lmIEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFu
Y2UoYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSkKLXsKLSAgICBtX3N0YXRlLnVzZURhcmtBcHBlYXJh
bmNlID0gdXNlRGFya0FwcGVhcmFuY2U7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0FwcGVh
cmFuY2VDaGFuZ2UpOwotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJE
KQotLy8gSW1wbGVtZW50IHRoaXMgaWYgeW91IHdhbnQgdG8gZ28gcHVzaCB0aGUgZHJhd2luZyBt
b2RlIGludG8geW91ciBuYXRpdmUgY29udGV4dCBpbW1lZGlhdGVseS4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncykK
LXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDQUlSTykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKQotewor
ICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVP
cGVyYXRpb25DaGFuZ2UpOwogfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVD
VDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMo
Ym9vbCkKLXsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkgJiYg
IVVTRShDQUlSTykKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0
UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUgcGVuU3R5bGUpCiB7CkBA
IC0xMTAyLDI0ICs3MjUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4
ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMgogICAgIH0KIH0KIAot
I2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotI2VuZGlmCi0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yKQotewotICAgIHNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7Ci19Ci0gICAgCiBGbG9hdFNpemUgR3Jh
cGhpY3NDb250ZXh0OjpzY2FsZUZhY3RvcigpIGNvbnN0CiB7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2
aWNlU2NhbGUpOwpAQCAtMTEzMywyNCArNzM4LDEwIEBAIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
CiAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGVzdFJlY3Quc2l6ZSgpIC8gc3JjUmVjdC5zaXplKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IGVsbGlwc2UpCi17Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1GaWxs
RWxsaXBzZShlbGxpcHNlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoZWxsaXBzZSk7CisgICAgZmlsbFBhdGgocGF0aCk7Cisg
ICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxp
cHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKQEAgLTExNjcsMjMgKzc1OCwxMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgc3Ryb2tlUGF0aChwYXRoKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoRElSRUNUMkQpCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5l
cywgU3Ryb2tlU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBk
cmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgRGFzaEFycmF5
IHsgMCwgcmVjdC53aWR0aCgpIH0sIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdHlsZSk7
CiB9Ci0jZW5kaWYKIAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZVVuZGVybGlu
ZUJvdW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nKQogewpA
QCAtMTIxOCwyMCArNzk2LDYgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0ZUxp
bmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1cm4g
RmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlKQotewotICAgIHNldFBsYXRmb3JtU2hhZG93KHN0YXRlLnNoYWRvd09m
ZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIHNldFBsYXRm
b3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0gICAgc2V0UGxhdGZv
cm1UZXh0RHJhd2luZ01vZGUoc3RhdGUudGV4dERyYXdpbmdNb2RlKTsKLSAgICBzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKHN0YXRlLnN0cm9rZUNvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihzdGF0ZS5maWxsQ29sb3IpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3RhdGUuc3Ry
b2tlU3R5bGUpOwotICAgIHNldFBsYXRmb3JtQWxwaGEoc3RhdGUuYWxwaGEpOwotICAgIHNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5i
bGVuZE1vZGUpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhzdGF0ZS5zaG91bGRT
bW9vdGhGb250cyk7Ci19Ci0KIGZsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZUNvcm5l
cldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQgc3Ryb2tlV2lkdGgpIGNvbnN0CiB7CiAgICAgZmxv
YXQgdGhpY2tuZXNzID0gc3Ryb2tlVGhpY2tuZXNzKCk7CkBAIC0xMjgzLDM2ICs4NDcsMTUgQEAg
VmVjdG9yPEZsb2F0UG9pbnQ+IEdyYXBoaWNzQ29udGV4dDo6Y2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoYm9vbCBpc1ZlcnRpY2FsTGkKICAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9Owog
fQogCi0jaWYgIVVTRShDRykKLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJu
YWxMaW5rcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0
UmVjdCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9p
bnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpCi17Ci19Ci0KLSNlbmRpZgotCiAj
aWYgRU5BQkxFKFZJREVPKQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRp
YShNZWRpYVBsYXllciYgcGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwgJiYgbV9pbXBsLT5jYW5QYWludEZyYW1lRm9yTWVkaWEocGxheWVyKSkgewotICAgICAg
ICBtX2ltcGwtPnBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXllci5wbGF5ZXJQcml2YXRlKCktPnBhaW50Q3Vy
cmVudEZyYW1lSW5Db250ZXh0KCp0aGlzLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIAordm9p
ZCBOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKQoreworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY5MTBiODY4NmQxOWY5NzA1
YzA0MzcyMTg1MDZmYWU5OTVlMjczNTAuLjYwMjgxYTI3ZjExNmI3M2FmYjgzMWMxZDRiMDUyYjQ4
NTQ4OWZlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlv
bnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KQEAgLTg2LDcg
Kzg3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xh
c3MgRmxvYXRSb3VuZGVkUmVjdDsKIGNsYXNzIEdyYWRpZW50OwotY2xhc3MgR3JhcGhpY3NDb250
ZXh0SW1wbDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTsKIGNsYXNzIElt
YWdlQnVmZmVyOwogY2xhc3MgSW50UmVjdDsKQEAgLTExMCw2ICsxMTAsMTMgQEAgZW51bSBjbGFz
cyBUZXh0RHJhd2luZ01vZGUgOiB1aW50OF90IHsKIH07CiB1c2luZyBUZXh0RHJhd2luZ01vZGVG
bGFncyA9IE9wdGlvblNldDxUZXh0RHJhd2luZ01vZGU+OwogCisvLyBMZWdhY3kgc2hhZG93IGJs
dXIgcmFkaXVzIGlzIHVzZWQgZm9yIGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKy8v
IEl0IGhhcyBkaWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgorZW51bSBjbGFzcyBT
aGFkb3dSYWRpdXNNb2RlIDogYm9vbCB7CisgICAgRGVmYXVsdCwKKyAgICBMZWdhY3kKK307CisK
IGVudW0gU3Ryb2tlU3R5bGUgewogICAgIE5vU3Ryb2tlLAogICAgIFNvbGlkU3Ryb2tlLApAQCAt
MjE5LDE0ICsyMjYsMTIgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciB7IENvbXBvc2l0ZU9wZXJhdG9yOjpTb3Vy
Y2VPdmVyIH07CiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSB7IEJsZW5kTW9kZTo6Tm9ybWFsIH07
CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB7IElu
dGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0IH07CisgICAgU2hhZG93UmFkaXVzTW9kZSBzaGFk
b3dSYWRpdXNNb2RlIHsgU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCB9OwogCiAgICAgYm9vbCBz
aG91bGRBbnRpYWxpYXMgOiAxOwogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMgOiAxOwogICAg
IGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzIDogMTsKICAgICBib29sIHNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zIDogMTsKLSNpZiBVU0UoQ0cpCi0gICAgYm9vbCBzaGFkb3dzVXNlTGVn
YWN5UmFkaXVzIDogMTsKLSNlbmRpZgogICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2sgOiAxOwog
I2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5j
ZSA6IDE7CkBAIC0yNTQsMjcgKzI1OSwxNSBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGVD
aGFuZ2UgewogCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2UmKTsKIAotCiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29udGV4dCk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIAotICAgIHVzaW5nIEdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5ID0gV1RGOjpGdW5jdGlvbjxzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0SW1wbD4oR3JhcGhpY3NDb250ZXh0Jik+OwotICAgIFdFQkNPUkVfRVhQT1JU
IEdyYXBoaWNzQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSYpOworcHVi
bGljOiAgIAogCi0gICAgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgIFdFQkNPUkVf
RVhQT1JUIH5HcmFwaGljc0NvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIFBhaW50SW52
YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgewotICAgICAgICBOb25lLAotICAgICAgICBJbnZh
bGlkYXRpbmdDb250cm9sVGludHMsCi0gICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3lu
Y0RlY29kZXMsCi0gICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAotICAgIH07Ci0gICAg
R3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0KCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dCgpOwogCiAjaWYgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECiAgICAgZW51
bSBjbGFzcyBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBD
UFVNZW1vcnksCiAgICAgICAgIEdQVU1lbW9yeQpAQCAtMjgyLDI1MCArMjc1LDI3MCBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwogI2VuZGlmCiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAKLSAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9kYXRhICYmICFtX2ltcGw7IH0KLSAgICBib29sIHBlcmZv
cm1pbmdQYWludEludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zICE9IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZTsgfQotICAgIGJvb2wg
aW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRh
dGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdDb250
cm9sVGludHM7IH0KLSAgICBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMo
KSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXM7IH0KLSAg
ICBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6RGV0ZWN0aW5n
Q29udGVudGZ1bFBhaW50OyB9CisgICAgdmlydHVhbCBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtaW5nUGFpbnRJ
bnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
bnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKyAgICAvLyBDb250ZXh0IFN0YXRlCisKKyAgICB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpIHsgbV9zdGF0ZS5zdHJva2VUaGlj
a25lc3MgPSB0aGlja25lc3M7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOyB9CiAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VUaGlja25lc3M7IH0KIAotICAgIHZvaWQg
c2V0U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOworICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoU3Ry
b2tlU3R5bGUgc3R5bGUpIHsgbV9zdGF0ZS5zdHJva2VTdHlsZSA9IHN0eWxlOyB1cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOyB9CiAg
ICAgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9r
ZVN0eWxlOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJik7CiAgICAgY29uc3QgQ29sb3ImIHN0cm9rZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zdHJva2VDb2xvcjsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VQYXR0ZXJuKFJlZjxQ
YXR0ZXJuPiYmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4qIHN0cm9rZVBhdHRlcm4oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCk7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlR3Jh
ZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0cm9rZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIHN0cm9rZUdyYWRp
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKTsgfQogCi0g
ICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CisgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5k
UnVsZSBmaWxsUnVsZSkgeyBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7IHVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7IH0KICAgICBX
aW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFJ1bGU7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJik7CiAgICAg
Y29uc3QgQ29sb3ImIGZpbGxDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbENvbG9y
OyB9CiAKLSAgICB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0
ZXJuKiBmaWxsUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCk7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmlsbEdyYWRpZW50KFJlZjxHcmFk
aWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7CiAgICAgR3JhZGllbnQqIGZp
bGxHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuZmlsbEdyYWRpZW50LmdldCgpOyB9
CiAKLSAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wpOworICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtcykg
eyBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdu
b3JlVHJhbnNmb3Jtc0NoYW5nZSk7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCk7CisgICAgdm9p
ZCBzZXRTaG91bGRBbnRpYWxpYXMoYm9vbCBzaG91bGRBbnRpYWxpYXMpIHsgbV9zdGF0ZS5zaG91
bGRBbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91
bGRBbnRpYWxpYXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZEFudGlhbGlhczsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sKTsKKyAg
ICB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpIHsgbV9z
dGF0ZS5zaG91bGRTbW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOyB1cGRhdGVTdGF0ZSht
X3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOyB9
CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hv
dWxkU21vb3RoRm9udHM7IH0KIAogICAgIC8vIE5vcm1hbGx5IENHIGVuYWJsZXMgc3VicGl4ZWwt
cXVhbnRpemF0aW9uIGJlY2F1c2UgaXQgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIGFsaWdu
aW5nIGdseXBocy4KICAgICAvLyBJbiBzb21lIGNhc2VzIHdlIGhhdmUgdG8gZGlzYWJsZSB0byB0
byBlbnN1cmUgYSBoaWdoLXF1YWxpdHkgb3V0cHV0IG9mIHRoZSBnbHlwaHMuCi0gICAgdm9pZCBz
ZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCk7CisgICAgdm9pZCBzZXRTaG91bGRT
dWJwaXhlbFF1YW50aXplRm9udHMoYm9vbCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpIHsg
bV9zdGF0ZS5zaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgPSBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250czsgfQogCi0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KSB7IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IHF1YWxpdHk7IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKTsgfQorICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7IH0KIAotI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQotICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7Cisg
ICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSkgeyBtX3N0YXRlLmFscGhhID0gYWxwaGE7IHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBoYUNoYW5nZSk7IH0K
KyAgICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKTsKLSAgICBib29s
IGlzQ0FMYXllckNvbnRleHQoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldENv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7IH0KKyAgICBCbGVuZE1vZGUg
YmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5ibGVuZE1vZGU7IH0K
KworICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykg
eyBtX3N0YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7IHVwZGF0ZVN0
YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5n
ZSk7IH0KKyAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQorCisgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoVGV4
dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkgeyBtX3N0YXRlLnRleHREcmF3aW5nTW9kZSA9IG1vZGU7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpUZXh0RHJhd2luZ01v
ZGVDaGFuZ2UpOyB9CisgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGU7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImLCBTaGFkb3dSYWRpdXNNb2RlID0gU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNvbnN0
OworCisgICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
aGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQorICAgIGJvb2wgaGFzU2hhZG93KCkgY29uc3QgeyBy
ZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIgfHwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
IH0KKyAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxl
U2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisKKyNpZiBIQVZFKE9TX0RBUktfTU9E
RV9TVVBQT1JUKQorICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkgeyBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlID0gdXNlRGFya0FwcGVhcmFuY2U7
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFy
YW5jZUNoYW5nZSk7IH0KKyAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQogI2VuZGlmCi0gICAgYm9vbCBpc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgp
OworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgc2F2ZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXN0b3JlKCk7CiAgICAgCiAgICAgdW5zaWduZWQgc3Rh
Y2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdGFjay5zaXplKCk7IH0KIAorI2lmIFVTRShDRykg
fHwgVVNFKERJUkVDVDJEKQorICAgIC8vIEZJWE1FOiBTaG91bGQgdGhlc2UgcmVhbGx5IGJlIHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgbWV0aG9kcz8KKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJv
a2VQYXR0ZXJuKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAw
OworCisgICAgLy8gRklYTUU6IENhbiB3ZSBtYWtlIHRoaXMgYSB3aHkgaW5zdGVhZCBvZiBhIHdo
YXQsIGFuZCB0aGVuIGhhdmUgaXQgZXhpc3QgY3Jvc3MtcGxhdGZvcm0/CisgICAgdmlydHVhbCB2
b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0NB
TGF5ZXJDb250ZXh0KCkgY29uc3QgPSAwOworCisgICAgLy8gRklYTUU6IENhbiB0aGlzIGJlIGEg
R3JhcGhpY3NDb250ZXh0Q0cgY29uc3RydWN0b3IgcGFyYW1ldGVyPyBPciBqdXN0IGJlIHJlYWQg
b2ZmIHRoZSBjb250ZXh0PworICAgIHZpcnR1YWwgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sKSA9IDA7CisjZW5kaWYKKworICAgIHZpcnR1YWwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3QgeyByZXR1cm4gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQor
CisgICAgLy8gUGl4ZWwgU25hcHBpbmcKKworICAgIGVudW0gUm91bmRpbmdNb2RlIHsKKyAgICAg
ICAgUm91bmRBbGxTaWRlcywKKyAgICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCisgICAg
fTsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lkZXMpID0gMDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYg
cDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOworCisg
ICAgLy8gQmFzaWMgU2hhcGVzCisKICAgICAvLyBUaGVzZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBi
b3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgIC8vIEZJWE1FOiAuLi5leGNlcHQgZHJhd1Jl
Y3QoKSwgd2hpY2ggZmlsbHMgcHJvcGVybHkgYnV0IGFsd2F5cyBzdHJva2VzCiAgICAgLy8gdXNp
bmcgYSAxLXBpeGVsIHN0cm9rZSBpbnNldCBmcm9tIHRoZSByZWN0IGJvcmRlcnMgKG9mIHRoZSBj
b3JyZWN0CiAgICAgLy8gc3Ryb2tlIGNvbG9yKS4KLSAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpOwotICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxv
YXRQb2ludCYpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdSYWlzZWRF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3IsIGNvbnN0
IENvbG9yJiBzaGFkb3dDb2xvcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFBhdGgoY29uc3Qg
UGF0aCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJik7
CiAKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgZHJh
d1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xv
ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKSB7IGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OyB9CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxp
cHNlKSB7IHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmls
bFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6
Ok5vcm1hbCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5k
ZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKTsKIAotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgPSAwOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpOwotICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVy
YXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwg
Y29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5
JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSA9IDA7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgbGluZVdpZHRoKTsKKyAgICAvLyBJbWFnZXMsIFBhdHRlcm5zLCBhbmQgTWVkaWEKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29u
c3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9t
SW1hZ2UgfSk7Ci0gICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2Um
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFn
ZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOwogCi0gICAgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0g
ICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYg
dGlsZVNjYWxlRmFjdG9yLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0
aWxlU2l6ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0
IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNjYWxlRmFjdG9yLCBJ
bWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxlUnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0
IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZl
cj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPElt
YWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0
JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVy
PiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
Z0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwotICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHk7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKTsKLSAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9p
ZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uKTsKKyNlbmRpZgogCi0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgLy8gQ2xpcHBpbmcKIAotICAgIGVudW0gY2xhc3Mg
Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3Jl
YXRlSW1hZ2VCdWZmZXIgfTsKLSAgICBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRv
RHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpOwot
ICAgIAotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBj
bGlwKGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKIAotICAgIHZvaWQg
c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKTsKLSAgICBUZXh0RHJhd2lu
Z01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnRleHRE
cmF3aW5nTW9kZTsgfQorICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0jaWYgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldFVzZURhcmtB
cHBlYXJhbmNlKGJvb2wpOwotICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9Ci0jZW5kaWYKKyAgICBlbnVtIGNsYXNz
IENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0Ny
ZWF0ZUltYWdlQnVmZmVyIH07CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpOwogCi0gICAgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZv
bnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBm
cm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKLSAgICB2b2lk
IGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBH
bHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
LCBGb250U21vb3RoaW5nTW9kZSk7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBG
b250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9
IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21G
b250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0
OwogCi0gICAgdm9pZCBidWlsZGVyU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsK
KyAgICAvLyBUZXh0CiAKLSAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Ci0gICAgICAgIFJvdW5kQWxs
U2lkZXMsCi0gICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwotICAgIH07Ci0gICAgRmxv
YXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2Rl
ID0gUm91bmRBbGxTaWRlcyk7Ci0KLSAgICBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJvdW5k
c0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGlu
ZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsK
LSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0gICAgdm9pZCBkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGlu
ZVN0eWxlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEZsb2F0U2l6ZSBkcmF3VGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RG
OjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0JpZGlUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250Q2FzY2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkg
Y29uc3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGNvbXB1dGVV
bmRlcmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxv
YXRSZWN0JiwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VT
dHlsZSA9IFNvbGlkU3Ryb2tlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRo
cywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZhbHNlLCBTdHJva2VTdHlsZSA9
IFNvbGlkU3Ryb2tlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgLy8gTGVnYWN5IHNoYWRvdyBibHVyIHJhZGl1cyBp
cyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cuCi0gICAgLy8gSXQgaGFz
IGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCi0gICAgdm9pZCBzZXRMZWdhY3lT
aGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImKTsKKyAgICAv
LyBUcmFuc3BhcmVuY3kgTGF5ZXJzCiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyU2hh
ZG93KCk7Ci0gICAgYm9vbCBnZXRTaGFkb3coRmxvYXRTaXplJiwgZmxvYXQmLCBDb2xvciYpIGNv
bnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBlbmRU
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkgY29u
c3QgeyByZXR1cm4gKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApICYmIHN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCk7IH0KIAotICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KLSAgICBib29sIGhh
c1NoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5z
aGFkb3dCbHVyIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOyB9Ci0gICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3Qg
eyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorICAg
IC8vIEZvY3VzIFJpbmdzCiAKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIGhpZGUgdGhlc2UgaW4gdGhlIENHIGltcGxlbWVudGF0aW9uPyBPciBlbHNld2hlcmU/
CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwg
ZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOwotICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1l
T2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBu
ZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CiAjZW5kaWYKIAotICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKTsKLSAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZs
b2F0IGRhc2hPZmZzZXQpOwotICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pOwotICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCk7Ci0KLSAgICB2b2lkIHNldEFscGhhKGZsb2F0KTsKLSAg
ICBmbG9hdCBhbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYWxwaGE7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsgfQotICAgIEJsZW5kTW9kZSBibGVuZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX3N0YXRlLmJsZW5kTW9kZTsgfQotCi0gICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhi
b29sKTsKLSAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
ZS5kcmF3THVtaW5hbmNlTWFzazsgfQotCi0gICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVz
ZWQgb25seSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKLSAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdG8gaGFuZGxlIGNsaXBwaW5nIG9uIHRoZSBjYW52YXMgZGlmZmVyZW50bHkgc2luY2UKLSAg
ICAvLyB0aGUgZGlzY2lwbGluZSBpcyBkaWZmZXJlbnQuCi0gICAgdm9pZCBjYW52YXNDbGlwKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKTsKLSAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpOworICAgIC8vIFRyYW5zZm9ybXMKIAotICAgIHZvaWQgc2NhbGUoZmxv
YXQgcykKLSAgICB7Ci0gICAgICAgIHNjYWxlKHsgcywgcyB9KTsKLSAgICB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCBhbmdsZUluUmFkaWFucyk7CisgICAgdm9pZCBzY2FsZShmbG9hdCBzKSB7IHNjYWxlKHsg
cywgcyB9KTsgfQorICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgPSAwOwogICAg
IHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkgeyB0cmFuc2xhdGUoc2l6ZS53
aWR0aCgpLCBzaXplLmhlaWdodCgpKTsgfQogICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0
UG9pbnQmIHApIHsgdHJhbnNsYXRlKHAueCgpLCBwLnkoKSk7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsKLQotICAgIHZvaWQgc2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKIAotICAgIHZvaWQgc2V0RGVzdGluYXRpb25G
b3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50
Jik7Ci0KLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29u
Y2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpID0gMDsKIAogICAgIGVudW0gSW5jbHVkZURldmlj
ZVNjYWxlIHsgRGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSwgUG9zc2libHlJbmNsdWRlRGV2
aWNlU2NhbGUgfTsKLSAgICBXRUJDT1JFX0VYUE9SVCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKElu
Y2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZp
Y2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCA9IDA7CiAKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgdGhlIGRldmljZSBzY2FsZSBmYWN0b3IgdG8gdGhlIGNv
bnRleHQsIG1ha2luZyB0aGUgY29udGV4dCBjYXBhYmxlIG9mCiAgICAgLy8gYWN0aW5nIGFzIGEg
YmFzZS1sZXZlbCBjb250ZXh0IGZvciBhIEhpRFBJIGVudmlyb25tZW50LgotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgdm9pZCBwbGF0
Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIEZsb2F0U2l6ZSBzY2FsZUZh
Y3RvcigpIGNvbnN0OwotICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIHsgc2Nh
bGUoZmFjdG9yKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcigp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY2FsZUZhY3RvckZvckRyYXdp
bmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KSBj
b25zdDsKIAotICAgIHZvaWQgc2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVu
ZnVsUGFpbnREZXRlY3RlZCA9IHRydWU7IH0KLSAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQ7IH0KKyAgICAvLyBM
aW5rcwogCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbik7
Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25z
dCBGbG9hdFJlY3QmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJl
Y3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0JikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50Jikg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIC8vIENvbnRlbnRmdWwgUGFpbnQgRGV0ZWN0aW9uCisKKyAg
ICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbnRmdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQorICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQ7IH0KIAorICAgIC8vIEZJWE1FOiBO
b3RoaW5nIGluIHRoaXMgc2VjdGlvbiBiZWxvbmdzIGhlcmUsIGFuZCBzaG91bGQgYmUgbW92ZWQg
ZWxzZXdoZXJlLgogI2lmIE9TKFdJTkRPV1MpCiAgICAgSERDIGdldFdpbmRvd3NDb250ZXh0KGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBy
ZWN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0bWFwIGZvciBjb21wb3NpdGluZyBpbnNpZGUgdHJh
bnNwYXJlbmN5IGxheWVycy4KICAgICB2b2lkIHJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMsIGNv
bnN0IEludFJlY3QmLCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKTsgLy8gVGhlIHBhc3NlZCBpbiBI
REMgc2hvdWxkIGJlIHRoZSBvbmUgaGFuZGVkIGJhY2sgYnkgZ2V0V2luZG93c0NvbnRleHQuCiAg
ICAgSERDIGhkYygpIGNvbnN0OwotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBHcmFwaGljc0NvbnRl
eHQoSERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4K
IAorICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgZXhpc3Q7IHdlIG5lZWQgYSBkaWZmZXJl
bnQgcGxhY2UgdG8KKyAgICAvLyBwdXQgY29kZSBzaGFyZWQgYmV0d2VlbiBXaW5kb3dzIENHIGFu
ZCBXaW5kb3dzIENhaXJvIGJhY2tlbmRzLgorICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBu
dWxscHRyOyB9CisjaWYgUExBVEZPUk0oV0lOKQogICAgIC8vIFdoZW4gc2V0IHRvIHRydWUsIGNo
aWxkIHdpbmRvd3Mgc2hvdWxkIGJlIHJlbmRlcmVkIGludG8gdGhpcyBjb250ZXh0CiAgICAgLy8g
cmF0aGVyIHRoYW4gYWxsb3dpbmcgdGhlbSBqdXN0IHRvIHJlbmRlciB0byB0aGUgc2NyZWVuLiBE
ZWZhdWx0cyB0bwogICAgIC8vIGZhbHNlLgpAQCAtNTY0LDEyICs1NzcsMTIgQEAgcHVibGljOgog
I2lmIFVTRShESVJFQ1QyRCkKICAgICBHcmFwaGljc0NvbnRleHQoSERDLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiosIFJFQ1QsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSBy
ZW1vdmVkLgogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIElEMkQxRmFjdG9yeSogc3lzdGVt
RmFjdG9yeSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCog
ZGVmYXVsdFJlbmRlclRhcmdldCgpOworICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIHN5c3RlbUZh
Y3RvcnkoKTsKKyAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5EcmF3KCk7CisgICAgdm9pZCBi
ZWdpbkRyYXcoKTsKICAgICBEMkQxX0NPTE9SX0YgY29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3Qg
Q29sb3ImKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZERyYXcoKTsKKyAgICB2
b2lkIGVuZERyYXcoKTsKICAgICB2b2lkIGZsdXNoKCk7CiAKICAgICBJRDJEMUJydXNoKiBzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3Q7CkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5k
aWYgLy8gUExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMg
dm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBw
b3J0c0ludGVybmFsTGlua3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGlt
cGwoKSB7IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0
cm95KCk7Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBi
b29sIGhhc0FscGhhID0gZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
dm9pZCBwbGF0Zm9ybUluaXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhh
c0FscGhhID0gZmFsc2UpOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEKiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lk
IHNhdmVQbGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwot
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZp
bGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlh
bGlhcyhib29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
Ci0gICAgdm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNo
YWRvdygpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUg
PSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOwor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0
UmVjdCYpOwogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jiwg
Y29uc3QgQ29sb3ImKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZv
cm1JbWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0
IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRS
ZWN0JiwgYm9vbCBwcmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3Ju
ZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBA
IHByaXZhdGU6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5k
U3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7
CiAgICAgVmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wg
aXNWZXJ0aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxv
YXRQb2ludCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dEltcGw+IG1faW1wbDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisK
K3ByaXZhdGU6CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwog
Ci0gICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQg
bV90cmFuc3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRl
Y3RlZCB7IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsg
MCB9OworICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9Owog
CiBjbGFzcyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJw
b2xhdGlvblF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0
LCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5
ZGI4MjNjZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHRJbXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1HcmFwaGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dEltcGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjJmZmI0NTQ1YWUyMzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRl
eHRJbXBsKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRl
eHQ7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgR3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ry
b2tlUGF0aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
dHJva2VQYXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkg
PSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250Jiwg
Y29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhp
bmdNb2RlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHls
ZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShm
bG9hdCB4LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9
IDA7Ci0gICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5z
cGFyZW5jeUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFs
IEludFJlY3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVh
bCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4
dDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIy
YjBhNjYyMDg1Li4xMzgwZTdlZDlmYzhmMzY0OGVmMDY3MTkzNDhkYmU3NzFjZjk5OTNjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4
LDkgQEAgSW1hZ2VEcmF3UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBj
dHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgd2FudCB0byBrZWVwIHRoaXMgYmVo
YXZpb3IgZGlmZmVyZW5jZT8/PwogICAgIC8vIFdoZW4gdXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2lu
ZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2ggYW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0
LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5y
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKICAgICAgICAg
aWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJzZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0
UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgIEZsb2F0
UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAgIHZpc2libGVTcmNSZWN0LnNldFgoMCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYx
N2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4xNzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZk
ZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQ
b2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwog
CkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2JzZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDog
cHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogcHVibGljOgogICAg
IHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2
YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaApAQCAtMCww
ICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNzQ29udGV4dCA6IHB1YmxpYyBHcmFwaGlj
c0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEludmFsaWRhdGluZ0NvbnRy
b2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcywKKyAg
ICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50CisgICAgfTsKKworICAgIE51bGxHcmFwaGlj
c0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHJlYXNvbnMpCisgICAgICAgIDogbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisKKyAgICBib29sIHBhaW50aW5nRGlzYWJs
ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBwZXJmb3JtaW5n
UGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0
aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KKyAgICBib29s
IGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0
aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMg
PT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNE
ZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlv
blJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludDsgfQorCisgICAgdm9pZCB1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJE
KQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgZmluYWwgeyB9CisjZW5k
aWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIEludFJl
Y3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHsgfTsgfQorCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQ
YXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRo
JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmlu
YWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRo
JiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWwgeyB9CisgICAgRmxvYXRSZWN0
IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
PSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiByZWN0OyB9CisgICAgdm9pZCBkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHls
ZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sID0gZmFs
c2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZpbmFsIHsgfQorICAgIHZvaWQgc2V0TGlu
ZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBm
aW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsIHsgfQorICAgIHZv
aWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBzY2FsZShjb25zdCBG
bG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJvdGF0ZShmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0KKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0
Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25z
dCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsIHsgfQorCisgICAgdm9p
ZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIGNvbnN0
IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENh
c2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwg
T3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IHJldHVybiB7IH07IH0K
KworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlw
aCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkLCBjb25zdCBGbG9hdFBvaW50
JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5n
JiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0g
V1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6
OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250
Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBmaW5hbCB7IH0KKwor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFBvaW50Jiwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1h
Z2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0OjpEaWROb3RoaW5nOyB9CisgICAg
SW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0p
IGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdl
RHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJu
IEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3
VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3Vs
dDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYp
IGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgorCisgICAgdm9pZCBkcmF3SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgZmlu
YWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jikg
ZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbCB7IHJldHVy
biBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50JikgZmluYWwgeyB9
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBv
c2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisgICAgdm9p
ZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKworI2lmIEVOQUJMRShWSURFTykK
KyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8vIE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6
CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25S
ZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1
M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRlZjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTgsNyAr
MTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykKLSAgICBpZiAoc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3JhcGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVy
cyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRhcjovL3Byb2JsZW0vODEwMzQ0Mj4pLAor
ICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRoaXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNh
bnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAgIGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNN
b2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkgewogICAgICAgICBmbG9hdCBzaGFkb3dC
bHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUuc2hhZG93Qmx1cik7CiAgICAgICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVyLCBzaGFkb3dCbHVyKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xh
eWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZlNDlkNGU4YTM2MjAwZDc3MmEzMzJlN2Mx
Li4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5j
cHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZWN1cnNpdmVD
b21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRTdGF0ZSwgY29uc3QgVHJhCiAgICAgICAg
IAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAoYm91bmRzT3JpZ2luKCksIHNpemUoKSk7
CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJl
Y29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
aW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgfSk7CisgICAgICAgIERp
c3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgICAgICBwYWlu
dEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4
YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRm
MzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5J
bnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKQEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBvaW50KENHQ29udGV4dFJlZiBjb250ZXh0
LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNjYWRlIGZvbnQgPSBGb250Q2FzY2FkZShX
VEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVwZGF0ZShudWxscHRyKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjZyhjb250
ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4
dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
SW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3
YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2ViMDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJl
NTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMw
LDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxh
eWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZmxpcENvbnRleHQoY29udGV4
dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBo
aWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9ydGFudCB0byBnZXQgdGhlIGNsaXAgZnJv
bSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUgc2lnbmlmaWNhbnRseQogICAgIC8vIHNt
YWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKQEAgLTEyOSw3
ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENv
dW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbgogICAgIGVsc2UKICAgICAgICAgYmFj
a2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xvcjo6cmVkKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFp
bnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25lcigpLCBkcmF3Q291bnQsIGJhY2tncm91
bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4
IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZjMDYyMTRmYzMuLmI1M2EzMzdiYTRjY2Rj
ZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xh
eWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYgVVNFKENBKQogCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRlICJUaWxlQ29udHJvbGxlci5oIgogI2lu
Y2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyArODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFj
a2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50ID0gb3duZXIoKS0+b3du
ZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7Cisg
ICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8g
SXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2Ug
aXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJv
dW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3NWExMjhiMDc1Ny4uZTQyM2Y1Y2RmNDdk
NjRjY2M0YWEwY2M5NDBlMDg2M2Y3NWIxNzE3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5o
IgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9P
cGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3Vu
ZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAtNTcsNjMzICs1NiwzNjIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKKyAgICAsIG1f
cHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0
Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQotICAgICAgICByZXR1
cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3By
aXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRl
eHQuY3IoKSk7Cit9CiAKLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPnN5bmNDb250ZXh0
KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0KQorICAgIDogbV9vd25lZFBsYXRmb3Jt
Q29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWlyb0NvbnRleHQpKQor
ICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCisgICAgLCBt
X3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxh
dGZvcm1Db250ZXh0KSkKK3sKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRl
eHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dCht
X3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8o
UGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IEdyYXBoaWNzQ29u
dGV4dENhaXJvKCpwbGF0Zm9ybUNvbnRleHQpCiB7Ci0gICAgaWYgKG1fZGF0YSkgewotICAgICAg
ICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxw
dHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAgIH0KIH0KIAotQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUp
IGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdyYXBoaWNzQ29udGV4dENhaXJvKCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShu
dWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdl
dENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGljc0NvbnRleHRDYWlybzo6aGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorewogICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1Q
bGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBj
b25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2lt
cGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRl
eHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4dDsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNh
dmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJl
c3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFu
Z2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChy
ZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQVNT
RVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3Is
IHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFn
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0
aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxhdGZvcm1Db250ZXh0KCks
IG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsg
b3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRv
IGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBkcmF3IHNoYWRvd3MuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tl
U3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3TGluZSgqcGxhdGZvcm1D
b250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tl
Q29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0K
IAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVz
IHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZp
bGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpmaWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0
KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0
cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29u
dGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworfQogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGll
bnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBh
dXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0dGVybikKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZp
bGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9wbGF0Zm9ybUNvbnRleHQpOworICAgIENh
aXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Cisg
ICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2
aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4
dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7
CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KIAotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBDYWlybzo6Y2xpcCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3Qg
UGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAK
LUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBs
KQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3Vu
ZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGF1
dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0
LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCk7Cit9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorewogI2lmIFBM
QVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1
cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICNpZiBQTEFURk9STShXUEUpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3Rz
LCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgd2lkdGgs
IGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5l
c0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3Qg
RGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywg
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJl
Y3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91
YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9r
ZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDYWlybzo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxz
KHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjp0cmFuc2xhdGUoKnBs
YXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBj
YW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBz
ZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZs
YWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBh
bmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFj
dHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRT
dHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9h
dCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcygqcGxhdGZv
cm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNl
dCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0
ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAg
ICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VT
dHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
c3Ryb2tlU3R5bGUpOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91
bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFs
aWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJl
Y3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNv
bnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCwgY29uc3QgQ29sb3ImKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0g
ICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAvLyBXZSBmbGlwIHRoZSBo
ZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAg
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zmc2V0LndpZHRoKCksIC1vZmZzZXQuaGVp
Z2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3Jt
U2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFu
c3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwog
ICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3Bh
Y2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5j
eUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVy
KCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGVh
clJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VS
ZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGxpbmVX
aWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNh
cCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW5lQ2FwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGlu
ZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZvcm1Db250ZXh0KCksIGRhc2hlcywgZGFz
aE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldExpbmVKb2luKExpbmVK
b2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihs
aW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lSm9pbigqcGxhdGZvcm1Db250ZXh0KCks
IGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxv
YXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFy
dCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCkKLXsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3Np
dGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRN
b2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlw
T3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgd2luZFJ1bGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6
Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpy
b3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRl
KHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFk
aWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUm
IHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzaXplKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpjbGlwT3V0
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpmaWxsUm91bmRlZFJlY3Qo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmlzVmFsaWQoKSkKKyAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fp
cm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91
bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVy
bihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybihO
YXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zv
cm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJs
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKKyAgICBDYWly
bzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK1JlbmRlcmluZ01vZGUg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0
IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhC
dWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZykKIHsKLX0KKyAgICBp
ZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm47CiAKLWJvb2wg
R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlw
aHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAg
ICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9Owor
ICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOworICAgICAgICAgICAg
eU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKKyAgICAgICAgfQorICAgIH0KIAotICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZv
cm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFs
aWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86
OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBo
cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3IsCisgICAgICAg
IGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2JlMDE1NjEyZTQ4MzkyZDJmOTk4NWY4NTRlNWZj
Njg2ZWZiMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApAQCAtMCwwICsxLDEyMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogQ29weXJp
Z2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKKworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQbGF0Zm9y
bUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3JtQ29udGV4
dENhaXJvKik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCopOworCisjaWYgUExB
VEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKEhEQywgYm9vbCBoYXNBbHBoYSA9
IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCisjZW5kaWYKKworICAgIHZpcnR1YWwg
fkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5l
Sm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5k
TW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVj
dEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNv
bnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7Cisg
ICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlw
aEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBG
b250U21vb3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9h
dCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAg
ICB2b2lkIHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZv
aWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQp
IGZpbmFsOworICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9p
ZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisgICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgZmluYWw7CisK
KyAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIGZpbmFsOworICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBQYXRo
KGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIAorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIGZpbmFsOwor
CisjaWYgT1MoV0lORE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dENhaXJvPiBtX293bmVkUGxhdGZv
cm1Db250ZXh0OworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvJiBtX3BsYXRmb3JtQ29udGV4dDsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhZjJhMDQ4MTdiZmQ0ZWQwZjIwNjc3NWFjMjg2MjI0OTk3MjVhZDVh
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxp
YSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0K
LSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRl
ICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBo
QnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
cmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0g
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0g
ICAgICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybz4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjcmVhdGVGYWN0b3J5KGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKLXsKLSAgICByZXR1
cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAg
W2NhaXJvQ29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRl
eHQsIGNhaXJvQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0Nv
bnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5z
eW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBjYWlyb190KiBjYWlyb0NvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNv
bnRleHQpCi0gICAgLCBtX293bmVkUGxhdGZvcm1Db250ZXh0KG1ha2VVbmlxdWU8UGxhdGZvcm1D
b250ZXh0Q2Fpcm8+KGNhaXJvQ29udGV4dCkpCi0gICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9v
d25lZFBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQotewotICAgIG1fcGxh
dGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsK
LSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0LmNyKCkpOwotfQot
Ci1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86On5HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobnVsbHB0
cik7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpoYXNQbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi1QbGF0Zm9ybUNvbnRleHRDYWly
byogR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAotewot
ICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQotewotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCi0g
ICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0
LCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFN0
cm9rZVN0eWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJva2VTdHlsZSk7Ci0KLSAgICBp
ZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSB7Ci0gICAgICAg
IGlmIChzdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykgewotICAgICAgICAgICAgLy8gTWVh
bmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0Ci0gICAgICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2lu
Y2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICAgICAg
YXV0byYgbXV0YWJsZVN0YXRlID0gY29uc3RfY2FzdDxHcmFwaGljc0NvbnRleHRTdGF0ZSY+KGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpOwotICAgICAgICAgICAgYXV0byYgc2hhZG93T2Zmc2V0
ID0gc3RhdGUuc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgbXV0YWJsZVN0YXRlLnNoYWRvd09m
ZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgfTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciwgc3RhdGUuYmxlbmRNb2RlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCi0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hv
dWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJTaGFkb3coKQotewotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVD
YXApCi17Ci0gICAgQ2Fpcm86OnNldExpbmVDYXAobV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVDYXAp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCi17Ci0gICAgQ2Fpcm86OnNldExp
bmVEYXNoKG1fcGxhdGZvcm1Db250ZXh0LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0TGluZUpvaW4oTGluZUpvaW4gbGluZUpvaW4p
Ci17Ci0gICAgQ2Fpcm86OnNldExpbmVKb2luKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lSm9pbik7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0
IG1pdGVyTGltaXQpCi17Ci0gICAgQ2Fpcm86OnNldE1pdGVyTGltaXQobV9wbGF0Zm9ybUNvbnRl
eHQsIG1pdGVyTGltaXQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0
YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGll
bnQpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IGF1dG8gcGF0dGVybiA9IGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci0gICAgQ2Fpcm86OmZpbGxS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBwYXR0ZXJuLmdldCgpKTsKLSAgICBDYWlybzo6
cmVzdG9yZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1v
ZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcjsKLQotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZv
cm1Db250ZXh0LCBjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLSAgICBDYWlybzo6Zmls
bFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRm
b3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5kTW9k
ZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0KLSAgICBDYWlybzo6U2hh
ZG93U3RhdGUgc2hhZG93U3RhdGUoc3RhdGUpOwotICAgIGlmIChyZWN0LmlzUm91bmRlZCgpKQot
ICAgICAgICBDYWlybzo6ZmlsbFJvdW5kZWRSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgc2hhZG93U3RhdGUpOwotICAgIGVsc2UKLSAgICAgICAgQ2Fpcm86OmZpbGxSZWN0KG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0LnJlY3QoKSwgY29sb3IsIHNoYWRvd1N0YXRlKTsKLQotICAg
IENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBw
cmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29s
b3ImKQotewotICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCB7IH0sIENhaXJvOjpTaGFkb3dTdGF0ZShncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZmlsbFBhdGgobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRk
RWxsaXBzZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBs
aW5lV2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwotICAgIENhaXJvOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lk
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIENhaXJv
OjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7
Ci0gICAgc3Ryb2tlUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fpcm86OmNsZWFy
UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZykKLXsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7Ci0gICAgVmVj
dG9yPGNhaXJvX2dseXBoX3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7Ci0gICAgewotICAgICAg
ICBhdXRvIHlPZmZzZXQgPSBwb2ludC55KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtR2x5cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlw
aHNbaV0sIHhPZmZzZXQsIHlPZmZzZXQgfTsKLSAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5j
ZXNbaV0ud2lkdGgoKTsKLSAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0
KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19zY2FsZWRfZm9udF90KiBzY2FsZWRG
b250ID0gZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCk7Ci0gICAgZG91YmxlIHN5bnRo
ZXRpY0JvbGRPZmZzZXQgPSBmb250LnN5bnRoZXRpY0JvbGRPZmZzZXQoKTsKLQotICAgIGlmICgh
Zm9udC5hbGxvd3NBbnRpYWxpYXNpbmcoKSkKLSAgICAgICAgZm9udFNtb290aGluZyA9IEZvbnRT
bW9vdGhpbmdNb2RlOjpOb1Ntb290aGluZzsKLQotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwK
LSAgICAgICAgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIHNjYWxlZEZvbnQsIHN5
bnRoZXRpY0JvbGRPZmZzZXQsIGNhaXJvR2x5cGhzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50
ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dDb2xvciwKLSAgICAgICAgZm9udFNtb290aGluZyk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGlt
YWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlLmRyYXco
Z3JhcGhpY3NDb250ZXh0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1BsYXRmb3Jt
SW1hZ2UobV9wbGF0Zm9ybUNvbnRleHQsIGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2Us
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFVOVVNFRF9Q
QVJBTShzcGFjaW5nKTsKLSAgICBDYWlybzo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNvbnRleHQs
IGltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgSW50U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVj
dCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3ND
b250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIENhaXJvOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKLSAgICBDYWlybzo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2Vy
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3
RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3Vz
UmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29s
b3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3RzLCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2F2ZSgpCi17Ci0gICAgQ2Fpcm86OnNhdmUobV9wbGF0
Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cmVzdG9y
ZSgpCi17Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17
Ci0gICAgQ2Fpcm86OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMp
Ci17Ci0gICAgQ2Fpcm86OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5nbGVJblJhZGlhbnMp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQotewotICAgIENhaXJvOjpzY2FsZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OmNvbmNhdENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBDYWly
bzo6U3RhdGU6OnNldENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Z2V0Q1RNKEdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6Omdl
dENUTShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQ2Fpcm86
OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQot
ewotICAgIENhaXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgQ2Fpcm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0
aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgQ2Fpcm86OmNsaXBQYXRoKG1fcGxhdGZvcm1D
b250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDbGlw
Qm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgQ2Fpcm86OmNsaXBU
b0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFn
ZSgpLmdldCgpLCBkZXN0UmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIENhaXJv
OjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCi17
Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLSNlbmRpZgotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWRlNWQyYTdlOThk
YmJiZWEyNjdhYjA1NGMwZGZmMTQyNTZjZjJiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KLSAq
IENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCi0KLXR5cGVkZWYgc3RydWN0IF9jYWlybyBj
YWlyb190OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dENh
aXJvOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gZmluYWwgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQ
bGF0Zm9ybUNvbnRleHRDYWlybyYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoY2Fpcm9f
dCopOwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYsIFBs
YXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKEdyYXBo
aWNzQ29udGV4dCYsIGNhaXJvX3QqKTsKLSAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8oKTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNh
cCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0
aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
ZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJ
bWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3
UGF0dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRy
YXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQotICAgIHZv
aWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHJvdGF0ZShm
bG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVy
cmlkZTsKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZvaWQgcGFpbnRG
cmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikg
b3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3QgTWVkaWFQbGF5
ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0gICAgCi0gICAg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29udGV4
dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7Ci0gICAgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCmluZGV4IGQzN2ZiNjYzNzNhYWM5MzJhNzE0ODI1MzQ4NWYz
MzQ5MTE4Njg1ZDQuLmE1OGRkYjk2ODI3NTJlNzk1MDBmMzIyYmM1M2NmMDRkNjA3MDNjN2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKICNp
bmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkNvbG9yVHJhbnNmZXJGdW5jdGlvbnMuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmluZGV4IDNiZTc1NTY5ZTk3M2MyYjE2ODk5YTUw
NzYyNzVmNTIzZmE4MDcxZWEuLjliNWMwYWQwNzQ0NTE4ODBkZWZkZDNjNDg5MmU0ZjczYzI4NjQy
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkNvbG9yLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCiAjaW5jbHVkZSAiUGl4ZWxC
dWZmZXIuaCIKICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtNTEsNyArNTEsNyBAQCBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25z
dCBQYXJhbWV0ZXJzJgogCiAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNy
LmdldCgpKTsKLSAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7
CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDYWlybz4obV9wbGF0
Zm9ybUNvbnRleHQpOwogfQogCiBHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAppbmRleCA4MWQxNThlMmRmZjdlNWJm
MDNjN2I2NWQwMzZkZGE4OTlmMGY5MDFmLi4yYTE5ZTQ3YTlhYWNlYzIwOTZhNjBlOTdlM2I1YzQ4
NzQ1M2RhYWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QYXRoQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BhdGhDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJDYWlyb1Vu
aXF1ZVB0ci5oIgogI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQyMSw3
ICs0MjEsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRS
ZWN0KCk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNz
Q29udGV4dCBnYyhHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wYXRo
LmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdjKG1fcGF0aC5nZXQoKSk7
CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihnYyk7CiAgICAgfQogCkBAIC00NTAsNyArNDUw
LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KG1fcGF0aC5nZXQoKSk7CiAgICAgICAg
IHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCmluZGV4IGVmM2FjMmUxMzcxYjhlMWM5MDdkYTEyNDJhNzZjZTZlNjE0Nzg3MGUuLmZk
YjFhZTA2NTc0YmRmODE1YzYxNjcwZTA2Y2I2NzdhMDcyMzg5YTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKQEAgLTU1LDE3ICs1NSwxMiBAQCBzdGF0aWMgdm9pZCBzZXRDR0ZpbGxDb2xvcihDR0NvbnRl
eHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIENHQ29udGV4dFNldEZpbGxD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHNldENHU3Ryb2tlQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBDR0NvbnRleHRTZXRTdHJva2VDb2xvcldpdGhDb2xvcihjb250ZXh0
LCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7Ci19Ci0KIGlubGluZSBDR0FmZmluZVRyYW5zZm9ybSBn
ZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIHJldHVybiBDR0Fm
ZmluZVRyYW5zZm9ybUNvbmNhdChDR0NvbnRleHRHZXRDVE0oY29udGV4dCksIENHQWZmaW5lVHJh
bnNmb3JtSW52ZXJ0KENHQ29udGV4dEdldEJhc2VDVE0oY29udGV4dCkpKTsKIH0KIAotc3RhdGlj
IEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVy
cG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCitzdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29y
ZUludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKIHsK
ICAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKICAgICBjYXNlIGtDR0ludGVycG9sYXRpb25EZWZhdWx0
OgpAQCAtODIsNiArNzcsMzQgQEAgc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvbnZlcnRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHEKICAgICByZXR1cm4g
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ7CiB9CiAKK3N0YXRpYyBDR0ludGVycG9sYXRp
b25RdWFsaXR5IGNnSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVh
bGl0eSkKK3sKKyAgICBzd2l0Y2ggKHF1YWxpdHkpIHsKKyAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpEZWZhdWx0OgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7
CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAg
ICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Ob25lOworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkxvdzoKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25Mb3c7CisgICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJw
b2xhdGlvbk1lZGl1bTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgorICAg
ICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7CisgICAgfQorICAgIHJldHVybiBrQ0dJ
bnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKworc3RhdGljIENHVGV4dERyYXdpbmdNb2RlIGNnVGV4
dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpCit7CisgICAgYm9vbCBmaWxs
ID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OkZpbGwpOworICAgIGJvb2wgc3Ryb2tl
ID0gbW9kZS5jb250YWlucyhUZXh0RHJhd2luZ01vZGU6OlN0cm9rZSk7CisgICAgaWYgKGZpbGwg
JiYgc3Ryb2tlKQorICAgICAgICByZXR1cm4ga0NHVGV4dEZpbGxTdHJva2U7CisgICAgaWYgKGZp
bGwpCisgICAgICAgIHJldHVybiBrQ0dUZXh0RmlsbDsKKyAgICByZXR1cm4ga0NHVGV4dFN0cm9r
ZTsKK30KKwogc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRNb2RlKENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewogICAgIHN3
aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xNTYsMzUgKzE3OSwzOSBAQCBzdGF0aWMgQ0dCbGVuZE1v
ZGUgc2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3Is
IEJsZW5kTQogICAgIHJldHVybiBrQ0dCbGVuZE1vZGVOb3JtYWw7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKK0dyYXBoaWNz
Q29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewog
ICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKGNnQ29udGV4dCk7CiAgICAgLy8gTWFrZSBz
dXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRlLgotICAgIHNldFBs
YXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwotICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0cm9rZVRo
aWNrbmVzcygpKTsKLSAgICBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252
ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBub3QgZ3JlYXQsIGJl
Y2F1c2UgaXQgc2V0cyBpdCBiYWNrIG9uIHRoZSBHcmFwaGljc0NvbnRleHQsIGJ1dCBtYXliZSBp
dCBkb2Vzbid0IG1hdHRlcj8KKyAgICBzZXRGaWxsQ29sb3IoZmlsbENvbG9yKCkpOworICAgIHNl
dFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIHNldFN0cm9rZVRoaWNrbmVzcyhzdHJv
a2VUaGlja25lc3MoKSk7CisgICAgbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0g
Y29yZUludGVycG9sYXRpb25RdWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5
KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAg
ICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBH
cmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
IXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAgQVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwog
ICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2
ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAv
LyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVt
ZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBv
ZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTksOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBs
YXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+c2F2ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVz
dG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAK
ICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3Mg
aW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8g
cmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEwICsyMzAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRp
dmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNp
ZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwog
CiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwog
ICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxlbmRNb2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxh
dGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRp
b25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21w
b3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3Jp
ZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4
dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0
UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNTAsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8K
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFzZWQpOwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUp
OworICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9s
ZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFt
IDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8
ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sg
IiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8
ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8
IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQog
CiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJl
ZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2NCw3IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2Fs
bGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0
LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0Q0coY29udGV4dCkucm91bmRUb0Rl
dmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0
KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lk
KiBpbmZvKQpAQCAtMzQ3LDE2ICszNzIsMTggQEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VD
YWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNhbGxPbk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRD
RihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihpbmZvKSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1
dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CisKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRl
c3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29t
cG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBk
ZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2ICs0NTAsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29u
c3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9y
ZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2Vz
IG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0
IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4
LDE5ICs0NzcsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkg
dXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5l
KHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRo
aWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAo
cG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBwb2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VX
aWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9pbnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIu
eCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwzMSArNTM3LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50CiAgICAgICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVl
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5h
ZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQYXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFw
cGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ry
b2tlUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2Vy
VG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7
CiAKQEAgLTU2NSwxNiArNTYwLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tl
UGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRm
b3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5BbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5Rmls
bFBhdHRlcm4oKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJu
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0g
PSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRvQmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2
LDE1ICs2MDMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxk
RmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0
aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29u
c3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpA
QCAtNjU0LDE2ICs2MzYsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0
IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1w
dHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTcxOCwxNSArNjk1LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2Vu
ZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBh
dGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
fQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAt
Nzk0LDE2ICs3NjYsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxS
ZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgewpAQCAtODMzLDcgKzc5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAg
ICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5
ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUu
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNh
dmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAg
ICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04NDYsMjMgKzgxMCwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENH
Q29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBm
aWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9
ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNh
bnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93
KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC04ODEsMjAgKzgzNywxNSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZp
bGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xk
RmlsbENvbG9yICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xv
cik7CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAm
JiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7
IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093
blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3du
U2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBD
RyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwog
ICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBhdGggcGF0aDsKQEAgLTk1MSw3ICs4OTQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAv
LyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgpIGFzc3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVj
dCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9ubHkgY2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJv
dW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVy
YXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBkcmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUo
KSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkg
JiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3du
U2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkx
MywyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxs
Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCks
IHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChyZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBG
SVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUgaXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRo
ZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZlciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9i
bGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5pdGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2Vs
ZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8vIGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBh
cmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9yIGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9w
cm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdlIGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRp
bmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRD
VE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShw
bGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVk
Q29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dS
ZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRUeXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dD
b250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFjdG0uYygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJd
ID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0
Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxh
dGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRo
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRD
bGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKQpAQCAtMTAyMywxNiArOTQyLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAo
cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dS
ZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NjAsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+
Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBj
b25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChw
bGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0
Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5
ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7CiAKQEAgLTEwNzUsMTIgKzk3Nyw5IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3Bh
Y2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRp
dHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5
ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpl
bmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0
KTsKQEAgLTEwODgsMTEgKzk4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYg
eU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBA
IC0xMTAwLDcgKzk5NCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFS
QU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BBUkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAo
Y29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQorICAgIGlmIChjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEyMSwyMSArMTAxNSwyMiBAQCBzdGF0aWMgdm9pZCBh
cHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1NoYWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisg
ICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAhYmx1cikgeworICAgICAgICBDR0NvbnRleHRTZXRT
aGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIAogICAg
IC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0aGUgc2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBr
bm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93IG91cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9m
ZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAgIENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWln
aHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRpdXMgPSBibHVyOwotICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAoIWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0g
PSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQpOwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJU
b0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0uYSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jh
c2VDVE0uYjsKQEAgLTExNTYsNyArMTA1MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAg
ICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVzIGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBv
ciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNvIGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6
bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAg
IGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zm
c2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0Nv
bnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQg
Y29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBz
aGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxkIHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVs
dCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUwICsxMDYxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1Np
emVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBibHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9y
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3Mp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENH
Q29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywg
MCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAg
IENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlj
a25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlz
IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxp
bWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dD
b250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0
ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dDb250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNv
bnRleHQoKSwgbGltaXQpOwotfQorICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkKKyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4
dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5h
bHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2UgfSkpCisgICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5kTW9kZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwg
c3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250
ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOwor
CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRp
YWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4
dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKQorICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjb250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250
cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBv
bGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0ludGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMs
IHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0Nv
bG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRN
aXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4
dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ry
b2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBD
R0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGlu
ZVdpZHRoKQorewogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewpAQCAtMTI2OSwxNiArMTE2Nyw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgc3dpdGNoIChjYXApIHsKICAgICBjYXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4
dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIs
MTYgKzExODIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNh
cCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hP
ZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAw
KSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpAQCAtMTMxMiwxNiArMTE5NCw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRTZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwg
ZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwgZGFzaGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNlIE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0
U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMz
NSw5NCArMTIwOSw0MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpv
aW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNv
bnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgs
IGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRl
eHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNp
emUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xl
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAg
ICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFu
c2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5z
bGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0Jl
SWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25jYXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5z
Zm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9y
bSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZv
cm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsK
ICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBm
YWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1
ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25z
dAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdl
dENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAgLy8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRo
ZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQgaW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBj
b250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBzaW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVn
cmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxldmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNj
YWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNlIHRoaXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1
NSw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2
aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0o
cGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5k
aW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJl
Y3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAvLyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91
bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFjZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAg
ICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRyaXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdp
dGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhhdmUgYQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxp
a2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBjbG9jayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUg
c2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk5LDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01v
CiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAt
IHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JU
ZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5l
cywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAg
ICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdpZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAg
ICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9jYXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhz
LCBwcmludGluZywgZG91YmxlTGluZXMsIHN0cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhp
Y2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3Vi
bGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5l
cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9y
KHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxvYXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91
bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUo
d2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSksIHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsK
QEAgLTE1NTYsMTYgKzEzNTcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0
KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkg
aXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAg
ICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFp
blB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGluay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJs
UmVmKQogICAgICAgICByZXR1cm47CkBAIC0xNTc5LDM2ICsxMzcyLDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVm
LmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0o
Y29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFT
U0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKLQotICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkg
cXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25EZWZhdWx0OwotICAgIHN3aXRjaCAobW9kZSkgewot
ICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkg
PSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtD
R0ludGVycG9sYXRpb25Ob25lOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0g
ICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0g
a0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXll
ckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAg
ICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNMYXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSAr
MTM4MiwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29s
IGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBtX2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xh
eWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4
dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYmIChtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNM
YXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNh
bGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2Nl
bGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVk
Q0dDb250ZXh0OwogICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+
SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4g
bV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0K
LSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRl
eHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAot
ICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAg
ICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMoVGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwot
ICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ryb2tlKTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAg
ICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwot
ICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2Rl
KGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIHNldENHU3Ryb2tlQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tu
ZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAg
Q0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25l
c3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAg
ICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlh
bGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxhdGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVu
ZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRDRzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZv
cm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRNb2RlKGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1v
ZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRD
R0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURl
dmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGlj
cyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBhIEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2Nh
bGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAgICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJh
c2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2VydGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1
cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAg
IENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZvcm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3Jt
U2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShwbGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxl
RmFjdG9yLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5S
ZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29sb3JzLgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRo
KGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQyMyw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpw
bGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRl
eHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0
U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAo
bV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAg
ICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3ODEsMTggKzE0MzUsMTMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBl
bGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5r
cygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3Mo
KSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVj
dChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJlY3QgcmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwx
NSArMTQ1MSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0
RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwg
dHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9ybWVkUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVU
cmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4dEdldENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZD
b250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2
ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDViYjBkYzc1Li41ZTIwNjc2OWViZmY4YWQ5MTAyOTE5
MzYyMmNmZDFjMmVjNGYyODllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTcyLDUgKzcyLDEwOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5kUmVzdG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVf
RVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JN
KFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDRyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7
IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0
Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250
ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkg
ZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsK
KyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9p
ZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3Qg
UGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9w
YWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKwor
ICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwor
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5h
bDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHZv
aWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQg
YW5nbGVJblJhZGlhbnMpIGZpbmFsOworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpIGZpbmFsOworCisgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
ZmluYWw7CisgICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWw7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRv
RGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9IFJvdW5kQWxsU2lk
ZXMpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBm
aW5hbDsKKyNlbmRpZgorCisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgZmluYWw7CisKKyAgICB2b2lkIGRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJM
aW5lU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3Qo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQm
KSBmaW5hbDsKKworICAgIGJvb2wgc3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QgZmluYWw7
CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIGZpbmFsOworCisjaWYgT1MoV0lO
RE9XUykKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpIGNvbnN0IGZpbmFsOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07Cit9OworCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAppbmRleCA1ZmZjZTEyZmVhMjE5ZjMx
MDBhOGJlYjk2MjMzMDgwODc4Y2E3YmE2Li42ODY1ZjBiZDQxYmI0ODQ2MGRiYTFmNGY2YmE1ODA3
ODRjY2FlZTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC04NSw3
ICs4NSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFjZ0NvbnRleHQpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxH
cmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisgICAgYXV0byBjb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oY2dDb250ZXh0LmdldCgpKTsKIAogICAgIGF1dG8g
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxw
dHIsIGRhdGEsIG51bUJ5dGVzLCBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkg
ewogICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAppbmRleCBjZWQzYWRiYTJi
NGMxMmYwZTgyM2EwODhkMjVmYzE1YWE4ODlhNDI3Li5mMzNkY2U5MTZkZWIzNmU5YjI1MmEyNWI4
Mjg0ZWQ1ZDFhOGFiMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BhdGhDRy5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3Rm
L01hdGhFeHRyYXMuaD4KQEAgLTI0NCw3ICsyNDQsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
QwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQpOwogCiAg
ICAgYm9vbCBoaXRTdWNjZXNzID0gQ0dDb250ZXh0UGF0aENvbnRhaW5zUG9pbnQoY29udGV4dCwg
cG9pbnQsIGtDR1BhdGhTdHJva2UpOwpAQCAtMzA1LDcgKzMwNSw3IEBAIEZsb2F0UmVjdCBQYXRo
OjpzdHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQm
KT4mIHN0cm9rCiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBwbGF0Zm9ybVBhdGgoKSk7
CiAKICAgICBpZiAoc3Ryb2tlU3R5bGVBcHBsaWVyKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBo
aWNzQ29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCA3NmVhOWFmNGQ0MjMyNDk0MWE4OTdmYWEzZTVk
ZmRhYjIzZGY4MTM0Li4wNWEzOTE2NTQwYmI3NmRhM2YwYWJhYTMzOTRmYzhkZDA4OGM4ZGE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KICNp
bmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CkBAIC00Myw3ICs0Myw3IEBAIHN0YXRpYyB2b2lkIHBhdHRlcm5DYWxsYmFjayh2
b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICBpZiAoIXBsYXRmb3JtSW1hZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCisgICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0Nv
bnRleHRDRyhjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKAogICAgICAgICBGbG9hdFJlY3Qo
MCwgMCwgQ0dJbWFnZUdldFdpZHRoKHBsYXRmb3JtSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KHBs
YXRmb3JtSW1hZ2UpKSk7CiAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIHJlY3QsIHBs
YXRmb3JtSW1hZ2UpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvRm9udENhc2NhZGVDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNjYWRlQ29jb2EubW0KaW5kZXggZTI5YWVjZGZiZmU2ODAw
NjdmY2JhMTkzOWZhZTUxZWRjODc5MmQ0Yy4uZTFlNWI0NDhjYjI2ZmM3ZTAxNzhhYmNhODdiZTQy
MmZiNTgxY2Y3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvRm9udENhc2NhZGVDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCkBAIC0yMyw3ICsyMyw3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIkZvbnRDYXNjYWRlLmgiCiAKLSNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbXBvcnQgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQppbmRleCAxNDIxZWI5MGQ3YTQ5ZDFlNDgyNGI1YWM4
OTY4ODEzYTMwNTQzZjdkLi4zODhhZmNkNmY0NmFmYzQ1MjIxZjgwNzFkMzUwOTY3ZjBlNTM1NTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFw
aGljc0NvbnRleHRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbQpAQCAtMTA2LDQ4ICsxMDYsMzMgQEAgc3Rh
dGljIHZvaWQgZHJhd0ZvY3VzUmluZ1RvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQ
YXRoUmVmIGZvY3VzUmluZ1BhdGgKICAgICBkcmF3Rm9jdXNSaW5nKGNvbnRleHQsIGNvbG9yKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0
aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNOdWxsKCkpCisgICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHBh
dGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGRyYXdGb2N1c1JpbmdUb0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1Q
YXRoKCksIGNvbG9yKTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKIAotc3RhdGljIGJvb2wgZHJh
d0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRoUmVm
IGZvY3VzUmluZ1BhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCitz
dGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250
ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91YmxlLCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgVU5VU0VEX1BBUkFNKHRpbWVPZmZzZXQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIGZvY3VzUmluZ1BhdGgp
OwogICAgIHJldHVybiBkcmF3Rm9jdXNSaW5nQXRUaW1lKGNvbnRleHQsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6bWF4KCksIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wm
IG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29s
JiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCisg
ICAgaWYgKHBhdGguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG5lZWRzUmVkcmF3
ID0gZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5w
bGF0Zm9ybVBhdGgoKSwgdGltZU9mZnNldCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGRvdWJs
ZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdHMsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJWE1FOiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMg
cmluZyBkcmF3aW5nLgotICAgICAgICByZXR1cm47Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxl
UGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsK
ICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVj
dChmb2N1c1JpbmdQYXRoLmdldCgpLCAwLCBDR1JlY3QocmVjdCkpOwpAQCAtMTU3LDE2ICsxNDIs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYgcmVjdHMsIGRvdWJsZSB0aW1lTwogCiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3Ip
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIFJldGFpblB0
cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVN
dXRhYmxlKCkpOwogICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhB
ZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCksIDAsIENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQs
IC1vZmZzZXQpKTsKQEAgLTE5OSwxMSArMTc2LDggQEAgc3RhdGljIENHQ29sb3JSZWYgY29sb3JG
b3JNYXJrZXJMaW5lU3R5bGUoRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGUgc3R5bGUsIGIK
ICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gV2Ugd2Fu
dCB0byBmaW5kIHRoZSBudW1iZXIgb2YgZnVsbCBkb3RzLCBzbyB3ZSdyZSBzb2x2aW5nIHRoZSBl
cXVhdGlvbnM6CiAgICAgLy8gZG90RGlhbWV0ZXIgPSBoZWlnaHQKICAgICAvLyBkb3REaWFtZXRl
ciAvIGRvdEdhcCA9IDEzLjI0NyAvIDkuNDU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggNThjNTEyNGQ0YjZjNjEzNjRl
OGQzNjk2ZjM0OTVmZGIyNjQ1OTdhMC4uZTEzOGMzMjAxZGRlNjQ1MDA1Yjg2ZDBhOWY2MWE4ZjQw
Zjc0Njg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQpAQCAtMzcxLDcgKzM3MSw3IEBAIEdyYXBoaWNzQ29udGV4dCYgSU9T
dXJmYWNlOjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQogICAgIGlmIChtX2dyYXBoaWNzQ29udGV4
dCkKICAgICAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKIAotICAgIG1fZ3JhcGhpY3ND
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGVuc3VyZVBsYXRmb3JtQ29udGV4
dCgpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
Q0c+KGVuc3VyZVBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+c2V0
SXNBY2NlbGVyYXRlZENvbnRleHQodHJ1ZSk7CiAKICAgICByZXR1cm4gKm1fZ3JhcGhpY3NDb250
ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXIuaAppbmRleCAyMGRhZWY0YmI0MWY1MDY0ZjNjMWJkYTNjMmZjMzY3MzIwMDRmM2Y3Li5kNzdm
NzQxNmRkNTY1YzNkM2Y5YjQ1NTg4NjMwOGI2YTM5YjVlZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5
cGhzUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJUZXh0RmxhZ3MuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKICNpZiBV
U0UoQ09SRV9URVhUKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KQEAg
LTU4LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpOwogCi0jaWYgVVNFKENPUkVfVEVYVCkKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAh
UExBVEZPUk0oV0lOKQogICAgIHZvaWQgcmVjb3JkQmVnaW5MYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZiwgQ0dSZWN0KTsKICAgICB2b2lkIHJlY29yZEVuZExheWVyKENHUmVu
ZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmKTsKICAgICB2b2lkIHJlY29yZERyYXdHbHlwaHMo
Q0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYsIGNvbnN0IENHQWZmaW5lVHJhbnNmb3Jt
KiwgY29uc3QgQ0dHbHlwaFtdLCBjb25zdCBDR1BvaW50IHBvc2l0aW9uc1tdLCBzaXplX3QgY291
bnQpOwpAQCAtNjgsNyArNjksOSBAQCBwdWJsaWM6CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0
aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uOyB9CiAKIHByaXZhdGU6Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNyZWF0
ZUludGVybmFsQ29udGV4dCgpOworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4p
CisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7
CisjZW5kaWYKIAogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJik7CiAgICAgdm9pZCBwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYpOwpAQCAtODUsMTMgKzg4LDE3IEBAIHByaXZhdGU6CiAgICAg
fTsKICAgICB2b2lkIHVwZGF0ZVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwg
ZmxvYXQgc2hhZG93Qmx1ciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBTaGFkb3dzSWdub3Jl
VHJhbnNmb3Jtcyk7CiAKLSNpZiBVU0UoQ09SRV9URVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYm
ICFQTEFURk9STShXSU4pCiAgICAgdm9pZCB1cGRhdGVTaGFkb3coQ0dTdHlsZVJlZik7CiAjZW5k
aWYKIAogICAgIFJlY29yZGVyJiBtX293bmVyOwogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biBtX2RyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjsKLSAgICBHcmFwaGljc0NvbnRleHQgbV9pbnRl
cm5hbENvbnRleHQ7CisKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQorICAg
IFVuaXF1ZVJlZjxHcmFwaGljc0NvbnRleHQ+IG1faW50ZXJuYWxDb250ZXh0OworI2VuZGlmCisK
ICAgICBjb25zdCBGb250KiBtX29yaWdpbmFsRm9udCB7IG51bGxwdHIgfTsKICAgICBGb250U21v
b3RoaW5nTW9kZSBtX3Ntb290aGluZ01vZGUgeyBGb250U21vb3RoaW5nTW9kZTo6QXV0b1Ntb290
aGluZyB9OwogICAgIEFmZmluZVRyYW5zZm9ybSBtX29yaWdpbmFsVGV4dE1hdHJpeDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRl
ckNvcmVUZXh0LmNwcAppbmRleCBjMDQ4NjUyZjliMGU2NWFiNWMyYzljZTU5OGI1Mjc3MDJjOGFh
MzNkLi5jYWNmNzY0ZjVkZTJjOGNmNmQzZjQwMDAyZmVhZjVlMTIxNjkxYzg1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1
ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgogCiAjaW5jbHVkZSA8Q29yZVRleHQvQ29yZVRleHQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC03Niw3ICs3Nyw3IEBAIHN0YXRpYyBDR0Vycm9yIGRy
YXdJbWFnZShDR0NvbnRleHREZWxlZ2F0ZVJlZiBkZWxlZ2F0ZSwgQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiByc3RhCiAgICAgcmV0dXJuIGtDR0Vycm9yU3VjY2VzczsKIH0KIAotR3JhcGhpY3NDb250ZXh0
IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKK1VuaXF1ZVJlZjxH
cmFwaGljc0NvbnRleHQ+IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0
KCkKIHsKICAgICBhdXRvIGNvbnRleHREZWxlZ2F0ZSA9IGFkb3B0Q0YoQ0dDb250ZXh0RGVsZWdh
dGVDcmVhdGUodGhpcykpOwogICAgIENHQ29udGV4dERlbGVnYXRlU2V0Q2FsbGJhY2soY29udGV4
dERlbGVnYXRlLmdldCgpLCBkZUJlZ2luTGF5ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0
RGVsZWdhdGVDYWxsYmFjaz4oJmJlZ2luTGF5ZXIpKTsKQEAgLTg0LDcgKzg1LDcgQEAgR3JhcGhp
Y3NDb250ZXh0IERyYXdHbHlwaHNSZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KCkKICAg
ICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVE
cmF3R2x5cGhzLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6ZHJhd0dseXBocykpOwogICAgIENHQ29udGV4dERlbGVnYXRl
U2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdJbWFnZSwgcmVpbnRlcnBy
ZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmZHJhd0ltYWdlKSk7CiAgICAgYXV0
byBjb250ZXh0ID0gYWRvcHRDRihDR0NvbnRleHRDcmVhdGVXaXRoRGVsZWdhdGUoY29udGV4dERl
bGVnYXRlLmdldCgpLCBrQ0dDb250ZXh0VHlwZVVua25vd24sIG51bGxwdHIsIG51bGxwdHIpKTsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dENHPihjb250ZXh0LmdldCgpKTsKIH0KIAogRHJh
d0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzUmVjb3JkZXIoUmVjb3JkZXImIG93bmVyLCBEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtMTE5LDM0
ICsxMjAsMzEgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgY29udGUKIHZvaWQgRHJhd0dseXBoc1JlY29y
ZGVyOjpwb3B1bGF0ZUludGVybmFsQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
Y29udGV4dFN0YXRlKQogewogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbENvbG9yKG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0RmlsbENvbG9yKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IpOwogICAgIGVsc2Ug
aWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFk
aWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxHcmFkaWVudCgqbV9vcmlnaW5hbFN0
YXRlLmZpbGxTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3JpZ2luYWxT
dGF0ZS5maWxsU3R5bGUucGF0dGVybik7CiAgICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuZmls
bFN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsUGF0
dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKICAgICB9CiAKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxl
LmNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlQ29s
b3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5h
bENvbnRleHQtPnNldFN0cm9rZUNvbG9yKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xv
cik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50KQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0
YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTdHJv
a2VHcmFkaWVudCgqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CiAgICAgZWxzZSB7
CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAg
ICAgICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybikKLSAgICAgICAg
ICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5z
dHJva2VTdHlsZS5wYXR0ZXJuKTsKKyAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRT
dHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUucGF0dGVybik7CiAgICAg
fQogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwor
ICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CiAKLSAg
ICBtX2ludGVybmFsQ29udGV4dC5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX29yaWdpbmFs
U3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOwotICAgIGlmIChjb250ZXh0U3RhdGUuc2hh
ZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0TGVnYWN5
U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUuc2hh
ZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9pbnRlcm5hbENvbnRleHQuc2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zm
c2V0LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
Y29sb3IpOworICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lmlnbm9yZVRyYW5zZm9ybXMpOworICAgIG1faW50ZXJu
YWxDb250ZXh0LT5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3Jp
Z2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvciwgY29u
dGV4dFN0YXRlLnNoYWRvd1JhZGl1c01vZGUpOwogCi0gICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOworICAgIG1faW50
ZXJuYWxDb250ZXh0LT5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5n
TW9kZSk7CiB9CiAKIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwcmVwYXJlSW50ZXJuYWxDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQsIEZvbnRTbW9vdGhpbmdNb2RlIHNtb290aGluZ01vZGUpCkBA
IC0zMDIsNyArMzAwLDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlw
aHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYgZ3N0YXQKICAgICAgICAgcmV0dXJu
OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBhdXRvIHRleHRQb3NpdGlvbiA9IENHQ29udGV4
dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7Cisg
ICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9zaXRpb24obV9pbnRlcm5h
bENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi54
KTsKICAgICBBU1NFUlQoIXRleHRQb3NpdGlvbi55KTsKICNlbmRpZgpAQCAtMzIxLDcgKzMxOSw3
IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgLy8gSWYgeW91IHNldCB0aGVzZSB0d28g
ZXF1YWwgdG8gZWFjaCBvdGhlciwgYW5kIHNvbHZlIGZvciBYLCB5b3UgZ2V0CiAgICAgLy8gQ1RN
ICogY3VycmVudFRleHRNYXRyaXggPSBDVE0gKiBYICogbV9vcmlnaW5hbFRleHRNYXRyaXgKICAg
ICAvLyBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVyc2UobV9vcmlnaW5hbFRleHRNYXRyaXgpID0g
WAotICAgIEFmZmluZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRl
eHRNYXRyaXgobV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIEFmZmlu
ZVRyYW5zZm9ybSBjdXJyZW50VGV4dE1hdHJpeCA9IENHQ29udGV4dEdldFRleHRNYXRyaXgobV9p
bnRlcm5hbENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3RtRml4dXA7CiAgICAgaWYgKGF1dG8gaW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXggPSBtX29y
aWdpbmFsVGV4dE1hdHJpeC5pbnZlcnNlKCkpCiAgICAgICAgIGN0bUZpeHVwID0gY3VycmVudFRl
eHRNYXRyaXggKiBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeC52YWx1ZSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCmluZGV4IDU0ZDg1NDcx
MjNmODk0N2Q2ZjJmYWNkN2ZjYTZmOTk1MTgxYTI2NzEuLjM5NTdjNDU3NmZlOTEyZDY4MTAyMDc2
MTAwMWNjMjRmNjg2ODg2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5jcHAKQEAgLTM0LDkgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
bmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAogRHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSwgUmVjb3JkZXI6OkRlbGVnYXRlKiBkZWxlZ2F0ZSkKLSAgICA6IG1fY29udGV4dChb
Jl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKLSAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0
aWFsQ1RNLCBkZWxlZ2F0ZSk7Ci0gICAgfSkKKyAgICA6IG1fY29udGV4dChtX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGlu
aXRpYWxDVE0sIGRlbGVnYXRlKQogewogfQogCkBAIC00NiwxMyArNDQsNiBAQCB2b2lkIERyYXdp
bmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KQogICAgIG1fcmVwbGF5ZWREaXNwbGF5TGlzdC5yZXNldCgpOwogfQogCi1SZWNv
cmRlciYgRHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKCkKLXsKLSAgICBhdXRvKiBncmFwaGljc0Nv
bnRleHRJbXBsID0gY29udGV4dCgpLmltcGwoKTsKLSAgICBBU1NFUlQoZ3JhcGhpY3NDb250ZXh0
SW1wbCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlY29yZGVyJj4oKmdyYXBoaWNzQ29udGV4
dEltcGwpOwotfQotCiB2b2lkIERyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQogewogICAgIGlmIChtX2Rpc3BsYXlMaXN0LmlzRW1w
dHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCmlu
ZGV4IGQzN2MwNzM1YmViNTU0OTJkOTBmZjllY2U0Y2E0ZGI3OTk1ZDVmNTguLmQ5NWRkZGVmODU3
NTI4YzgyNzllNGYxZWZiZjJkMjU4OGY2Y2E0YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMzksOCArMzksOSBAQCBjbGFzcyBEcmF3aW5n
Q29udGV4dCB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRHJhd2luZ0NvbnRleHQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFs
Q1RNID0geyB9LCBSZWNvcmRlcjo6RGVsZWdhdGUqID0gbnVsbHB0cik7CiAKKyAgICAvLyBGSVhN
RTogRGVkdXBsaWNhdGUgdGhlc2UuCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7
IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRl
ciYgcmVjb3JkZXIoKSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFr
ZURpc3BsYXlMaXN0KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0p
OyB9CiAgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlz
dDsgfQogICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGlzcGxheUxpc3Q7IH0KQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3Rl
Y3RlZDoKLSAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVyIG1fY29u
dGV4dDsKICAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbk1lbW9yeURpc3BsYXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcAppbmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJj
MGEzLi5mMjIyZTIxODNhMzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYg
aXRlbSkKIAogdm9pZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBj
b25zdAogewotI2lmIFVTRShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggMDc0MDQxZjI2YTFlOTY0ZGM0Yzc2ZjQ4MmJj
NGM5OTNlODdlZTMxNS4uZjExN2NmYTgzOTM2MDg5ZTcxZmQwNWFiNzg2NDhiZDI0OGQ1ZTc5MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdl
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVu
dGlmaWVyOyB9CiAgICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1h
Z2VJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVu
dGlmaWVyOyB9CiAKLSAgICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6
VGV4dFN0cmVhbSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4g
dm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+
IHN0YXRpYyBPcHRpb25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkg
KzMzMSw3IEBAIHZvaWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAog
ICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5jb2RlciA8
PCBzdGF0ZS5zaGFkb3dCbHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9y
OwotI2lmIFVTRShDRykKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5
UmFkaXVzOwotI2VuZGlmIC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFk
b3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3
LDEyIEBAIE9wdGlvbmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29k
ZXIpCiAKICAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dD
b2xvcjsKIAotI2lmIFVTRShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxl
Z2FjeVJhZGl1czsKLSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwot
ICAgICAgICBpZiAoIXNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNo
YWRvd1JhZGl1c01vZGU+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hh
ZG93UmFkaXVzTW9kZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNo
YWRvd3NVc2VMZWdhY3lSYWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAv
LyBVU0UoQ0cpCisgICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9
IFdURk1vdmUoKnNoYWRvd1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5n
ZS5tX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlj
a25lc3NDaGFuZ2UpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAK
aW5kZXggNjk0NDgyOGRmYzY0Yjg3NGI5MzdjZWVhZGYyYWVkYzJhNjczODExNS4uMzExMWI5MTcx
MzAyMDBmOTFmMWQ4MWJkYWZmMGI0YzA2YWY0ZTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgRGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlw
aHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbikKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxh
eUxpc3QoZGlzcGxheUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVj
dCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdh
dGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlv
biBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlM
aXN0KQogICAgICwgbV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2Up
CiAgICAgLCBtX2RyYXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uKQpAQCAtNTAsOSArNTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3Rh
dGVTdGFjay5hcHBlbmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAK
LVJlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0
JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDog
R3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQu
bV9kaXNwbGF5TGlzdCkKK1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxp
c3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVn
YXRlKQogICAgICwgbV9pc05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIo
KnRoaXMsIHBhcmVudC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b24oKSkKQEAgLTE2NiwxMSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVy
aW5nTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5k
ZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJl
Y29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQot
CiB2b2lkIFJlY29yZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBl
bmQ8U2V0TGluZUNhcD4obGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDExIEBAIHZvaWQgUmVjb3Jk
ZXI6OmFwcGVuZERyYXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgR2x5cGhCCiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7CisgICAgLy8gRklYTUU6IFRoaXMgZmVlbHMgb2RkLCBidXQgaXMgd2hhdCB1c2VkIHRvIGhh
cHBlbi4KKyAgICBpZiAoIWNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcikpIHsKKyAgICAg
ICAgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBtX2Rpc3Bs
YXlMaXN0LmNhY2hlSW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpOwogICAgIGFwcGVuZDxEcmF3SW1h
Z2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9CkBAIC0yNzAsNyArMjY5LDcgQEAgdm9pZCBSZWNv
cmRlcjo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogICAgIGFwcGVu
ZDxTZXRDVE0+KHRyYW5zZm9ybSk7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3Jt
IFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0CiB7CiAgICAgLy8gRklYTUU6IFJlc3BlY3QgdGhlIGdpdmVuIHZhbHVlIG9mIEluY2x1ZGVE
ZXZpY2VTY2FsZS4KICAgICByZXR1cm4gY3VycmVudFN0YXRlKCkuY3RtOwpAQCAtMjk4LDggKzI5
Nyw5IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogICAgIGFwcGVuZDxEcmF3TGluZT4ocG9pbnQxLCBw
b2ludDIpOwogfQogCi12b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKQordm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tl
U3R5bGUpCiB7CisgICAgLy8gRklYTUU6IFdoeSBpcyBzdHJva2VTdHlsZSBub3QgdXNlZD8KICAg
ICBhcHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2lu
dCksIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQogCkBAIC0z
MjgsNiArMzI4LDE4IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0Zv
Y3VzUmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisjaWYgUExB
VEZPUk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91
YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBk
b3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KyNlbmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUyLDkgQEAgdm9p
ZCBSZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUp
CiAgICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVj
b3JkZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0
CiB7Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1
cHBvcnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVj
dCgtMjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KGN1cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCkBAIC00NTIsMzUgKzQ2MywzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAg
IGFwcGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2lu
Z0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
JiBkcmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAg
R3JhcGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkgewotICAgICAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
ZGVzdGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICAvLyBUaGUgaW5pdGlh
bCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zv
cm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci0gICAgICAgIGF1dG8gc2NhbGVkU2l6
ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0g
ICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOwotICAgICAgICBpbml0aWFsQ1RNLnNj
YWxlKDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUu
aGVpZ2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5h
dGlvbi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRjaGVzIEltYWdlQnVmZmVy
J3MgaW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShH
cmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEZsb2F0
U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7
CisgICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRlc3RpbmF0aW9uLnNpemUo
KSAqIHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsKKyAgICBp
bml0aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBpbml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2Nh
bGVkU2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVz
dGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlY29y
ZGVyPihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0gICAgfSk7CisgICAgUmVjb3JkZXIgbmVzdGVk
Q29udGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRp
YWxDVE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRp
b24sIGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdGdW5jdGlvbihuZXN0ZWRDb250ZXh0KTsKICAg
ICBhcHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbik7Ci19CiAKLSNp
ZiBFTkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVyOjpjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QKLXsKLSAgICByZXR1cm4gISFwbGF5ZXIuaWRl
bnRpZmllcigpOworICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nl
c3M7CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKKyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwogICAgIGFwcGVu
ZDxQYWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOwogfQpAQCAtNTE3LDcg
KzUyNyw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAg
IGZsb2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVz
LCBzaGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5k
czsKICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hh
ZG93RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CkBA
IC01NDUsMTEgKzU1NSw2IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgp
IGNvbnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKIH0KIAotY29uc3QgRmxvYXRS
ZWN0JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRT
dGF0ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGI4NzZkNmFkYjUxNDczZjFm
MzBhYWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2MWMxNzljN2NhOWM3YzlkMjFmMTk0MzQwYzk3
YmI5OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjgs
NyArMjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxp
c3REcmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVk
ZSAiVGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiAr
NTAsMTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxh
eUxpc3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsK
K2NsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVi
bGljOgogICAgIGNsYXNzIERlbGVnYXRlOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdy
YXBoaWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
LCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBE
ZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpE
ZWNvbnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoRGlzcGxheUxpc3QmLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNS
ZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpE
cmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhl
bEJ1ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3NywyNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNSZWNvcmRlcjsKLSAgICBSZWNvcmRlcihSZWNv
cmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
aW5pdGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuRHJhd0ltYWdl
QnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gRklYTUU6
IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IElt
YWdlQnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBvdmVycmlk
ZSB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgb3ZlcnJp
ZGUgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwg
Ym9vbCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwog
ICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVh
clNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJy
aWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0
cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSNpZiBVU0UoQ0cpCisjaWYgVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBvdmVycmlk
ZTsKICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIw
LDE0ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5l
KGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3Zl
cnJpZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3Qg
VmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYpIG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25z
dCBDb2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNiw3ICsxNTEsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3Jt
IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Cisg
ICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VT
Y2FsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigp
IG92ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBP
dXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBh
dGgmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkg
b3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CisgICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZl
cihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Q2xpcFRv
RHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShWSURFTykK
ICAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlh
KGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZvaWQg
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CkBAIC0xNzMsNyArMTg4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGF1dG8g
aXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgIGlmIChh
dXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAgICAgICAg
ICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkKICAgICAgICAgICAg
ICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJv
dW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRlbS5nbG9i
YWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVt
RXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVj
dCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgCiAg
ICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFJl
Y3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewogICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjkyODZkMjVhMTk1MTkyMWI4
NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAxZjMzZDJmYjIwMzFmMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMu
bW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAKKyNpbXBvcnQgIkdyYXBo
aWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIK
ICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvTG9jay5o
PgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IG1ha2VT
aW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAgICAgICBSZXRhaW5QdHI8
TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VS
ZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZToxIHBpeGVs
c0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBsZXNQZXJQaXhlbDo0IGhh
c0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0
aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0
KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChiaXRt
YXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01ha2VSZWN0
KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1ZDliM2NhNGQxY2UwZmVi
OWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1NDJjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBAIC0yNiw3
ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCiAKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgi
CiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUxLDcgKzUxLDcgQEAgLSAo
dm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gbGF5
ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChf
X2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCByZWN0c1RvUGFpbnQgPSBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFpbnQoZ3JhcGhpY3NDb250
ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6ZHJh
d0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSwgcmVjdHNUb1BhaW50
LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50
U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsKTsKICAgICB9
CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYp
Y29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBsYXllciA9IFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdl
IHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewotICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAg
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXItPmFjY2Vs
ZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFD
YWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1MWNjN2UwMWQ0NzBjNTcw
ZDlkOWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQwOTJkODRiNzMyZTk4NDM5MDYzNjNlMDU2MjY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6
OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogICAg
IHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWludGluZ09w
ZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlz
dCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAgICAgbV9zdGF0ZVN0YWNr
LmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwogfQpAQCAt
MTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAogICAgIH0KIH0KIAotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAg
c3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0
YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVj
dD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQog
ICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0Pihy
ZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkp
KSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
QEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3Jh
ZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBv
c2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwg
Y29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNy
ZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVj
dCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAg
YXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM4Niw3
ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBh
dGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGlj
c0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAg
ICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQwOCw3ICs0MDMs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBo
aWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwog
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDI4LDcg
KzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+
KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBAIHZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
ICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRl
Q29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMsNyArNTE4LDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRf
Zm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCkBAIC01NTMsNyArNTQ4
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZl
SW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFN
KGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRl
KSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAg
ICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVh
dGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTYxMywx
MSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGlu
ZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29s
IHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRl
eHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBm
bG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAgICAgICB2aXJ0dWFsIH5E
cmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYyOCw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VD
b2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERy
YXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0
IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQ
YXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAg
ICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQogCi1BZmZpbmVUcmFuc2Zv
cm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6Omdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICBy
ZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMyLDcgKzEwMjMsNyBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJv
dW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwog
ICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0
ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBj
b21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAK
LXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248
dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50
RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1w
bGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVy
LCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYxZmY2MzY1NmFkYTQwOWYw
ZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhmZGY3YzVjMzM5OTcyNzdi
YmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlv
blJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAogbmFtZXNwYWNlIE5pY29z
aWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFsIDogcHVibGljIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBm
aW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewogcHVibGljOgotICAgIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFpbnRpbmdP
cGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlv
bnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAg
IHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2Fw
KFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3Qg
V2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAtNTMsNiArNTIsNyBAQCBw
cml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xv
ciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJy
aWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2Rl
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBX
ZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29y
ZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6
RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JU
ZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdl
YkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsK
LSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVU
cmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRl
OwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJD
b3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQ
YXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3Qg
Y2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lk
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1l
Rm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRp
bmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1YjhjMWQ4N2EyYzZjMzdj
Y2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBjZmJkMDZhZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmlj
b3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKICNp
bmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29z
aWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50
aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmcoQnVmZmVyJiBidWZmZXIp
CiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jYWlyby5z
dXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNv
cmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQuZ2V0KCkpOwotICAgIG1f
Z3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSgqbV9wbGF0Zm9y
bUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIFBhaW50aW5n
Q29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkKQEAgLTEwNCwxMSArMTA0
LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OnJlcGxheShjb25z
dCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZv
clJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVy
YXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJh
dGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25zKTsKIH0KIAogUGFpbnRp
bmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGluZygpID0gZGVmYXVsdDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJmNTc1ZDUyYzhiZGJkMWNl
MjgyYjhlYmE3ZDUwYmIuLmQ5NzlmM2RmMDRiOWRlYzU5NGZlNTkzZWMxNjE3ODJhM2JhODA1NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIFVTRShD
RykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAt
NjcsMzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBDR0NvbnRleHRX
aXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
CitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERDIGhkYywgYm9vbCBoYXNB
bHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNB
bHBoYSkuZ2V0KCkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
Ci17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0Fs
cGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRhLT5tX2NnQ29u
dGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMg
d2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigp
KTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICB9
CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dzQ29udGV4
dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3VpdGFibGUg
Zm9yIGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29u
dGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJs
ZW5kKQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hk
YyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAh
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXll
cigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUo
KTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0
IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGltYWdlID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7Ci0g
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3Qs
IGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVD
b250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CiAgICAg
CiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhkYyk7CkBAIC0x
MjQsMjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAo
V2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUoKS53aWR0aCgp
LCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVyUm93KCksIHNS
R0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdl
QWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lk
dGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAorICAgIENH
Q29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9jZ0NvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lk
dGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRleHRNYWMu
bW0uCiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNwcCBhbmQg
YmUgc2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4wZjsKICAgICBv
ZmZzZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5pc1ZhbGlk
KCkgPyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEgKzE0OCw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250
ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3R5bGUu
bW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcgJiYgc3R5bGUu
bW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRleHQuZ2V0KCkp
OwogfQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENH
OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGE7
Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKaW5kZXggZjE0
NDI1NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjNjOGYxZGQxMTQ1YjIxZWM1
NjFkYWY5MGExM2UzNmNmMzdkNGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3Bw
CkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNs
dWRlICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNp
bmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNjYsMjggKzY2LDkgQEAgc3RhdGljIGNhaXJvX3Qq
IGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICBy
ZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERD
IGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4
dENhaXJvKEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJv
KGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0FscGhhKSkKIHsKLSAgICBwbGF0Zm9y
bUluaXQoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
SW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBo
YXNBbHBoYSk7Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNyKSk7Ci0gICAgbV9kYXRhLT5w
bGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwotICAgIG1f
ZGF0YS0+bV9oZGMgPSBkYzsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmNyKCkpIHsKLSAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0
YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAg
IHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQotICAgIGlmIChj
cikKLSAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CiB9CiAjZW5kaWYKIApAQCAtMTI3LDkgKzEw
OCw5IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwg
fHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBj
cmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0lu
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1hcCkgewot
ICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4LDQgKzE1
OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiB9CiAj
ZW5kaWYKIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRD
YWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRl
eCAyOWE4MmE4OTc4MjI5YjBmNTg3M2FiZGY4MmJmYWY4MDZjZjE2NTk4Li42NWU5N2Y5NzM0Njky
MjgyZDI3ZmMxZWQ3ODQ4OGQxODE3M2MxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3Qy
RC5jcHAKQEAgLTQ3LDE3ICs0NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9v
bCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJn
ZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVu
ZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAg
ICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAgICBhdXRvIHRhcmdldFByb3BlcnRp
ZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCi0gICAgSFJFU1VMVCBo
ciA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdl
dCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKKyAgICBIUkVTVUxUIGhyID0gR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJn
ZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMsICZyZWN0
KTsKQEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChI
REMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRQogICAgIG1fZGF0
YS0+bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBl
KQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJU
eXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3Rvcnko
KQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgp
CiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsK
ICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODksNyBAQCBJRDJEMUZhY3Rv
cnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAgcmV0dXJuIGRpcmVjdDJE
RmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVs
dFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdl
dCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYgKCFkZWZhdWx0UmVuZGVy
VGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNz
Q29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJU
YXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywg
Ym9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5p
dChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRjKQogICAgICAgICByZXR1
cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1J
bml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRl
eHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBw
bGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUlu
aXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBwbGF0
Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZv
cm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFwbGF0Zm9ybUNv
bnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEzIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
Q29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0
aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1w
bC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwog
ICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIApAQCAtMTk1LDMzICsx
OTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJyZW50R2xv
YmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1Db250ZXh0
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKICAg
ICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0bWFwPiYg
aW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdO
YXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFnZVNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250
ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250
ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxl
bmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93c0NvbnRleHQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkK
IHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwg
aXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIW1fZGF0
YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVhdGVkQml0
bWFwKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIERp
cmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdp
bmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAgIDo6
RGVsZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0
bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBp
bWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJEOjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQog
ICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJl
clR5cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRl
clRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQor
ICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25l
ZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fb3du
ZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAgICAgLCBt
X3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVy
ZXJUeXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlx
dWVfcHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3JlbmRl
cmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMxMCw5ICsz
MDMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29saWRDb2xv
ckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xv
cikKK0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1c2hX
aXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihj
b2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMgKzM2NCw2
MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFu
Z2xlKQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9i
YWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikg
Y29uc3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9h
dD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJl
bnRHbG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpzb2xp
ZFN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0
KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3ND
b250ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKIH0K
IAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QK
K0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVz
aC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCiB7CiAg
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1c2goKnBs
YXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9y
bVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJh
d1BhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYg
aW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwg
IXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAgRGlyZWN0
MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJ
bnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUo
KSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3Jk
ZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNz
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0
aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHls
ZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJEMV9TVFJP
S0VfU1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9r
ZVN0eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1f
cGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBt
X3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUpvaW4s
IG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAw
LjBmKTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0
cm9rZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNv
bnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBz
dGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNU
TTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU0
MywxMSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigp
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRDT00o
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRl
cm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZpbGxQ
YXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBv
biBXaW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxs
QnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChw
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdQ
YXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwg
RGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBh
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4
dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBw
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9
ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5m
aWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxS
ZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJl
Y3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6Zmls
bFJlY3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFk
aWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBhdXRv
IGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFy
Z2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCgh
bV9pbXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZp
b3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVP
cGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBE
aXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwg
cHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8m
IGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6OkZp
bGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNs
aXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xp
cE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgm
IHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwogfQog
Ci1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1f
aW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRD
bGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEzLDEzIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
IW1faW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
b3BhY2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpiZWdpblRy
YW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKQEAgLTc1
NCwxMTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVu
ZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBs
YXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVjdDJEOjpl
bmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNTRVJUKCFt
X2ltcGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhh
KCk7CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBw
b3J0c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZz
ZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgKHZv
aWQpb2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRo
aWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5n
ZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29u
dGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNz
IGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAg
ICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMg
aGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNv
bnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
KTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsK
KyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53
aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAg
ICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3Vs
ZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMg
c2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGlt
aXQobGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1f
c3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAor
ICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkZpbGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09
IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBi
cnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250
ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290aGluZ01v
ZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJEMV9U
RVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5y
ZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUpOwor
ICAgIH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9
PSBhbHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0KIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKKyAgICAg
ICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9s
YXRlOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJF
U1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZv
cm1Db250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBEaXJlY3Qy
RDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpj
bGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpjbGVhclJl
Y3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgp
OwogICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGly
ZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUo
c3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBj
YXApCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2Fw
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBm
bG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZURh
c2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAg
ZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMu
c2l6ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkK
ICAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5n
dGg7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4p
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1
bGUgZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNj
YWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91
c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgqcGxh
dGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRy
YW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgp
LCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
ICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5lVHJhbnNm
b3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGlu
Y2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICBy
ZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0
Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdN
b2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4
ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMo
cmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5k
VG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewot
ICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMu
YXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9u
KCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VT
dHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4
dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VT
dHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50
LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25z
dCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhp
Y3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVj
b3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5
IGxpc3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0K
LSAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9O
X01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2Ug
SW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lO
VEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFs
aXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwg
cXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJ
c0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxh
eWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5
ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBu
ZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxl
cmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29u
dGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICghaGFzUGxh
dGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBEaXJl
Y3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0
RHJhd2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICAodm9p
ZCltb2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBU1NF
UlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0g
YnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZv
ciBEaXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
VGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NFUlQobV9z
dGF0ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNldFN0cm9r
ZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8
fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KKyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9y
KTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOworICAg
IERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3Rh
dGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
fHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMo
KnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUu
c3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNt
b290aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNFRF9QQVJB
TShmb250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4T2Zmc2V0
ID0gcG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBo
cyk7CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKKyAg
ICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7CiAK
LSAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElB
U19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUo
Zm9udFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1H
bHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5j
ZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIu
YWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAgICBtX2Rh
dGEtPnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChp
ICsgZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRo
KCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lk
dGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+
aGVpZ2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJsZSBzeW50
aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0
YXRlLCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250
YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJh
d2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0
ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGljc0NvbnRl
eHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9u
Q29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7Ci0gICAg
Ly8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90IGltcGxl
bWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3Rh
dGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRv
IGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAg
ICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxs
aXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250ZXh0ID0g
JmdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0
UmVjdCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQg
fHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMg
aW4gRDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBE
aXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRl
LnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cyk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRl
ICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0j
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
RGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dERpcmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNy
ZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsK
LSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgK
LSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBs
RmFjdG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0pOwotfQot
Ci1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0
Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBt
X3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBH
cmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2
YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0
KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihy
ZW5kZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNv
bnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNl
dEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUt
PnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBtX3BsYXRm
b3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29s
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAo
ZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAg
ICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4
dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0g
ICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAg
ICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8v
IE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0
IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAg
ICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUm
PihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09m
ZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFk
b3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgp
IH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRl
T3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFyU2hh
ZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVD
YXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1fcGxhdGZv
cm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0
KQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVz
LCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNl
dExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lSm9p
bihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIERp
cmVjdDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBEaXJl
Y3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERp
cmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQu
Y3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICgh
YnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFk
aWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0g
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJl
dmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09w
ZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNoYWRvd1N0
YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGlyZWN0MkQ6
OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0
YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNP
cGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0K
LSAgICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRl
eHQoKSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSht
X3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNlLCBEaXJl
Y3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkK
LXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGly
ZWN0MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6RmlsbFNv
dXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRF
bGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0
IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxp
bmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkp
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9r
ZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3Rh
dGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNl
KHJlY3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIERp
cmVjdDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBj
b25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRT
bW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICgh
Zm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhu
dW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBo
cyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlw
aHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0g
ICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZh
bmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20p
OwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAg
ICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0g
ICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgp
OwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0
aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJv
a2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBo
cywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0
YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dP
ZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6
ZHJhd05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCku
Z2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhh
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2Uu
cGxhdGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9y
bUNvbnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3Qs
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVy
YXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRl
clRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ry
b2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0xp
bmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0
ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tu
ZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVV
bmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9p
bnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUu
c3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50
TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxD
b2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VU
aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1Bh
dGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFS
QU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cmVzdG9y
ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwg
YW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZShtX3Bs
YXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAg
RGlyZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTShtX3BsYXRm
b3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNj
YWxlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29u
dGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIERp
cmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0
IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQs
IHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNs
aXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3Qg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4g
RGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAm
Z3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0Nv
bnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9h
dFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1F
OiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5MGVlYTdi
NDJmMjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwot
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGlj
c0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCopOwotICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9vbCBoYXNQ
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBC
bGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tl
UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRT
bW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBz
b3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBk
cmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4o
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0
JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQ
YXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZs
b2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3Qg
RmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
Jikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
bGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBh
dGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAg
IHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsK
LQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdy
YXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0Owot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9w
cml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJ
UkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3NzVhNjJi
YWVhMjJmOTkwNjA3ZWI0Y2JkLi43N2RhZmUzMjBiYjA3MzA4OTAxMDBkN2M0YWYxMDQxNjM2OWU3
MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0YXRpYyB2
b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9STShXSU4p
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhib29s
IGluY2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgPSBp
bmNsdWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1ZGVD
aGlsZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hvdWxk
SW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9zaG91
bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRl
eHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0NvbnRleHQ6
OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKQEAgLTk1LDE1ICs5NSwxMyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5X
aW5kb3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6V2luZG93
c0JpdG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0IEludFNp
emUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4obV9kYXRh
LT5tX2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4oZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgogCiBIREMg
R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0
LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIEhEQyBoZGMgPSBudWxscHRyOwotICAg
IGlmICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEtPm1faGRjOworICAgIEhEQyBoZGMg
PSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiAgICAgLy8gRklYTUU6IFNob3Vs
ZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAgICAgaWYg
KCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgaWYgKGRzdFJlY3Qu
aXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzMsMTcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0
V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEK
ICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAgICB9CiAKLSAgICBtX2RhdGEtPmZs
dXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7Cisg
ICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpoZGMoKSBjb25zdAogewot
ICAgIGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAg
cmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogI2lmIFBMQVRG
T1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NTk5YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNjNzljMGNiYzBjNDc2Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRl
eHRDRworCisjZWxpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQKKworI2VsaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENhaXJvCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1
YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1
MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
Y3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFw
bGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250
ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsK
KyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihw
bGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29u
dGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2Uy
YmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAK
QEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklU
TUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcEluZm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgs
IGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29u
dGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsK
IAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlm
IChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3
YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWly
b1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNp
bmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fp
cm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1B
UE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0
YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
IGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6
OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRj
YTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWExN2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3
MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9r
ZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBo
aWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29u
dGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAg
IHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxF
RApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3Qo
Y29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hD
b250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNj
cmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tl
U3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1
OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNi
ZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
RHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
CiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0
TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhT
aXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2UgKmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkg
aW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVy
ZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29u
dGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRl
cmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFn
ZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2Fs
ZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQs
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTpp
bWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0
aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7
Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRl
eHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5D
R0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQo
aW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAg
Y29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwg
VGV4dEluZGljYXRvckRhdGEmIGluZGljYQogCiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXpl
OmltYWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlv
bnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dD
b250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQg
bm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhl
IHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJp
bHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
MCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0gKnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJ
bWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdl
XShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAg
ICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
Rm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAg
ICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVy
ZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFn
ZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
Y29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAg
Y29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAg
ICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRS
ZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDcz
YmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9B
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNv
dXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUg
IkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIyZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNi
ODg3M2Y1NTA5Li5hYzZlMjQ0ZDA0MWU5ZmU2YmY2MmYxZTYxNWFmOTllNmNmMjUwMmU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dFdpbi5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAj
aW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCkBAIC0xODYsNyArMTg3LDcgQEAgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGluTGFiZWwsIFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0
T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KGNvbnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGNv
bnRleHRSZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwg
aG93ZXZlciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9u
IHdpbiwgc28gd2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBT
UkdCQTx1aW50OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2Fi
NmIxM2FmODM0NzJlNy4uMjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRXaW4uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIK
ICNpbmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1l
bnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAg
IDo6U2VsZWN0T2JqZWN0KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRX
aW4gY29udGV4dChtX0RDLmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VS
ZWN0IHRyYW5zbGF0ZWQgaW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxp
c3QgKHdoaWNoIGlzIGxpc3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIElu
dFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2
YzA5YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1
ZjQzYjc2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVs
UGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1
bFBhaW50Q2hlY2tlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTM4LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZp
ZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3
LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJz
KTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBH
cmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBo
aWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFs
aWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3
LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJl
Y3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJl
Q29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2Mw
Yi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAs
MTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9
IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFk
b3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJv
eFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNo
YWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRv
dy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3co
c2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdD
b2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0Nv
bG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1
bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hv
b3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYg
aW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQz
OSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93
KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9h
dFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhl
bChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNl
UGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAg
ICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4g
LSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAg
aWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
d0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNo
YWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1Jh
ZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1Jh
ZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAg
ICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJv
eCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBk
b2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBM
YXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAg
ICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYg
KHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNl
dExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRv
d09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRl
eHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hh
ZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3Qs
IGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2
N2NjNjZlZTVhMjVjNzRkZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdj
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3Rh
Y2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRl
ICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBl
cmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBA
IC0xNzg5LDcgKzE3OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRS
ZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBb
Jl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgbnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVs
bENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpO
b25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRB
QkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRp
dGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1No
YXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYx
NTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
YWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05v
dEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewog
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7
CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVh
dGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+
KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0Lmdl
dCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1h
cENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFi
bGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBD
Ry5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQw
NmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5n
ZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBD
b250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVC
aXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291
cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAw
OGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQy
NDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0
MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Tm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0Nv
bnRleHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRl
eHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5n
U3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRm
Ni4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fp
cm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQ
dHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFj
a2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29u
c3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBv
aW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2Nh
dGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWly
b0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRl
eHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJh
d3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0
cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwg
Yml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3Zl
cndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1
Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMw
LDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
Ci0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1w
b3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9y
dCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUv
TG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4K
IAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRP
cmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7
CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkg
PSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0g
KHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpT
aGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0g
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRd
KTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29u
dGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5k
ZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0
bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
QmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0Jh
Y2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0
YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0
MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJl
Y3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9y
ZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmlu
ZGV4IDNjYWNiOWFlYzY0Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4
NjI5ZjYxM2QzMWI4NDczOTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBA
QAogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
YmFyVGhlbWUuaD4KQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2lu
OjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNl
bGVjdE9iamVjdChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNv
bnRleHQobV9EQy5nZXQoKSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJh
Y2tCdWZmZXI7IAogICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9f
dXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1
ZmZlcikpOyAKQEAgLTg2Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpw
YWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAg
cGxhdGZvcm1Db250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRl
eHRXaW4gY29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRy
YW5zbGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1
Yjk4Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNk
ZjZmMGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BE
Ri9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERG
L1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250
ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVy
Q29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9y
dCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAog
I2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JF
TUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5
cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAt
MTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5D
b250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1
bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5j
ZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2Jk
Yjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00
Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
VE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNp
bXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJl
dGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVj
dCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBk
ZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50
cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVh
Q29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAK
aW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0
MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApA
QCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVT
RShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5o
PgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQx
YzVjMy4uMDA5ZmU4OTA5NjU3MGZjNzM1NjAyNDdhNDIwZjU0NDZhODdkOTcwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIs
MTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRp
ZgogCisjaWYgVVNFKENHKQorLy8gQnV0IHJlYWxseSBwcm9iYWJseSB3ZSBzaG91bGQgbW92ZSB0
aGUgQ0ctc3BlY2lmaWMgUERGIHBhaW50aW5nIGNvZGUgb3V0IG9mIFdlYlBhZ2UuY3BwLgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTUzNzUsNyArNTM4MCw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKEZy
YW1lSWRlbnRpZmllciBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50CiAgICAgICAgICAg
ICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gcGFnZUluZm8gPSBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZU11dGFibGUoMCwgMCwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwogICAgICAgICAgICAgICAgIENH
UERGQ29udGV4dEJlZ2luUGFnZShjb250ZXh0LmdldCgpLCBwYWdlSW5mby5nZXQoKSk7CiAKLSAg
ICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNvbnRleHQuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGN0eChjb250ZXh0LmdldCgpKTsKICAgICAgICAg
ICAgICAgICBjdHguc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CiAgICAgICAgICAgICAgICAgY3R4
LnRyYW5zbGF0ZSgwLCAtbV9wcmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLmhlaWdodCgpKTsK
ICAgICAgICAgICAgICAgICBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKGN0eCwgcGFnZSwgbV9w
cmludENvbnRleHQtPnBhZ2VSZWN0KHBhZ2UpLndpZHRoKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0
ay5jcHAKaW5kZXggZGUxZjA2ZGQ4YWRhOGZkZmZjNWEwOTg3MzljNGFlYWI5YmIzM2E4NS4uMzk5
YjFlODBhM2Q4NGQxZDBkMzAwOTZhYzQ0NjUwYWM5OGY1ODE1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1bWVudExv
YWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Zy
YW1lTG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KQEAgLTY3Niw3ICs2NzYs
NyBAQCB2b2lkIFdlYlByaW50T3BlcmF0aW9uR3RrOjpyZW5kZXJQYWdlKGludCBwYWdlTnVtYmVy
KQogICAgIHByZXBhcmVDb250ZXh0VG9EcmF3KCk7CiAKICAgICBkb3VibGUgcGFnZVdpZHRoID0g
Z3RrX3BhZ2Vfc2V0dXBfZ2V0X3BhZ2Vfd2lkdGgobV9wYWdlU2V0dXAuZ2V0KCksIEdUS19VTklU
X0lOQ0gpICogbV94RFBJOwotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1f
Y2Fpcm9Db250ZXh0LmdldCgpKSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8g
Z3JhcGhpY3NDb250ZXh0KG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKICAgICBtX3ByaW50Q29udGV4
dC0+c3Bvb2xQYWdlKGdyYXBoaWNzQ29udGV4dCwgcGFnZU51bWJlciwgcGFnZVdpZHRoIC8gbV9z
Y2FsZSk7CiAKICAgICBjYWlyb19yZXN0b3JlKG1fY2Fpcm9Db250ZXh0LmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCmluZGV4
IGQ1NDFjNGMwNGYyZDc1ZDA2YmVlMDgwZWJjZmU2NmIwYTQ1ZmJlZjYuLjkyOGFlN2Q1MWUzZjBi
N2Q5MTAyMGM3ZGEyODhlZGUyNDVjMzg1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtMzksNyArMzksNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HQ0NvbnRyb2xsZXIuaD4KICNp
bXBvcnQgPFdlYkNvcmUvR2x5cGhQYWdlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgogI2ltcG9ydCA8V2ViQ29yZS9QYWdlQ29uc29sZUNsaWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9QcmludENvbnRleHQuaD4KQEAgLTMwNSw3ICszMDUsNyBA
QCAtICh2b2lkKXByaW50VG9DR0NvbnRleHQ6KENHQ29udGV4dFJlZiljZ0NvbnRleHQgcGFnZVdp
ZHRoOihmbG9hdClwYWdlV2lkdGhJblBpeAogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNnQ29udGV4dCk7CiAgICAg
UHJpbnRDb250ZXh0OjpzcG9vbEFsbFBhZ2VzV2l0aEJvdW5kYXJpZXMoKmNvcmVGcmFtZSwgZ3Jh
cGhpY3NDb250ZXh0LCBGbG9hdFNpemUocGFnZVdpZHRoSW5QaXhlbHMsIHBhZ2VIZWlnaHRJblBp
eGVscykpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dl
YktpdE5TU3RyaW5nRXh0cmFzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJL
aXROU1N0cmluZ0V4dHJhcy5tbQppbmRleCAyYmEwMDZkZDNlN2IyYWZjNTBlZmYyODQ1MzIwZDk2
NTA1YmE3MWJhLi43ODMyNTYxOWMxYWM3NzQ0ZTg4ZmQ0OTI1MzZjOTU3YTA0MjQ0ZjdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFz
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRy
YXMubW0KQEAgLTMwLDcgKzMwLDcgQEAKIAogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5oPgog
I2ltcG9ydCA8V2ViQ29yZS9Gb250Q2FzY2FkZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvTG9hZGVyTlNVUkxFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvVGV4dFJ1
bi5oPgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTc4LDcgKzc4
LDcgQEAgLSAodm9pZClfd2ViX2RyYXdBdFBvaW50OihOU1BvaW50KXBvaW50IGZvbnQ6KE5TRm9u
dCAqKWZvbnQgdGV4dENvbG9yOihOU0NvbG9yICoKIAogICAgICAgICBOU0dyYXBoaWNzQ29udGV4
dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICAg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRleHQgQ0dDb250ZXh0XTsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dCB7IGNnQ29udGV4dCB9OworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKIAogICAg
ICAgICAvLyBXZWJDb3JlIHJlcXVpcmVzIGEgZmxpcHBlZCBncmFwaGljcyBjb250ZXh0LgogICAg
ICAgICBib29sIGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxpcHBlZF07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdo
dFZpZXcubW0KaW5kZXggZDM5NzNlMjk0NDU5ZWNmMWRiZGVmNDQ5ZWYyY2ZkMmNhY2I4ZWQzNS4u
OTUwYWU4ZTAwZDMwYTQ1MjA5ZjlhZGRhM2MyYjMzZjEzMTAwMjJjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxp
Z2h0Vmlldy5tbQpAQCAtMjksNyArMjksNyBAQAogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodFZp
ZXcuaCIKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHQuaCIKIAotI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvSW5zcGVjdG9yQ29udHJvbGxlci5oPgogI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KIApAQCAtOTgsNyArOTgsNyBAQCAtICh2b2lkKWRyYXdSZWN0OihOU1JlY3Qp
cmVjdAogCiAgICAgICAgIEFTU0VSVChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBpc0ZsaXBwZWRdKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChbW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBD
R0NvbnRleHRdKTsKICAgICAgICAgW193ZWJOb2RlSGlnaGxpZ2h0IGluc3BlY3RvckNvbnRyb2xs
ZXJdLT5kcmF3SGlnaGxpZ2h0KGNvbnRleHQpOwogICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQg
cmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGYzNWQ3YmQ1YTIzNTFiMmIwMWI2OGJiMWUyMTZmNzQ1
N2U0MThhNzEuLjk1YmRhMzkwY2E2OWJhNmI5NjIwZjUxYmVlNjk2YjIxMjM5YWIxNGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtODEsNyArODEs
NyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlclN0YXRlTWFjaGluZS5oPgogI2ltcG9y
dCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVRyZWUu
aD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SGlzdG9yeUl0ZW0uaD4KQEAgLTYxMyw3ICs2MTMsNyBAQCAtICh2b2lkKV9kcmF3UmVjdDooTlNS
ZWN0KXJlY3QgY29udGVudHNPbmx5OihCT09MKWNvbnRlbnRzT25seQogI2Vsc2UKICAgICBDR0Nv
bnRleHRSZWYgY3R4ID0gV0tHZXRDdXJyZW50R3JhcGhpY3NDb250ZXh0KCk7CiAjZW5kaWYKLSAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgY29udGV4dChjdHgpOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHIGNvbnRleHQoY3R4KTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKaW5kZXgg
NTE5YTU3MzZkMmEzNTBkNzI3ODY3NjVmYjE4ZmNmMzM5YzVlYzY4ZS4uYWQ2NjA3ZTQ1MTBlNTlm
NTE4ZmVlZjFkOGNjNjM2NTZhODRlZDQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250
U2VsZWN0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25k
REMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRS
dW4uaD4KQEAgLTQ5MCw3ICs0OTEsNyBAQCB2b2lkIEZ1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXI6
OmRyYXcoKQogICAgIGF1dG8gYml0bWFwREMgPSBhZG9wdEdESU9iamVjdCg6OkNyZWF0ZUNvbXBh
dGlibGVEQyhIV25kREMobV9odWRXaW5kb3cpKSk7CiAgICAgSEdESU9CSiBvbGRCaXRtYXAgPSBT
ZWxlY3RPYmplY3QoYml0bWFwREMuZ2V0KCksIG1fYml0bWFwLmdldCgpKTsKIAotICAgIEdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KGJpdG1hcERDLmdldCgpLCB0cnVlKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRXaW4gY29udGV4dChiaXRtYXBEQy5nZXQoKSwgdHJ1ZSk7CiAKICAgICBjb250ZXh0LnNh
dmUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCmluZGV4IDJmNTExMDMxMzYx
OTQ1N2NkYWMzYjMxY2E1YmQ1Mzc2YWJjYjIxNzcuLjhkYTkxOTQ4M2IwZGFhNzEwZDYyMzYyZTli
M2EwNDY5ZDUwMmJkY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTc0
LDYgKzc0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lV2luLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HRElPYmplY3RDb3VudGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRN
TEZvcm1FbGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQu
aD4KQEAgLTMyMSw3ICszMjIsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVj
dFRvQ29udGV4dChSRUNUIHJlY3QsIF9Jbl8gSERDIGRldmljZUNvbnRleHQpCiAgICAgLy8gV2Ug
Y2FuJ3QgcGFpbnQgd2l0aCBhIGxheW91dCBzdGlsbCBwZW5kaW5nLgogICAgIHZpZXctPnVwZGF0
ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCBnYyhkZXZpY2VDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoZGV2aWNlQ29u
dGV4dCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh0cnVlKTsKICAgICBn
Yy5zYXZlKCk7CiAgICAgTE9ORyB3aWR0aCA9IHJlY3QucmlnaHQgLSByZWN0LmxlZnQ7CkBAIC0z
NTIsNyArMzUzLDcgQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29u
dGV4dEF0UG9pbnQoUkVDVCByZWN0LCBQT0lOVCBwdCwgX0luXwogICAgIC8vIFdlIGNhbid0IHBh
aW50IHdpdGggYSBsYXlvdXQgc3RpbGwgcGVuZGluZy4KICAgICB2aWV3LT51cGRhdGVMYXlvdXRB
bmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoZGV2
aWNlQ29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGdjKGRldmljZUNvbnRleHQpOwog
ICAgIGdjLnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAgICAgZ2Muc2F2ZSgp
OwogICAgIEludFJlY3QgZGlydHlSZWN0KHJlY3QpOwpAQCAtMTgwOCw3ICsxODA5LDcgQEAgSFJF
U1VMVCBXZWJGcmFtZTo6c3Bvb2xQYWdlcyhIREMgcHJpbnREQywgVUlOVCBzdGFydFBhZ2UsIFVJ
TlQgZW5kUGFnZSwgdm9pZCogY3QKICAgICBmbG9hdCBoZWFkZXJIZWlnaHQgPSAwLCBmb290ZXJI
ZWlnaHQgPSAwOwogICAgIGhlYWRlckFuZEZvb3RlckhlaWdodHMoJmhlYWRlckhlaWdodCwgJmZv
b3RlckhlaWdodCk7CiAjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pCi0gICAgR3JhcGhpY3NDb250
ZXh0IHNwb29sQ3R4KHBjdHgpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBzcG9vbEN0eChwY3R4
KTsKICAgICBzcG9vbEN0eC5zZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogCiAg
ICAgZm9yIChVSU5UIGlpID0gc3RhcnRQYWdlOyBpaSA8IGVuZFBhZ2U7IGlpKyspCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdobGlnaHQuY3BwCmluZGV4IDA3YTJmNjA0ZjM5
N2EyYTU4YjJkNzc1MWM0NGVhOTIxOTQzMTg3MzAuLjEwNjIzYWU5YjJkNDcwMTVlZTgyY2VjY2Yw
OWY5MmJiZDI1MzVkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5v
ZGVIaWdobGlnaHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVIaWdo
bGlnaHQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZv
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW5zcGVjdG9yQ29u
dHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgpAQCAtMTU3LDggKzE1OCw4IEBA
IHZvaWQgV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKCkKIAogICAgIDo6U2VsZWN0T2JqZWN0KGhk
Yy5nZXQoKSwgaGJtcC5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChoZGMu
Z2V0KCkpOwotICAgIGNvbnRleHQuc2NhbGUobV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGhkYy5n
ZXQoKSk7CisgICAgc3RhdGljX2Nhc3Q8R3JhcGhpY3NDb250ZXh0Jj4oY29udGV4dCkuc2NhbGUo
bV9pbnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIG1f
aW5zcGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hs
aWdodChjb250ZXh0KTsKIAogICAgIEJMRU5ERlVOQ1RJT04gYmY7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlZpZXcuY3BwCmluZGV4IGMxMWFjOWQ5N2RiYWZlMmEzZjI4NDc3Y2NlMDQ0MWQ5Yjk3NzAz
NjAuLmE0YmU4NGYxNTVlNjMzNjExMjM2MDBkODI5MjI0ZTYxMzhjZTI1ZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC0xMTYsNiArMTE2LDcgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL0dlb2xvY2F0aW9uQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRp
b25FcnJvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxO
YW1lcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFRNTFZpZGVvRWxlbWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFduZERDLmg+CkBAIC0xMjUwLDcgKzEyNTEsNyBAQCB2b2lkIFdlYlZpZXc6OnBh
aW50V2l0aERpcmVjdDJEKCkKIAogICAgIFJFQ1QgY2xpZW50UmVjdCA9IHt9OwogICAgIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEIHBsYXRmb3JtQ29udGV4dChtX3JlbmRlclRhcmdldC5nZXQoKSk7
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdjKCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3ND
b250ZXh0V2luIGdjKCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICB7CiAgICAgICAgIG1fcmVuZGVy
VGFyZ2V0LT5TZXRUYWdzKFdFQktJVF9EUkFXSU5HLCBfX0xJTkVfXyk7CkBAIC0xMjczLDcgKzEy
NzQsNyBAQCB2b2lkIFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKCkKICAgICAgICAgICAgIGdj
LmNsaXAobG9naWNhbERpcnR5UmVjdCk7CiAgICAgICAgICAgICBmcmFtZVZpZXctPnBhaW50KGdj
LCBsb2dpY2FsRGlydHlSZWN0KTsKICAgICAgICAgICAgIGlmIChtX3Nob3VsZEludmVydENvbG9y
cykKLSAgICAgICAgICAgICAgICBnYy5maWxsUmVjdChsb2dpY2FsRGlydHlSZWN0LCBDb2xvcjo6
d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxHcmFwaGljc0NvbnRleHQmPihnYykuZmlsbFJlY3QobG9naWNhbERpcnR5UmVj
dCwgQ29sb3I6OndoaXRlLCBDb21wb3NpdGVPcGVyYXRvcjo6RGlmZmVyZW5jZSk7CiAgICAgICAg
ICAgICBnYy5yZXN0b3JlKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDA3LDcgKzE0MDgsNyBA
QCB2b2lkIFdlYlZpZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZShGcmFtZVZpZXcqIGZyYW1lVmll
dywgSERDIGJpdG1hcERDLCBjb25zdCBJbgogICAgIG1fYmFja2luZ1N0b3JlUmVuZGVyVGFyZ2V0
ID0gbnVsbHB0cjsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGJpdG1hcERDLCBt
X3RyYW5zcGFyZW50KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoYml0bWFwREMsIG1fdHJh
bnNwYXJlbnQpOwogICAgIGdjLnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3Mod2luZG93c1Rv
UGFpbnQgPT0gUGFpbnRXZWJWaWV3QW5kQ2hpbGRyZW4pOwogICAgIGdjLnNhdmUoKTsKICAgICBp
ZiAobV90cmFuc3BhcmVudCkKQEAgLTE0MjUsNyArMTQyNiw3IEBAIHZvaWQgV2ViVmlldzo6cGFp
bnRJbnRvQmFja2luZ1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBIREMgYml0bWFwREMsIGNv
bnN0IEluCiAgICAgICAgIGdjLmNsaXAobG9naWNhbERpcnR5UmVjdCk7CiAgICAgICAgIGZyYW1l
Vmlldy0+cGFpbnQoZ2MsIGxvZ2ljYWxEaXJ0eVJlY3QpOwogICAgICAgICBpZiAobV9zaG91bGRJ
bnZlcnRDb2xvcnMpCi0gICAgICAgICAgICBnYy5maWxsUmVjdChsb2dpY2FsRGlydHlSZWN0LCBD
b2xvcjo6d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlKTsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdyYXBoaWNzQ29udGV4dCY+KGdjKS5maWxsUmVjdChsb2dpY2FsRGlydHlS
ZWN0LCBDb2xvcjo6d2hpdGUsIENvbXBvc2l0ZU9wZXJhdG9yOjpEaWZmZXJlbmNlKTsKICAgICAg
ICAgZ2MucmVzdG9yZSgpOwogICAgIH0KICAgICBnYy5yZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDUwNjk4YjBiYWZkYmUwMjg3
NWIzMzc4ODc0Zjk0YmRmN2FkM2Y4Zi4uODc5NTI5NjBiYTg5NDgwZTJhYjllMmQxMmJkMGMyMWNm
NzM5MjQ3ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA1LTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDUtMjQgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBw
bGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25Db2xvclNwYWNlIGZyb20gYW4g
ZW51bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9yIHNwYWNlIChDR0NvbG9yU3Bh
Y2VSZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAppbmRleCA4N2Ez
NmFjZmU2YTEwMGNjMzIzZTI0ODk3ZmNlMzgwM2YyMzRhNzc4Li5hNTk4ZDU0YTI3NTI5NThjNDJl
NGUyYjc5ZTUzMzdjNTdiMTc0YjQ2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGll
bnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAKIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDksNyArNTAs
NyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIFJlcGxheVdpdGhNaXNzaW5nUmVzb3VyY2UpCiAK
ICAgICBhdXRvIGNvbG9yU3BhY2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKICAg
ICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JT
cGFjZS5wbGF0Zm9ybUNvbG9yU3BhY2UoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAg
ICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBh
dXRvIGltYWdlQnVmZmVySWRlbnRpZmllciA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjo6
Z2VuZXJhdGUoKTsKIApAQCAtMTEzLDcgKzExNCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywg
T3V0T2ZMaW5lSXRlbURlY29kaW5nRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFk
b3B0Q0YoQ0dDb2xvclNwYWNlQ3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAg
ICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIs
IGNvbnRleHRXaWR0aCwgY29udGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JT
cGFjZS5nZXQoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRl
eHRDRyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBEaXNwbGF5TGlzdCBvcmln
aW5hbExpc3Q7CiAgICAgV3JpdGluZ0NsaWVudCB3cml0ZXI7CkBAIC0xNDQsNyArMTQ1LDcgQEAg
VEVTVChEaXNwbGF5TGlzdFRlc3RzLCBJbmxpbmVJdGVtVmFsaWRhdGlvbkZhaWx1cmUpCiAKICAg
ICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtD
R0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQg
KiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgp
IH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9Owog
CiAgICAgYXV0byBydW5UZXN0V2l0aEludmFsaWRJZGVudGlmaWVyID0gWyZdKEZsdXNoSWRlbnRp
ZmllciBpZGVudGlmaWVyKSB7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpZGVudGlmaWVyLmlzVmFs
aWQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429680</attachid>
            <date>2021-05-25 12:41:46 -0700</date>
            <delta_ts>2021-05-25 13:35:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525124145.patch</filename>
            <type>text/plain</type>
            <size>427649</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmNDJkMWM1OWUwNWM4
MmEzYWIxNGZkZDBlOGQ3M2Y0OWFhMzVkNS4uZDk0YjNiYTMwMzJmYzAwNjEyMzcxOThiYmFkODI1
OThmOTIzMjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxNSBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgSW4g
cHJlcGFyYXRpb24gZm9yIGZ1dHVyZSBwYXRjaGVzIHdoaWNoIGludHJvZHVjZSBuZXcga2luZHMg
b2YgR3JhcGhpY3NDb250ZXh0cywKKyAgICAgICAgdmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQs
IG1vdmluZyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgaW50byBzdWJjbGFzc2VzCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dHtDRyxDYWlybyxEaXJlY3QyRH0sIE51bGxHcmFwaGljc0NvbnRleHQs
IERpc3BsYXlMaXN0OjpSZWNvcmRlciwKKyAgICAgICAgYW5kIE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0SW1wbCBkaXNzb2x2ZXMgYXdh
eTsgcGxhdGZvcm0gY29udGV4dHMgdGhhdCB3ZXJlCisgICAgICAgIHVubmVjZXNzYXJpbHkgaW1w
bGVtZW50ZWQgYm90aCBhcyBgR3JhcGhpY3NDb250ZXh0YCBhbmQgYXMgYSBzdWJjbGFzcworICAg
ICAgICBvZiBHcmFwaGljc0NvbnRleHRJbXBsIChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gYW5k
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCkKKyAgICAgICAgYXJlIGZvbGRlZCBpbnRvIHRo
ZWlyIEdyYXBoaWNzQ29udGV4dCBzdWJjbGFzcy4KKworICAgICAgICBgcGFpbnRpbmdEaXNhYmxl
ZCgpYCBpcyBubyBsb25nZXIgcmVsZXZhbnQgaW4gR3JhcGhpY3NDb250ZXh0IGltcGxlbWVudGF0
aW9ucywKKyAgICAgICAgc28gd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gY2hlY2sgaXQgZXZlcnl3aGVy
ZTsgTnVsbEdyYXBoaWNzQ29udGV4dCBvdmVycmlkZXMKKyAgICAgICAgZXZlcnl0aGluZyB3aXRo
IGFuIGVtcHR5IGltcGxlbWVudGF0aW9uLiBXZSBrZWVwIGBwYWludGluZ0Rpc2FibGVkKClgIGZv
cgorICAgICAgICB1c2UgaW4gY29kZSBvdXRzaWRlIG9mIEdyYXBoaWNzQ29udGV4dCwgd2hlcmUg
aXQganVzdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4KKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBhbmQgdGhlIG90aGVycy4KKworICAgICAgICBBbHNvLCBhIGZldyBiaXRzIG9mIGNsZWFudXAg
dG8gbWFrZSB0aGlzIGVhc2llcjoKKworICAgICAgICAtIExlZ2FjeSBzaGFkb3cgcmFkaXVzIGJl
aGF2aW9yIGJlY29tZXMgYSBwYXJhbWV0ZXIgdG8gc2V0U2hhZG93IGluc3RlYWQgb2YgYSBzZXBh
cmF0ZSBtZXRob2QuCisgICAgICAgIC0gY2FudmFzQ2xpcCgpLCB3aGljaCBoYXNuJ3QgZG9uZSBh
bnl0aGluZyBkaWZmZXJlbnQgdGhhbiBjbGlwKCkgc2luY2UgU2tpYSwgaXMgcmVtb3ZlZC4KKyAg
ICAgICAgLSBHcmFwaGljc0NvbnRleHQgZ2FpbnMgcmVuZGVyaW5nTW9kZSgpIGluIHBsYWNlIG9m
IGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkuCisgICAgICAgIC0gU3ViY2xhc3NlcyBvdmVycmlkZSB1
cGRhdGVTdGF0ZSgpIHRvIHJlc3BvbmQgdG8gR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMs
CisgICAgICAgICAgYXMgd2FzIGFscmVhZHkgZG9uZSBmb3IgR3JhcGhpY3NDb250ZXh0SW1wbCwg
dG8ga2VlcCBzdWJjbGFzc2luZyBzaW1wbGUuCisgICAgICAgIC0gYnVpbGRlclN0YXRlKCksIHdo
aWNoIHdhcyB1bnVzZWQsIGlzIHJlbW92ZWQuCisgICAgICAgIC0gZHJhd1BhdGgoKSBpcyBpbnRy
b2R1Y2VkIG9uIGFsbCBwbGF0Zm9ybXMsIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRo
YXQganVzdCBmaWxscyBhbmQgc3Ryb2tlcy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6Cisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFp
bnRlcjo6cGFpbnRCb3hTaGFkb3cgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNBY2NlbGVyYXRlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVk
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1l
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVjdCk6CisgICAgICAgICog
cGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0v
U291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2Nv
YS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hh
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1
bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1BsYXRm
b3JtQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRT
aG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0VGV4dERyYXdpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJhbmNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmlj
ZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0lu
dGVybmFsTGlua3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGVyZm9ybWluZ1BhaW50SW52YWxp
ZGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6aW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3RoRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
b21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1NoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5U
cmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVS
TEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5h
dGlvbkZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGREZXN0
aW5hdGlvbkF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltcGwpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6Cisg
ICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5Q2FsbGJh
Y2spOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdSZXBhaW50Q291
bnRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tp
bmdMYXllcldpbi5jcHA6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxh
eUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86On5HcmFwaGljc0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2F2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
c3Ryb2tlQm91bmRpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9r
ZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb3JlSW50ZXJwb2xhdGlvblF1YWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2dJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpjZ1RleHREcmF3aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0dGVybkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91
bmRlZFJlY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0Rldmlj
ZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVz
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0SXNDQUxheWVy
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aXNDQUxheWVy
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0
SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydEludGVycG9sYXRpb25RdWFsaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpp
c0FjY2VsZXJhdGVkQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3Ro
Rm9udHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUFscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxF
bGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1TdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBv
aW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXR0ZXJuQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Rm9jdXNSaW5nVG9Db250ZXh0
QXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFj
ZTo6ZW5zdXJlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZWNv
cmRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjph
cHBseSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OlJlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJTaGFkb3cp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpnZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIubW06CisgICAgICAgICgtW1dlYkxheWVyIGRyYXdJbkNvbnRleHQ6XSk6Cisg
ICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmdldENUTSBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxl
dGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgp
OiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXBCb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChOaWNvc2lhOjpQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6
OkZvclBhaW50aW5nKToKKyAgICAgICAgKE5pY29zaWE6OlBhaW50aW5nQ29udGV4dENhaXJvOjpG
b3JSZWNvcmRpbmc6OkZvclJlY29yZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHREaXJlY3QyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzYXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VX
aW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd1dpbmRvd3NCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJy
dXNoV2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVz
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0
dGVybkZpbGxCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6YmVnaW5EcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
dHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBv
cnRzVHJhbnNwYXJlbmN5TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFt
ZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bs
YXRmb3JtSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhH
bG9iYWxBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNvbGlkU3Ryb2tlQnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpzb2xpZEZpbGxCcnVzaCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5TdHJva2VCcnVzaCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxs
QnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpiZWdpbkRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmREcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Zmx1c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
UGxhdGZvcm1QYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybVN0cm9rZVN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVzRm9yVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFVSTEZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5n
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRp
YWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURl
dmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRvd3NCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmhkYyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bh
dGhEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW06CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250
ZW50ZnVsUGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24pOgorCiAyMDIxLTA1LTI0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2ggZnJvbSBX
VEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYzExOWRjYmUyMzI2MWUx
NGQyZjA4ZmJlMjA4ZmJlMjcwNDgzYzUxNC4uYjYzYWU1YjI2YTk4MTM2ZGJkNzEzZjZkOGMxY2Ux
NWMyMTliZTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMS0wNS0yNSAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdy
YXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
ICogU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC93
aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3Jl
OjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50aW5n
Vmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3Ol0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwOgorICAgICAgICAq
IFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBhaW50
Q29udHJvbEZvckxheWVySW5Db250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZGZTbmFw
c2hvdEF0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRy
YXdQYWdlc1RvUERGSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
cmludE9wZXJhdGlvbkd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9u
R3RrOjpyZW5kZXJQYWdlKToKKwogMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlv
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZmQ2MDkyNTQ0YmIyNTVhMTQwMGU5
ZDliNDVhZWEwYTlhZjQ4NzYzZC4uMjljZDRlNDQ2YjBiOThmMzA2NTNkYWIxNjZmYTEzYWVlNDk2
MDc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIx
LTA1LTI1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAg
IFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAg
ICgtW1dlYkZyYW1lIHByaW50VG9DR0NvbnRleHQ6cGFnZVdpZHRoOnBhZ2VIZWlnaHQ6XSk6Cisg
ICAgICAgICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbToKKyAgICAgICAgKC1bTlNTdHJp
bmcgX3dlYl9kcmF3QXRQb2ludDpmb250OnRleHRDb2xvcjpdKToKKyAgICAgICAgKiBXZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW06CisgICAgICAgICgtW1dlYk5vZGVIaWdobGln
aHRWaWV3IGRyYXdSZWN0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIF9kcmF3UmVjdDpjb250ZW50c09ubHk6XSk6CisKIDIwMjEtMDUtMjQg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3Jt
IGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDQ1MDIyMzkzMDE4NmZmNTkyMzMzZGQ3ZDgyM2E2YTFm
ZDA5MDI2NjIuLmExM2NiMDY1YTkzNGIwMjUzZjlhN2MwODA4YWVhZDgzMTgyZmVkZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OmRyYXcpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6CisgICAgICAgIChX
ZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOgorICAgICAgICAo
V2ViRnJhbWU6OnNwb29sUGFnZXMpOgorICAgICAgICAqIFdlYk5vZGVIaWdobGlnaHQuY3BwOgor
ICAgICAgICAoV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKToKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDoKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKToKKyAgICAgICAgKFdlYlZp
ZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRM
aXRlcmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBlZjg1NmJjYTkxNGJhODRmMmI0NjZhNGQ3ODk2
ZjU3MjA5Y2JmMzljLi5jZWNmYjU1OGMyNmY0MjhhYjI1MWJjOGJjMGY4YTgyYWYwNjBmOWJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKQEAgLTEyMzksNyArMTIzOSw2IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTEyODYs
NiArMTI4NSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhVXNhZ2VJbmZvLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
T3BlbkdMU2hpbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUZUVy5jbWFrZQppbmRleCA0Y2MzOTE5OTMxNTQ3M2Q5YWQzMTcyYjZhYWMxYjU5YmE4YmYxOTFj
Li44NjdkMjUzNjEzMDdmYzllZDAxMTZjN2MxMWE3ODBlNDc2ZjdkZThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZQpAQCAtNDMsNyArNDMsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApAQCAt
NzEsNyArNzAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29u
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5jcHAKQEAgLTE4OSw3ICsxODcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IGQwODMwOTk4NGZhZjE1ZWFjNjY5NGVjNjA0ZjNlNDU5ZmVmOTc1MjQu
LmIyMjBhZjIwYmQzYjk1YTRlNzlmMTEzZjI4ZDZkMDgwZDBlMGNiNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCkBAIC0xMTQsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29u
dHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVy
Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3QuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNWM3NWRmNzkxZDcxYmQ2NzM3NDRmYjNmMDQ4MzZiNzcyYWM5OWQ5Li5lYWFmYjllMGIz
NmJkMzBmN2Q4MTc4OTYyZWY1ZjMwMDdkM2M0Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTk4Myw3
ICsxOTgzLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJV
cGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDdmMGZkZjQyOTI4NzU0YTlmNGYyN2FiNzNlOGNhYWNiZDU4MzhlZmQu
LjUxYmViMDczZTEyNWZlNWY4MDQwNzQ1NmU5ZDc0ZDFlMzVmN2MxYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg2MSw3ICs4
NjEsNyBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyogTWVkaWFLZXlzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJGNzMzMURCRkRD
MEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQkyRDlCRjc0NzFEQkZEQzQ5MDA3
QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMwRjAwN0E3RDk5IC8qIE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMxNEZGMUNCRjAwQkEwRkY3IC8q
IGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGluZWFyU1JHQi5pY2MgKi87IH07
Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAwMTIzRjFGQUQ4
N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAv
KiBOdWxsR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYx
MDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJG
RTk3MDBDRkNCQUIgLyogTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEQzhEMzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0
N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENv
bXBvc2l0aW9uVW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTYwODgsOCArNjA4OCw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBN
ZW51Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUND
RDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFy
Y2hQb3B1cE1lbnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIz
RjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjAzQzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzI5LDYg
KzczMjcsNyBAQAogCQkyRDlCRjc0MDFEQkZEQzBGMDA3QTdEOTkgLyogTmF2aWdhdG9yRU1FLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvckVNRS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUJGNzQxMURCRkRDMEYwMDdBN0Q5OSAv
KiBOYXZpZ2F0b3JFTUUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2aWdh
dG9yRU1FLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUYwRTEyMTRGRjFDQkYw
MEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBsaW5lYXJTUkdCLmljYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRBMzk3RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFw
aGljc0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTnVsbEdyYXBo
aWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREFBRTMyQzE5RENB
RjYwMDBFMDAyRDIgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJEMTlEQ0FGNjAwMEUwMDJEMiAvKiBNb2NrUGFn
ZU92ZXJsYXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1Bh
Z2VPdmVybGF5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUYzNDNB
MUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50UHJvcGVydHlNYXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwMTUsOCArMjcwMTQsNiBAQAogCQkJCTdDMzMwQTAx
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLywKIAkJ
CQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKLQkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgKi8sCi0JCQkJMEYwMDEyM0YxRkFEODdENjAwNTMx
RDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMjcwOTcsNiArMjcwOTQsNyBAQAogCQkJ
CTMxNEJFM0E1MUIzMTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCAq
LywKIAkJCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovLAog
CQkJCTU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAorCQkJCTJE
QTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJ
QjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguY3BwICovLAogCQkJCUIyNzUzNTUzMEIw
NTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggKi8sCiAJCQkJQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkw
IC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgKi8sCkBAIC0zMjMwMCw3ICszMjI5OCw2IEBACiAJ
CQkJMUNFOEQxMjcyNjE4NUMwRTAwRkMzQUVGIC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlcklkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDM3N0Q1NzI1NTFDOUM2MDA4
MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMzRTYy
NDMyNjU5NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUNFOEQxMkUyNjE4NjFDNDAwRkMzQUVGIC8qIERpc3BsYXlMaXN0SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjcwNSw3ICszMjcw
Miw2IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1
MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFw
aGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBF
NDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNB
LmggaW4gSGVhZGVycyAqLywKQEAgLTM0MzY2LDYgKzM0MzYyLDcgQEAKIAkJCQkxQTU2OUQxMTBE
N0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
OTI3RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDODEyNTFGMTJEMDAzRUYyNjkgLyogTnVt
YmVySW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxMjBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTQwRDdFMkI4MjAw
N0MzOTgzIC8qIG9iamNfaGVhZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTM4LDYgKzM0NTM1
LDcgQEAKIAkJCQk0OTlCM0VDNTEyOENDQzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1D
QUxheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDM0U2MjQz
MjY1OTc5MTgwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExNDk3ODcxMUFCQUYzQTUwMENFRjdFNCAvKiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNUM3NjJCMTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjYwMUVCRjE0QjNCOUFEMDAxMkMwRkUgLyogUGxh
dGZvcm1FdmVudEZhY3RvcnlJT1MuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAK
aW5kZXggMDA5NzlkMDA5Yjg1NTYzZTUyN2Y4MjgxZmU3MmE5ZDE3OTkzMGFlMy4uZDQ2OGZiYzBm
NzZhYjBiMmRiMjIyYWQ2MGFjY2RlNGM2NjVkZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBA
IC0xMjk4LDEwICsxMjk4LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hT
aGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgYXV0
byBzaGFkb3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCkgKyBzaGFkb3dP
ZmZzZXQ7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFkb3dSZWN0T3Jp
Z2luIC0gYWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICBpZiAo
c2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRMZWdhY3lTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93LmNvbG9yKCkpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRT
aGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCks
IHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDog
U2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1
cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNz
YXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDEy
LDExICsxNDA5LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3co
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zm
c2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIGlmIChzaGFkb3cuaXNXZWJraXRCb3hTaGFk
b3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExlZ2FjeVNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLQorICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFkb3dDYXN0aW5nUmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKaW5kZXggNGY0NmY2NTkwOTU5YTFlNGNkZGNkY2MzNzUyODA1MTZkNDJjYTFkMS4uZTdj
MDI4NWY3NTU0NTQ4MDNiMTQwYzkyMGJkNGIyYWZkZmU2MWY0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UoKS5leGlzdGluZ0Ry
YXdpbmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aXNBY2NlbGVy
YXRlZENvbnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5yZW5kZXJpbmdN
b2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQogICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1
bGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgYy0+Y2FudmFz
Q2xpcChwYXRoLCB0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CisgICAgYy0+Y2xpcFBhdGgocGF0
aCwgdG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmJlZ2luQ29tcG9zaXRlTGF5ZXIoKQpAQCAtMTIxMiw3ICsxMjEyLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgd2lkdGgsIGZsb2EKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewog
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAg
Y29udGV4dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7CisgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQog
ICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkg
ewpAQCAtMTM3OSw5ICsxMzc5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAg
ZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9h
dCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0
TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1
ciwgc3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Is
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldExl
Z2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAg
ICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTIwMzAsNyArMjAzMCw3
IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFz
UGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51
bGwoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1
dG8gcmVuZGVyaW5nTW9kZSA9ICFkcmF3aW5nQ29udGV4dCgpIHx8IGRyYXdpbmdDb250ZXh0KCkt
PmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gZHJh
d2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxl
bWVudC5jcmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmlu
Z01vZGUsIGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDczLDcgKzI0NzMsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGZsbwogCiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0Owog
Ci0gICAgICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRp
dXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAK
ICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDNmZjNjNjk5ZmVm
M2Y0NmNlNGZjN2U5NTZlMzNhZDM2MGFmYTczZWMuLmQzYzllZDMyYzc3ZjUwNWIwYzhlYmQzMjUz
ZTZkMDQzNTlkNjYxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTY5LDYgKzY5
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKQEAgLTQxODQsMTIgKzQxODUs
MTIgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cygpCiAgICAgICAgIHBhZ2Ut
PnNldElzQ291bnRpbmdSZWxldmFudFJlcGFpbnRlZE9iamVjdHMoaXNDdXJyZW50bHlDb3VudGlu
Z1JlbGV2YW50UmVwYWludGVkT2JqZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQordm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKIHsKICAgICBpZiAobmVlZHNMYXlv
dXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxh
dGZvcm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVD
b250ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50
UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00NzM5LDcgKzQ3NDAsNyBA
QCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQg
d2l0aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChHcmFw
aGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgTnVsbEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGlj
X2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAs
IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xk
VG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZm
OWEwZi4uZjhlMDIxMTcwMDdjYzlmMDZlZGVjZTUxZmY3OWY1ODA0ODVhMTdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdpbmF0
aW9uLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKQEAgLTY2Niw5ICs2NjcsOSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGcmFt
ZUZsYXR0ZW5pbmcgZWZmZWN0aXZlRnJhbWVGbGF0dGVuaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250
ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnMpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRy
b2xUaW50cygpIHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsgfQot
ICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udHJv
bFRpbnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsg
fQorICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQogCiAgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyc0ZvckFsbFNjcm9sbGFibGVBcmVhcygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCmluZGV4IDczZDhiNDljZWE3Y2E2NThkNTU0
NmQzZWIxNTIyYWQzNGMwYWVjMWMuLmExOGZlNWJiYWI3ZTM2NDk5MzI5ZjJhY2Y3Y2Y2ZjAzYWQy
NmI2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCkBAIC03Miw3ICs3
Miw3IEBAIEdESU9iamVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lKiBmcmFt
ZSwgSW50UmVjdCYgaXIpCiAgICAgICAgIDgsIHcgKiBzaXplb2YoUkdCUVVBRCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCkpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dC5nZXQo
KSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoY29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ2MoY29udGV4dC5nZXQoKSk7CiAKICAgICBkcmF3UmVjdEludG9Db250ZXh0
KGlyLCBmcmFtZS0+dmlldygpLCBnYyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd2luL0ZyYW1lR2RpV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2Rp
V2luLmNwcAppbmRleCAxNjFiNGU5MzI2ZjViMmIwMTY5MGFlMTQ5MTk3ZWJmZTgzMGZlYjk3Li5i
NzlmZWJmNjM4YTZhYjljNDJmM2YyNDZlYzQxZDJjNTJhZWVlZWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUdkaVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlIDx3dGYvd2luL0dE
SU9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3ICs2MCw3IEBAIEdESU9i
amVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KEZyYW1lKiBmcmFtZSwgSW50UmVjdCYgaXIpCiAg
ICAgSEdESU9CSiBoYm1wT2xkID0gOjpTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCksIGhCbXAuZ2V0
KCkpOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoYm1wREMuZ2V0KCkpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoYm1wREMuZ2V0KCkpOwogICAgICAgICB2aWV3
LT5wYWludCgmZ2MsIGlyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
aW5kZXggYzFiNTM2MDU3MTM3NzRkYzAwNmQwMjhlZGE3YzZhODIxM2Q2Y2NhMS4uMjM3ZWJmYmI4
MDMzOGQzMTNkMmE1MWE3N2UyODMwOWQ3MDVmYmY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKQEAgLTEyLDcgKzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3Jl
QmFja2VuZENhaXJvWDExLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA1ZjAxNDk0
ZjNjYTFlMzFkNzQ3YmY3YzdhZmI3NmFkMGNkN2Y2NzBiLi4xOTdlMzNjZGMzNzUzOGFjOTAwYzg3
ZDU0ZDljNmMzZjM1NjlmNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTI5LDcgKzI5LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCmluZGV4IDZkODExODg4ODQ2NGQ4
MTU1ZDlkNTA4MzJjY2JhNjQzYjE4N2RhZDguLmEwN2Q2NDZhMmU4MGMxZmUzZTUxNTRhZDdlOGY2
ZTAxNDg5ZWI5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0Ry
YWdJbWFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJ
bWFnZUNvY29hLm1tCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgog
I2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNl
LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkBAIC0zMDAsNyArMzAwLDcgQEAgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgZWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGkKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdlID0gYWRvcHROUyhbW05T
SW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBbZHJhZ0ltYWdlIF93
ZWJfbG9ja0ZvY3VzV2l0aERldmljZVNjYWxlRmFjdG9yOmRldmljZVNjYWxlRmFjdG9yXTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0uQ0dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0uQ0dDb250ZXh0KTsKIAogICAgIGNvbnRleHQuZmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5kaW5nUmVjdCwgRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSksIGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg3YTQ0YTUzNDdh
Yjg2YmE4ZTE5MzBmMDQyMGU2NDUwOTU2MGI4MWQuLjk2YzlmMGU2OGQxYjlmNGExYTg4NWMwMGEw
M2YzYjFmNWYzNDk3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAKQEAgLTIyOSw5ICsyMjksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZv
clRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1
ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQgcmVjb3JkaW5nQ29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRl
eHQpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsICpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJl
Y3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxwdHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RG9udERlY29uc3RydWN0KTsKLSAg
ICB9KTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxh
eUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBu
dWxscHRyLCBEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25z
dHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBv
aW50ID0gdG9GbG9hdFBvaW50KFdlYkNvcmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFu
Y2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZl
ciwgc3RhcnRQb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDk5
MzZiNzc1M2JlZjllNTEzMTE5ZjI5MDYzZmMzNWFlZWRhNjkzMmUuLjk3MGMzNzVjYmQ1ODE5YTIw
MGIyMGI2NzEzMjg3MGFkNWQ5MTdhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzAsMTEgKzMwLDExIEBACiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtODIs
MTEgKzgyLDYgQEAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkK
ICAgICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCiAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHModHJ1ZSkKICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lm
IFVTRShDRykKLSAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93
cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKLSAgICAvLyBi
dXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5k
IC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2Up
Ci0jZW5kaWYKICAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQogewogfQpAQCAtMTYwLDEw
ICsxNTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKICAgICB9CiAKICAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IERlYWwgd2l0aCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzLgogICAg
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAg
bV9zdGF0ZS5zaGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKICAgICAgICAgbV9zdGF0ZS5z
aGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICBtX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChmbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkK
QEAgLTIyOSwxNCArMjI0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotI2lmIFVTRShDRykK
LSAgICAgICAgaWYgKG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgICAg
IGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNo
YWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRl
LnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIH0KKyAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsK
IAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CkBAIC0zMDIsOSArMjkxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKSkgewogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5z
aGFkb3dCbHVyKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQpOwotI2lmIFVTRShDRykKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFk
aXVzKTsKLSNlbmRpZgorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KTsKICAgICB9CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTM2MSw1NSArMzQ4LDE5
IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoCiAgICAgcmV0dXJuIHRzOwogfQogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zKQotICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zKQotewotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQp
Ci17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkmIGZhY3RvcnlGdW5jdGlvbikKLSAgICA6IG1faW1wbChmYWN0b3J5RnVuY3Rpb24oKnRo
aXMpKQotewotfQotCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewogICAg
IEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUNv
dW50KTsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6
Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+aGFzUGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICEhbV9kYXRh
OworICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnNhdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFUlJP
UiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTQyMiwyMCArMzczLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCkKICAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkg
YWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCiAgICAgaWYgKG1fc3Rh
Y2suaXNFbXB0eSgpKQogICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+cmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVs
bGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNhdmUoKTsKIAogICAgIHNldFN0
cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKQEAgLTQ1MSw2NyArMzkyLDIxIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBlbGxpCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxs
cHRyOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRl
LnNoYWRvd0NvbG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93
KG9mZnNldCwgYmx1ciwgY29sb3IpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hh
ZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
b2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgbV9zdGF0ZS5zaGFk
b3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMgPSB0cnVlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNl
dCwgYmx1ciwgY29sb3IpOworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IHJhZGl1c01v
ZGU7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCkBAIC01
MTksMTUgKzQxNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiAgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKICAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotI2lmIFVTRShDRykK
LSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyU2hhZG93KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOworICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7CisgICAgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CkBAIC01NDQsNjYgKzQzMiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fc3Rh
dGUuZmlsbENvbG9yID0gY29sb3I7CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRy
OwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0
UGxhdGZvcm1GaWxsQ29sb3IoY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsK
LSAgICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hv
dWxkQW50aWFsaWFzKQotewotICAgIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50
aWFsaWFzOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
c2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNt
b290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOwotICAgIAotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotewotICAgIG1fc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi17Ci0gICAgbV9zdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsK
LQotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02
MTEsOCArNDQwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwogICAg
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVy
bkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYyMCw4ICs0NDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikK
ICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9
IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTYzMCwxNSArNDU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHIKICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsK
ICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZp
bGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxs
UnVsZTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7CisgICAgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pCkBAIC02NDcsNjQgKzQ2NiwzOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbgogICAg
IG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwog
ICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxHcmFkaWVudENoYW5nZSk7IC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAgICB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdl
KTsKKyAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKIHsKLSAgICBpZiAobV9p
bXBsKQotICAgICAgICBtX2ltcGwtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0g
ICAgZWxzZQotICAgICAgICBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
Ci0gICAgKyttX3RyYW5zcGFyZW5jeUNvdW50OworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNv
dW50OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBlbHNlCi0gICAgICAgIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAg
ICBBU1NFUlQobV90cmFuc3BhcmVuY3lDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lD
b3VudDsKKyAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1t
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4g
dG8pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
U2l6ZSgpOwotCiAgICAgLy8gRGlzcGxheSBsaXN0IHJlY29yZGluZyBmb3IgdGV4dCBjb250ZW50
IGlzIGRvbmUgYXQgZ2x5cGhzIGxldmVsLiBTZWUgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
LgogICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBw
b2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51
bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9udC5kcmF3RW1waGFz
aXNNYXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBCaWRpUmVzb2x2
ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CiAgICAg
YmlkaVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRp
cmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwogICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9y
aW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIDApKTsKQEAgLTczNCwxOSAr
NTI4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIGJpZGlSdW5zLmNsZWFyKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd05hdGl2ZUltYWdlKGlt
YWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybUltYWdlKGltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIEltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7CiAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFn
ZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjAsMTggKzU0MSwxMiBAQCBJ
bWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbgogCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
aXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgq
dGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwog
fQpAQCAtNzc5LDkgKzU1NCw2IEBAIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiBJbWFnZURyYXdS
ZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIElt
YWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRp
bGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CiAgICAgICAgIC8vIEp1c3QgZG8g
YSBzY2FsZS4KICAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CkBAIC04MDMsMTQgKzU3NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCAmJiBt
X2ltcGwtPmNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZSkpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOwogICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG9wdGlvbnMpOwogfQpAQCAtODMzLDM2ICs1OTcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25z
dAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92
ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXR0ZXJuKGlt
YWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJh
d1BsYXRmb3JtUGF0dGVybihpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0
KTsKICAgICBjbGlwUGF0aChwYXRoKTsKQEAgLTg3MCw5ICs2MTIsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgY2xpcE91dChy
ZWN0LnJlY3QoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTg4NSwxNCArNjI0LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0KQogCiBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGRy
YXdpbmdGdW5jdGlvbikpOwotICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVz
dWx0OjpTdWNjZXNzOwotICAgIH0KLQogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihkZXN0aW5hdGlvbi5zaXplKCksIGNvbG9yU3BhY2Us
ICp0aGlzKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0OjpGYWlsZWRUb0NyZWF0ZUltYWdlQnVmZmVyOwpAQCAtOTA0LDYx
ICs2MzUsMjIgQEAgR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWEKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpICYmICFVU0Uo
Q0FJUk8pCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KLSNlbmRp
ZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5n
TW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOwot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShtb2RlKTsKLX0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBncmFk
aWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBncmFkaWVudC5maWxsKCp0aGlz
LCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlv
bigpOwogICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKICAgICBmaWxs
UmVjdChyZWN0LCBjb2xvcik7CkBAIC05NjcsMjggKzY1OSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvcwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJvdW5kZWRSZWN0KHJlY3Qs
IGNvbG9yLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKHJl
Y3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChyZWN0LCBjb2xvcik7CisgICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3Ip
OwogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCkpOwog
ICAgIH0gZWxzZQogICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJF
Q1QyRCkgJiYgIVVTRShDQUlSTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFBhdGgg
cGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKQEAgLTEwMDgsNzAgKzY4OCwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSbwogICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKICAg
ICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9zdGF0ZS5hbHBoYSA9IGFs
cGhhOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQWxwaGEoYWxwaGEpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBtX3N0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwogICAgIG1fc3RhdGUuYmxlbmRNb2RlID0g
YmxlbmRNb2RlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKQotewot
ICAgIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7Ci19Ci0KLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCi17Ci0gICAgbV9zdGF0ZS51c2VEYXJrQXBw
ZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlKTsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJF
Q1QyRCkKLS8vIEltcGxlbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIGdvIHB1c2ggdGhlIGRyYXdp
bmcgbW9kZSBpbnRvIHlvdXIgbmF0aXZlIGNvbnRleHQgaW1tZWRpYXRlbHkuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxh
Z3MpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSkK
LXsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKTsKIH0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShE
SVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZv
bnRzKGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
ICYmICFVU0UoQ0FJUk8pCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQog
ewpAQCAtMTEwMiwyNCArNzI1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVU
b1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9
CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLSNlbmRpZgotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcikKLXsKLSAgICBzY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VT
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotfQotICAgIAogRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKQEAgLTExMzMsMjQgKzczOCwxMCBAQCBGbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29ucwogICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxs
RWxsaXBzZShlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3Jt
RmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgp
OworICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCkBAIC0xMTY3LDIzICs3NTgs
MTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQogICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLSNpZiAhVVNFKENH
KSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Cisg
ICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hB
cnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5
bGUpOwogfQotI2VuZGlmCiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykK
IHsKQEAgLTEyMTgsMjAgKzc5Niw2IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvCiAgICAgcmV0
dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSkKLXsKLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFk
b3dPZmZzZXQsIHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICBzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotICAgIHNldFBs
YXRmb3JtVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2VDb2xvcihzdGF0ZS5zdHJva2VDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1GaWxs
Q29sb3Ioc3RhdGUuZmlsbENvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0YXRl
LnN0cm9rZVN0eWxlKTsKLSAgICBzZXRQbGF0Zm9ybUFscGhhKHN0YXRlLmFscGhhKTsKLSAgICBz
ZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3Rh
dGUuYmxlbmRNb2RlKTsKLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc3RhdGUuc2hv
dWxkU21vb3RoRm9udHMpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVD
b3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTI4MywzNiArODQ3LDE1
IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRP
ZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIg
fTsKIH0KIAotI2lmICFVU0UoQ0cpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0lu
dGVybmFsTGlua3MoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBG
bG9hdFJlY3QmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKQotewotfQotCi0jZW5kaWYK
LQogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsICYmIG1faW1wbC0+Y2FuUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllcikpIHsKLSAg
ICAgICAgbV9pbXBsLT5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAK
K3ZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK3sKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmOTEwYjg2ODZkMTlm
OTcwNWMwNDM3MjE4NTA2ZmFlOTk1ZTI3MzUwLi5iNzMxNzM3NzE4MDQxYjlkODcyNTM4MjRjMDcy
YmZkMTcyZTNlNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC04
Niw3ICs4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
IGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFJlY3Q7CkBAIC0xMTAsNiArMTEwLDEzIEBAIGVudW0g
Y2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CiB9OwogdXNpbmcgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKIAorLy8gTGVnYWN5IHNoYWRv
dyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cu
CisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xh
c3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9
OworCiBlbnVtIFN0cm9rZVN0eWxlIHsKICAgICBOb1N0cm9rZSwKICAgICBTb2xpZFN0cm9rZSwK
QEAgLTIxOSwxNCArMjI2LDEyIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlciB9OwogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1vZGU6Ok5vcm1h
bCB9OwogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
eyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFNoYWRvd1JhZGl1c01vZGUg
c2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKIAogICAgIGJv
b2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICBib29sIHNob3VsZFNtb290aEZvbnRzIDogMTsK
ICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7CiAgICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0jaWYgVVNFKENHKQotICAgIGJvb2wgc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cyA6IDE7Ci0jZW5kaWYKICAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDog
MTsKICNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UgOiAxOwpAQCAtMjU0LDI3ICsyNTksMTUgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKLSAgICAKLSAgICB1c2luZyBH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dEltcGw+KEdyYXBoaWNzQ29udGV4dCYpPjsKLSAgICBXRUJDT1JFX0VY
UE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkmKTsK
K3B1YmxpYzogICAKIAotICAgIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgCi0gICAgZW51bSBjbGFzcyBQYWlu
dEludmFsaWRhdGlvblJlYXNvbnMgOiB1aW50OF90IHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAg
SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzLAotICAgICAgICBJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzLAotICAgICAgICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQKLSAgICB9Owot
ICAgIEdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFVTRShESVJFQ1QyRCkKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHREaXJlY3QyRAogICAg
IGVudW0gY2xhc3MgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgOiB1aW50OF90IHsKICAgICAg
ICAgQ1BVTWVtb3J5LAogICAgICAgICBHUFVNZW1vcnkKQEAgLTI4MiwyNTAgKzI3NSwyNzAgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCosIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKICNlbmRpZgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgYm9vbCBwYWludGluZ0Rp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YSAmJiAhbV9pbXBsOyB9Ci0gICAgYm9vbCBw
ZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KLSAgICBi
b29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5n
Q29udHJvbFRpbnRzOyB9Ci0gICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNv
ZGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9
Ci0gICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVj
dGluZ0NvbnRlbnRmdWxQYWludDsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludGluZ0Rpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybWluZ1Bh
aW50SW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQ
YWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgLy8gQ29udGV4dCBTdGF0ZQorCisgICAg
dm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzID0gdGhpY2tuZXNzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQogICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CiAKLSAgICB2
b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKKyAgICB2b2lkIHNldFN0cm9rZVN0eWxl
KFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsg
fQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VTdHlsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihj
b25zdCBDb2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihS
ZWY8UGF0dGVybj4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQYXR0ZXJu
KFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFN0cm9r
ZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50KiBzdHJva2VH
cmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7IH0K
IAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgIHZvaWQgc2V0RmlsbFJ1bGUo
V2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyB1cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9CiAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwog
ICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxD
b2xvcjsgfQogCi0gICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7CiAgICAg
UGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJu
LmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50
KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQo
KTsgfQogCi0gICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sKTsKKyAgICB2
b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wpOworICAg
IHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUu
c2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQogICAgIGJvb2wg
c2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7
IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CiAKICAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBp
eGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBh
bGlnbmluZyBnbHlwaHMuCiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUg
dG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZv
aWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IH0KIAotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7IH0KKyAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CiAKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAg
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
OworICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhh
OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2Up
OyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCk7Ci0gICAg
Ym9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5k
TW9kZTo6Tm9ybWFsKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAgQmxlbmRN
b2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2Rl
OyB9CisKKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1h
c2spIHsgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOyB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpOyB9CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KKworICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2Rl
KFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBt
b2RlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdp
bmdNb2RlQ2hhbmdlKTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBj
b25zdDsKKworICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1f
c3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0
KCkpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlz
aWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorCisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJh
bmNlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0Fw
cGVhcmFuY2VDaGFuZ2UpOyB9CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KICNlbmRpZgotICAgIGJvb2wgaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3Rv
cmUoKTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogICAgIAogICAgIHVuc2lnbmVk
IHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBi
ZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2Yg
YSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPworICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBi
ZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3IganVzdCBiZSBy
ZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoYm9vbCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
IH0KKworICAgIC8vIFBpeGVsIFNuYXBwaW5nCisKKyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Cisg
ICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwor
ICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsK
KworICAgIC8vIFNoYXBlcworCiAgICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90
aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0
KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwogICAgIC8vIHVzaW5n
IGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29y
cmVjdAogICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKTsKLSAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IpOworCisgICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBh
dGgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwog
Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRyYXdS
YWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3Is
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVhbCB2b2lkIGZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpO
b3JtYWwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CiAKLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOwot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKLSAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5l
Q2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGlu
ZUpvaW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0IGxpbmVXaWR0aCk7CisgICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmll
bnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAotICAgIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKIAotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5KTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CisjZW5kaWYKIAotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5k
UnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICBlbnVtIGNsYXNzIENs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0NyZWF0
ZUltYWdlQnVmZmVyIH07Ci0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKTsKLSAg
ICAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICB2b2lkIHNl
dFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0gICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJh
d2luZ01vZGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsK
IAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBw
ZWFyYW5jZShib29sKTsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQotI2VuZGlmCisgICAgZW51bSBjbGFzcyBD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgOiBib29sIHsgU3VjY2VzcywgRmFpbGVkVG9DcmVh
dGVJbWFnZUJ1ZmZlciB9OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYmKTsKIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jiwg
Rm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBX
VEY6Om51bGxvcHQpOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsK
IAotICAgIHZvaWQgYnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Cisg
ICAgLy8gVGV4dAogCi0gICAgZW51bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFsbFNp
ZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpOwotCi0gICAgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNG
b3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOwotICAgIHZvaWQgZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2ln
bmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6
bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNv
bnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3Bh
cmVuY3lMYXllcnMoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjb21wdXRlVW5k
ZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5
bGUgPSBTb2xpZFN0cm9rZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBT
b2xpZFN0cm9rZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBi
bHVyLCBjb25zdCBDb2xvciYpOwotICAgIC8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMg
dXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIC8vIEl0IGhhcyBk
aWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgotICAgIHZvaWQgc2V0TGVnYWN5U2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7CisgICAgLy8g
VHJhbnNwYXJlbmN5IExheWVycwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclNoYWRv
dygpOwotICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0
IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNT
aGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hh
ZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93
T2Zmc2V0LmhlaWdodCgpKTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsg
cmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICAv
LyBGb2N1cyBSaW5ncwogCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENh
biB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPwog
I2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwogI2VuZGlmCiAKLSAgICB2b2lkIHNldExpbmVD
YXAoTGluZUNhcCk7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCBkYXNoT2Zmc2V0KTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKLSAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5ibGVuZE1vZGU7IH0KLQotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9v
bCk7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
ZHJhd0x1bWluYW5jZU1hc2s7IH0KLQotICAgIC8vIFRoaXMgY2xpcCBmdW5jdGlvbiBpcyB1c2Vk
IG9ubHkgYnkgPGNhbnZhcz4gY29kZS4gSXQgYWxsb3dzCi0gICAgLy8gaW1wbGVtZW50YXRpb25z
IHRvIGhhbmRsZSBjbGlwcGluZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNpbmNlCi0gICAg
Ly8gdGhlIGRpc2NpcGxpbmUgaXMgZGlmZmVyZW50LgotICAgIHZvaWQgY2FudmFzQ2xpcChjb25z
dCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKTsKKyAgICAvLyBUcmFuc2Zvcm1zCiAKLSAgICB2b2lkIHNjYWxlKGZsb2F0
IHMpCi0gICAgewotICAgICAgICBzY2FsZSh7IHMsIHMgfSk7Ci0gICAgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpOworICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZSh7IHMs
IHMgfSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpID0gMDsKICAgICB2
b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBv
aW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0KLSAgICB2b2lkIHNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgYWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYp
OwotCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdmlydHVhbCB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CiAKICAgICBlbnVtIEluY2x1ZGVEZXZpY2VT
Y2FsZSB7IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUsIFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNs
dWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNl
U2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOwogCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250
ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBhIGJh
c2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0
b3IoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxl
KGZhY3Rvcik7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5n
KGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29u
c3Q7CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbmZ1
bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW5mdWxQYWludERldGVjdGVkOyB9CisgICAgLy8gTGlu
a3MKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwot
I2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsg
fQorCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorCisgICAg
dm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRl
Y3RlZCA9IHRydWU7IH0KKyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9CiAKKyAgICAvLyBGSVhNRTogTm90
aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBoZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVs
c2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQogICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCk7IC8vIFRoZSBwYXNzZWQgaW4gcmVj
dCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5z
cGFyZW5jeSBsYXllcnMuCiAgICAgdm9pZCByZWxlYXNlV2luZG93c0NvbnRleHQoSERDLCBjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCk7IC8vIFRoZSBwYXNzZWQgaW4gSERD
IHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3NDb250ZXh0LgogICAg
IEhEQyBoZGMoKSBjb25zdDsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgR3JhcGhpY3NDb250ZXh0
KEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV4aXN0OyB3ZSBuZWVkIGEgZGlmZmVyZW50
IHBsYWNlIHRvCisgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4gV2luZG93cyBDRyBhbmQg
V2luZG93cyBDYWlybyBiYWNrZW5kcy4KKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVs
bHB0cjsgfQorI2lmIFBMQVRGT1JNKFdJTikKICAgICAvLyBXaGVuIHNldCB0byB0cnVlLCBjaGls
ZCB3aW5kb3dzIHNob3VsZCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dAogICAgIC8vIHJh
dGhlciB0aGFuIGFsbG93aW5nIHRoZW0ganVzdCB0byByZW5kZXIgdG8gdGhlIHNjcmVlbi4gRGVm
YXVsdHMgdG8KICAgICAvLyBmYWxzZS4KQEAgLTU4NSw2MSArNTk4LDEzIEBAIHB1YmxpYzoKICNl
bmRpZiAvLyBQTEFURk9STShXSU4pCiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIAotICAgIHN0YXRp
YyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQ
b2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7Ci0KLSAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0OwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbCog
aW1wbCgpIHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQotCiBwcml2YXRlOgotICAgIHZvaWQgcGxh
dGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdm9pZCBwbGF0Zm9ybURl
c3Ryb3koKTsKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMs
IGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wg
aGFzQWxwaGEgPSBmYWxzZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQotICAgIHZv
aWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzKTsKLQotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwot
ICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3Jt
RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkQW50
aWFsaWFzKGJvb2wpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29s
KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhclBsYXRmb3Jt
U2hhZG93KCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtQWxwaGEoZmxvYXQpOwotICAgIHZvaWQg
c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLQotICAgIHZvaWQgYmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIHZvaWQgZW5kUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcigpOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCitwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0K
LSAgICB2b2lkIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0
Zm9ybUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKTsKLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KICAgICBGbG9hdFJl
Y3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nLCBDb2xvciYpOwogCiAgICAgZmxvYXQgZGFzaGVkTGluZUNv
cm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OwpAQCAtNjQ3LDE1ICs2MTIsMTMg
QEAgcHJpdmF0ZToKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5B
bmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25z
dDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9v
bCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBG
bG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0SW1wbD4gbV9pbXBsOwotCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsK
KworcHJpdmF0ZToKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7
CiAKLSAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKLSAgICB1bnNpZ25l
ZCBtX3RyYW5zcGFyZW5jeUNvdW50IHsgMCB9OwotICAgIGJvb2wgbV9jb250ZW5mdWxQYWludERl
dGVjdGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQg
eyAwIH07CisgICAgYm9vbCBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkIHsgZmFsc2UgfTsKIH07
CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgewpAQCAtNzQ0LDggKzcwNyw2IEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7CiB9OwogCi0KLQogY2xhc3MgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjE0YTBhODkyYjZlOTlm
OTlkYjgyM2NlYTM1MjFiNGM1ZmY1NWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6OkdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotICAgIDogbV9ncmFwaGljc0NvbnRleHQoY29udGV4dCkKLXsKLX0KLQot
R3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4dEltcGwoKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI2MmZmYjQ1NDVhZTIzNTZmN2MxZmJmNzhjMDQ5NGIzY2FjY2UzYjEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGwgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29u
dGV4dEltcGwpOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250
ZXh0Jik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbCgpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzQ29u
dGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVy
JikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pdGVy
TGltaXQoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBHcmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwotCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwotICAgIHZpcnR1
YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZp
cnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblBhaW50RnJhbWVGb3JN
ZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0ID0gMDsKLSNlbmRpZgotICAgIAotICAgIHZp
cnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250
ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDQ0MGY3MjUzNTgyY2M2NDkzMTVmMjQ3M2IzOTAz
MjJiMGE2NjIwODUuLjZhYjQzMjczMjZkYTA4MmQ4MTFlZTQxMjhmY2Q2NGFiMjU2OWU2OWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTE4OCw4ICsx
ODgsOSBAQCBJbWFnZURyYXdSZXN1bHQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZS10ZXN0IHRoaXMgYW5kIHJlbW92
ZSB0aGlzIGlPUyBiZWhhdmlvciBkaWZmZXJlbmNlIGlmIHBvc3NpYmxlLgogICAgIC8vIFdoZW4g
dXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2gg
YW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpIHsKICAgICAgICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJz
ZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0
KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAg
IHZpc2libGVTcmNSZWN0LnNldFgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYxN2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4x
NzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZkZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRC
dWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwogCkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2Jz
ZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRJbXBsOwogcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxH
cmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNz
Q29udGV4dCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xh
c3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisg
ICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlcywKKyAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50Cisg
ICAgfTsKKworICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
IHJlYXNvbnMpCisgICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisK
KyAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJl
YXNvbnM6Ok5vbmU7IH0KKyAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVh
c29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWlu
dDsgfQorCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lm
IFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KKworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRp
ZgorCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
ZmluYWwgeyB9CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiBy
ZWN0OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwg
Ym9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNo
QXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZp
bmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9
CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJv
dGF0ZShmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0K
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNp
emUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0
KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQor
CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0g
MCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRD
YXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFn
ZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
IHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgor
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1
ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1
Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhX
SU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8v
IE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5
NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRl
Zjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCkBAIC0xOTgsNyArMTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykK
LSAgICBpZiAoc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3Jh
cGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRh
cjovL3Byb2JsZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRo
aXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAg
IGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkg
ewogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUu
c2hhZG93Qmx1cik7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVy
LCBzaGFkb3dCbHVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZl
NDlkNGU4YTM2MjAwZDc3MmEzMzJlN2MxLi4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5
YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRT
dGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAo
Ym91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsK
LSAgICAgICAgfSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rp
c3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJh
bnNmb3JtKCkpOwogICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4
YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRmMzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJp
YWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIK
QEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBv
aW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNj
YWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVw
ZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBH
cmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6
OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4
LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRl
eCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2Vi
MDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJlNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAj
aW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAg
LTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNh
bGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FM
YXllcjo6ZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9y
dGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUg
c2lnbmlmaWNhbnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcu
IHRpbGVkIGxheWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0Nv
bgogICAgIGVsc2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xv
cjo6cmVkKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBs
YXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25l
cigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZj
MDYyMTRmYzMuLmI1M2EzMzdiYTRjY2RjZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgVVNFKENBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRl
ICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyAr
ODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FD
RkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVu
dCogY2xpZW50ID0gb3duZXIoKS0+b3duZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3Jt
Q0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZy
b20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBz
bWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3
NWExMjhiMDc1Ny4uZTQyM2Y1Y2RmNDdkNjRjY2M0YWEwY2M5NDBlMDg2M2Y3NWIxNzE3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICsz
OSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWly
by5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAt
NTcsNjMzICs1NiwzNjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRl
eHQpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBs
YXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZv
cm1Db250ZXh0KQotICAgICAgICByZXR1cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3lu
Y0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Cit9CiAKLSAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1f
ZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsK
LSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CitHcmFwaGlj
c0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0
KQorICAgIDogbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4
dENhaXJvPihjYWlyb0NvbnRleHQpKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKK3sKKyAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJvKCpwbGF0Zm9ybUNvbnRleHQpCiB7Ci0g
ICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAg
IH0KIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVE
ZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdy
YXBoaWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5j
bHVkZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVy
biAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4
dDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUo
KnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQ
bGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAog
Ly8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhp
Y2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9y
bUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxw
aGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1J
bWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBk
cmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENh
aXJvOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRv
IGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpm
aWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUoKSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0
ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0
dGVybikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
Y29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9w
bGF0Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRl
eHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7
CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBD
YWlybzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0
aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBj
b25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91
bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBD
YWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNF
RF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwog
I2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5n
KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6
OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9y
VGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qu
d2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRl
cmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4
dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1
cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsK
LSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9r
ZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBm
aWxsIG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VDb2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNh
bid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNl
dCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwog
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19
CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewor
ICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVp
Z2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAg
ICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRv
d09mZnNldC5oZWlnaHQoKSB9OworICAgICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0
eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlU3R5bGUpOworICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9y
bUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpT
dGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAot
ICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBo
YXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zm
c2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZv
cm1Db250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3Jt
Q29udGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNo
KGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZv
cm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5l
Sm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8g
TWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+
c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xp
cFBhdGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0
KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgp
LCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9y
LmlzVmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0
ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50
U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgp
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29s
IGVuYWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01v
ZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJl
dHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQo
KSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8
Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1
dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tp
XSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tp
XS53aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsK
KyAgICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCog
c2NhbGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJs
ZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAg
ICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcg
PSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAg
ICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERy
YXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3Rh
dGUuc2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODhhNDhl
M2ZmYjQ5MzViN2M4MDU5MDcwZGIxYmM5MTEwZDRiZWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0
cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0
Zm9ybUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJvKik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8oY2Fpcm9fdCopOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENh
aXJvKEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQu
CisjZW5kaWYKKworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4
dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7
CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7Cisg
ICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKKworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworCisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShm
bG9hdCkgZmluYWw7CisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKKyAgICB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIGZpbmFsOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpIGZpbmFsOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAg
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5h
bDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKKworI2lmIE9TKFdJTkRPV1Mp
CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKKyAgICBQ
bGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWYyYTA0ODE3YmZkNGVkMGYyMDY3NzVhYzI4NjIyNDk5NzI1YWQ1YS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotCi0jaWYgVVNFKENBSVJPKQot
Ci0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVj
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAgICBbJnBsYXRmb3Jt
Q29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIHBs
YXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShjYWlyb190KiBjYWlyb0NvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtjYWlyb0NvbnRleHRdKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBjYWlyb0NvbnRleHQp
OwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2
YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3Jt
Q29udGV4dCkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0
Zm9ybUNvbnRleHQuY3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6R3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY2Fpcm9fdCogY2Fp
cm9Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWly
b0NvbnRleHQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5z
eW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjp+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1fcGxh
dGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0
ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09m
ZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0
aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9k
ZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFs
aWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3Bs
YXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIENhaXJv
OjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX3BsYXRmb3Jt
Q29udGV4dCwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpz
ZXRMaW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewot
ICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBhdXRvIHBhdHRlcm4gPSBn
cmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2Fpcm86OnNh
dmUobV9wbGF0Zm9ybUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRv
ciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9z
aXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZp
b3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0
b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91
c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgQ2Fpcm86OlNoYWRvd1N0YXRlIHNoYWRvd1N0
YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgQ2Fpcm86OmZp
bGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0YXRl
KTsKLSAgICBlbHNlCi0gICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikKLXsKLSAgICBDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgeyB9LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0g
ICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6c3Ry
b2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpz
dHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIHN0cm9rZVBhdGgo
cGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17
Ci0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90
PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0byB5T2Zmc2V0ID0g
cG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5
T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7Ci0g
ICAgICAgICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZv
cm1EYXRhKCkuc2NhbGVkRm9udCgpOwotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFs
aWFzaW5nKCkpCi0gICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmc7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29s
b3IsCi0gICAgICAgIGZvbnRTbW9vdGhpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3KGdyYXBoaWNzQ29udGV4dCgp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKG1fcGxhdGZvcm1D
b250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0g
ICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlj
a25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xp
bmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwg
c3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
LXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnNhdmUoKQotewotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJlc3RvcmUoKQotewotICAgIENhaXJv
OjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENhaXJvOjp0cmFu
c2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIENhaXJvOjpy
b3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBDYWlybzo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5z
Zm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0o
bV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBDYWlybzo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENhaXJv
OjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgY2xp
cFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5k
cygpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3Jt
Q29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQot
ewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJl
Y3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkZTVkMmE3ZTk4ZGJiYmVhMjY3YWIwNTRjMGRm
ZjE0MjU2Y2YyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbC5oIgotCi10eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKLQotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwg
ewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KGNhaXJvX3QqKTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHRDYWly
byYpOwotICAgIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBjYWly
b190Kik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCk7Ci0KLSAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29u
dGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJh
d2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJy
aWRlOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJv
b2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4
dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
JiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcAppbmRleCBkMzdmYjY2MzczYWFjOTMyYTcxNDgyNTM0ODVmMzM0OTExODY4NWQ0Li5hNThk
ZGI5NjgyNzUyZTc5NTAwZjMyMmJjNTNjZjA0ZDYwNzAzYzdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJDb2xvclRyYW5zZmVyRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dENhaXJvLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcAppbmRleCAzYmU3NTU2OWU5NzNjMmIxNjg5OWE1MDc2Mjc1ZjUyM2ZhODA3MWVh
Li45YjVjMGFkMDc0NDUxODgwZGVmZGQzYzQ4OTJlNGY3M2MyODY0MmM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDYWlyby5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8Y2Fpcm8uaD4KQEAgLTUxLDcgKzUxLDcgQEAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYKIAog
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2Uu
Z2V0KCkpKTsKICAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworICAgIG1fY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KG1fcGxhdGZvcm1Db250ZXh0KTsKIH0K
IAogR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRl
eHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0aENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKaW5kZXggODFkMTU4ZTJkZmY3ZTViZjAzYzdiNjVkMDM2ZGRhODk5
ZjBmOTAxZi4uMmExOWU0N2E5YWFjZWMyMDk2YTYwZTk3ZTNiNWM0ODc0NTNkYWFmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9VbmlxdWVQdHIuaCIKICNpbmNs
dWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENh
aXJvLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00MjEsNyArNDIxLDcgQEAgRmxvYXRS
ZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgaWYg
KHN0cm9rZVN0eWxlQXBwbGllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyhtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VT
dHlsZUFwcGxpZXIoZ2MpOwogICAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIGJvb2wgUGF0aDo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNy
ZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
IGdyYXBoaWNzQ29udGV4dChtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxp
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBlZjNh
YzJlMTM3MWI4ZTFjOTA3ZGExMjQyYTc2Y2U2ZTYxNDc4NzBlLi5jMTMyZGE5ZTk1NjNiMDJlYWJl
MmFlMWY4MDdmZWM0ZWIwNTY3OGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01NSwxNyArNTUs
MTIgQEAgc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29u
dGV4dCwgY2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1N0cm9r
ZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
Q0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihj
b2xvcikpOwotfQotCiBpbmxpbmUgQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShD
R0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQoQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpLCBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0Nv
bnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpKSk7CiB9CiAKLXN0YXRpYyBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBx
dWFsaXR5KQorc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvcmVJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCiB7CiAgICAgc3dpdGNoIChxdWFs
aXR5KSB7CiAgICAgY2FzZSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDoKQEAgLTgyLDYgKzc3LDM0
IEBAIHN0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxCiAgICAgcmV0dXJuIEludGVycG9sYXRpb25RdWFs
aXR5OjpEZWZhdWx0OwogfQogCitzdGF0aWMgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBjZ0ludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCit7CisgICAgc3dp
dGNoIChxdWFsaXR5KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OworICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHJldHVybiBrQ0dJbnRl
cnBvbGF0aW9uTm9uZTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6CisgICAg
ICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTG93OworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25NZWRpdW07Cisg
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIGtDR0lu
dGVycG9sYXRpb25IaWdoOworICAgIH0KKyAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1
bHQ7Cit9CisKK3N0YXRpYyBDR1RleHREcmF3aW5nTW9kZSBjZ1RleHREcmF3aW5nTW9kZShUZXh0
RHJhd2luZ01vZGVGbGFncyBtb2RlKQoreworICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKKyAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOworICAgIGlmIChmaWxsICYmIHN0cm9rZSkKKyAgICAg
ICAgcmV0dXJuIGtDR1RleHRGaWxsU3Ryb2tlOworICAgIGlmIChmaWxsKQorICAgICAgICByZXR1
cm4ga0NHVGV4dEZpbGw7CisgICAgcmV0dXJuIGtDR1RleHRTdHJva2U7Cit9CisKIHN0YXRpYyBD
R0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9kZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBzd2l0Y2ggKGJsZW5kTW9kZSkg
ewpAQCAtMTU2LDM1ICsxNzksMzYgQEAgc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRN
b2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE0KICAgICByZXR1
cm4ga0NHQmxlbmRNb2RlTm9ybWFsOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhp
Y3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKICAgICBpZiAoIWNnQ29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBz
dGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25R
dWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgp
KSk7CisgICAgdXBkYXRlU3RhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5n
ZSB8IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB8IEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOworICAgIG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dENHOjp+R3JhcGhp
Y3NDb250ZXh0Q0coKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLUNHQ29udGV4dFJlZiBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29u
dGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwogICAgIEFTU0VSVChtX2Rh
dGEtPm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNhdmUoKQogewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgp
KTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6c2F2ZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGhp
biB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2b2lkIHRoZSBl
eHRyYQogICAgIC8vIHNhdmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTE5MiwxMCArMjE2LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEtPnNhdmUoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxl
ZCgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9u
IHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2b2lk
IHRoZSBleHRyYQogICAgIC8vIHJlc3RvcmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTIwNCwxMCArMjI3LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UucGxh
dGZvcm1JbWFnZSgpOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC0yOTgsNyArMzIwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG8KIAogICAgIGF1dG8gb2xkQ29tcG9zaXRlT3BlcmF0b3IgPSBjb21w
b3NpdGVPcGVyYXRpb24oKTsKICAgICBhdXRvIG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJh
dGlvbigpOwotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7
CiAKICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAo
MCwgMCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgYWRqdXN0ZWREZXN0UmVj
dC54KCksIGFkanVzdGVkRGVzdFJlY3QueSgpKTsKQEAgLTMyNSwxMCArMzQ3LDEwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRmxvCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHdhc0FudGlhbGlhc2VkKTsKICNlbmRp
ZgotICAgICAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihvbGRDb21wb3NpdGVPcGVy
YXRvciwgb2xkQmxlbmRNb2RlKTsKKyAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9sZENv
bXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOwogICAgIH0KIAotICAgIExPR19XSVRIX1NU
UkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Ug
IiA8PCBpbWFnZS5nZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBpbnRvICIgPDwg
ZGVzdFJlY3QgPDwgIiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1l
KS5taWxsaXNlY29uZHMoKSA8PCAibXMiKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oSW1hZ2VzLCBz
dHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UgIiA8PCBpbWFnZS5n
ZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBpbnRvICIgPDwgZGVzdFJlY3QgPDwg
IiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWxsaXNlY29u
ZHMoKSA8PCAibXMiKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lk
KiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKQEAgLTMzOSw3ICszNjEsNyBAQCBzdGF0aWMg
dm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0
KQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWhlaWdodCk7CiAjZW5kaWYKLSAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQ
aXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBp
bWFnZSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dENH
KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRX
aWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhdHRlcm5S
ZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTM0NywxNiArMzY5LDE4IEBAIHN0YXRpYyB2
b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKICAgICBjYWxsT25NYWluVGhy
ZWFkKFtpbWFnZSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0dJbWFnZVJlZj4oaW5mbykpXSB7IH0p
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgp
OworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9w
ZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKQEAgLTQyMywxNiArNDQ3LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEYKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xl
IHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gRklYTUU6
IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBhdHRlcm5zIGFuZCBncmFkaWVudHMgbGlr
ZSBkcmF3UGF0aCBkb2VzLCBpdCBwcm9iYWJseSBzaG91bGQuCiAgICAgQVNTRVJUKCFyZWN0Lmlz
RW1wdHkoKSk7CiAKQEAgLTQ1OCwxOSArNDc0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIH0K
IAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
PT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlja25lc3MoKTsKICAgICBib29s
IGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkgKyB0aGlja25lc3MgPT0gcG9pbnQyLngoKSk7
CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBpc1ZlcnRpY2FsTGluZSA/IHBvaW50Mi55KCkgLSBw
b2ludDEueSgpIDogcG9pbnQyLngoKSAtIHBvaW50MS54KCk7CkBAIC01MjYsMzEgKzUzNCwxNSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludAogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgdHJ1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUGF0
aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKICAgICBkcmF3UGF0aChwYXRoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5hcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9C
YXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC01NjUsMTYgKzU1Nyw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRl
cm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJuQWxwaGEpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+YXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5z
Zm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dD
b250ZXh0KSk7CiAKQEAgLTYxNiwxNSArNjAwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYWxj
dWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0
CiAgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKQEAgLTY1NCwxNiArNjMzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFBhdGgo
cGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7
CkBAIC03MTgsMTUgKzY5MiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKQEAgLTc5NCwxNiArNzYzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAo
bV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTgzMyw3ICs3OTQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChtX3N0YXRl
LmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKLSAgICBib29sIGRy
YXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93
KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFk
b3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNo
YWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAo
ZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtODQ2
LDIzICs4MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29s
b3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9
IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBi
b29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVk
U2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVz
ZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1
cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENH
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAg
ICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpA
QCAtODgxLDIwICs4MzQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxD
b2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xv
cigpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3IgY2FudmFzIHll
dC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAg
ICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTkyNCwxNiArODcyLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmls
bENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBQYXRoIHBhdGg7CkBA
IC05NTEsNyArODkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBzZXRGaWxsQ29s
b3IoY29sb3IpOwogCiAgICAgLy8gZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSBhc3N1bWVzIHRo
YXQgdGhlIGVkZ2VzIG9mIHJlY3QgYXJlIGNsaXBwZWQgb3V0LCBzbyB3ZSBvbmx5IGNhcmUgYWJv
dXQgc2hhZG93cyBjYXN0IGFyb3VuZCBpbnNpZGUgdGhlIGhvbGUuCi0gICAgYm9vbCBkcmF3T3du
U2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYm
ICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGJvb2wgZHJhd093blNoYWRv
dyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYg
aGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93
KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFk
b3dzLgpAQCAtOTcwLDUyICs5MTAsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBz
ZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXAo
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgLy8gRklYTUU6IFVzaW5nIENHUmVjdEluZmluaXRlIGlzIG11Y2ggZmFz
dGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xpcCBib3VuZGluZyBib3guIEhvd2V2ZXIsIGR1ZQogICAg
IC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNhbid0IGJl
IHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMgY2VydGFp
biB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNjYWxlLiBB
bmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBjYW5ub3QgdXNl
IGl0IGluIGZvciBhIHByaW50aW5nIGNvbnRleHQgZWl0aGVyLgogICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9
IENHQ29udGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERG
ICYmICghaXNBY2NlbGVyYXRlZENvbnRleHQoKSB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
KyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9y
bUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOwog
ICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZp
bml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSksIHJl
Y3QgfTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENH
Q29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7CiAgICAgQ0dDb250
ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91
dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dEJlZ2luUGF0
aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0Zm9ybUNvbnRl
eHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CiAg
ICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKQEAgLTEwMjMsMTYgKzkzOSw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgQ0dDb250ZXh0RU9DbGlw
KHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlw
VG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwpAQCAtMTA0OSwyMyArOTU3LDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250
ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBC
b3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBs
LT5jbGlwQm91bmRzKCk7Ci0KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogCiAgICAgc2F2ZSgpOwogCkBAIC0xMDc1
LDEyICs5NzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5z
Zm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0RW5kVHJhbnNw
YXJlbmN5TGF5ZXIoY29udGV4dCk7CkBAIC0xMDg4LDExICs5ODQsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcmVzdG9yZSgpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQot
ewotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQm
IHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkg
fHwgUExBVEZPUk0oV0lOKQpAQCAtMTEwMCw3ICs5OTEsNyBAQCBzdGF0aWMgdm9pZCBhcHBseVNo
YWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsCiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVOVVNFRF9QQVJBTSh5T2Zmc2V0
KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKKyAgICBp
ZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hh
ZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKQEAgLTExMjEsMjEgKzEwMTIs
MjIgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgJiYgIWJsdXIpIHsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAs
IDApOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYXZvaWQgdGhlIHNoYWRvdyBz
ZXR1cCBjb3N0IHdoZW4gd2Uga25vdyB3ZSdsbCByZW5kZXIgdGhlIHNoYWRvdyBvdXJzZWx2ZXMu
CiAKICAgICBDR0Zsb2F0IHhPZmZzZXQgPSBvZmZzZXQud2lkdGgoKTsKICAgICBDR0Zsb2F0IHlP
ZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVyUmFkaXVzID0gYmx1cjsK
LSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYg
KCFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYgKCFncmFwaGljc0Nv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkgewogICAgICAgICBDR0FmZmluZVRyYW5z
Zm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAg
ICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9C
YXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBAIC0xMTU2LDcgKzEwNDgsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0
ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAg
IGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxv
YXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZCgq
dGhpcywgeE9mZnNldCwgeU9mZnNldCk7CisgICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENo
ZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdh
cyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUg
anVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTE2Niw1MCArMTA1OCw1MyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywg
Y2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQ
bGF0Zm9ybVNoYWRvdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250
ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwotfQorICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBs
aW1pdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjpt
YXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAg
IG1faW1wbC0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQs
IGNhY2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIAotICAgIENHQ29udGV4dFNldE1p
dGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLX0KKyAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCisgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0QWxw
aGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsZWFyUmVjdChyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxh
Z3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQorICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwgc2VsZWN0Q0dCbGVuZE1vZGUoc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSkpOwogCi0gICAgQ0dDb250ZXh0Q2xl
YXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCisgICAgICAgIENHQ29u
dGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZS50
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hv
dWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisKKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hh
bmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3Rh
dGUuc2hvdWxkU21vb3RoRm9udHMpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKKyAgICAgICAg
Q0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0aW9u
UXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7CisKKyAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCisgICAgICAg
IHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1
ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0U2V0TWl0ZXJM
aW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCit7CisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBy
KTsKK30KIAordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsK
QEAgLTEyNjksMTYgKzExNjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDR0NvbnRleHRTdHJv
a2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAoTGluZUNhcCBj
YXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2FwKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAoY2FwKSB7CiAgICAgY2FzZSBCdXR0Q2Fw
OgogICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Q2FwQnV0dCk7CkBAIC0xMjkyLDE2ICsxMTc5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBjYXApCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGlu
ZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKQEAgLTEzMTIsMTYg
KzExOTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgQ0dDb250ZXh0U2V0TGluZURhc2go
cGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9p
bikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChqb2luKSB7CiAgICAgY2FzZSBNaXRlckpvaW46
CiAgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Sm9pbk1pdGVyKTsKQEAgLTEzMzUsOTQgKzEyMDYsNDMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsK
LSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAg
ICAgbV9kYXRhLT5zY2FsZShzaXplKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9h
dCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKGFuZ2xlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwogICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7
CiAgICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRm
b3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxl
IGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQogICAgIC8vIFRoZSBDVE0g
dXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAx
IHdoZW4gdGhlCiAgICAgLy8gY29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNj
YWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVkIGF0IGEgbG93ZXIKICAgICAvLyBsZXZlbC4gVG8gZ3Vh
cmFudGVlIHRoZSBkZXZpY2VTY2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQ
SS4KQEAgLTE0MzIsMTQgKzEyNTIsOCBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKICAgICByZXR1
cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
cm91bmRpbmdNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiByZWN0OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91
bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwotCiAgICAgLy8gSXQgaXMgbm90
IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3Rh
dGlvbiBwYXJ0IG9mIHRoZQogICAgIC8vIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIGRldmlj
ZSBzcGFjZSBjYW4gbWVzcyB3aXRoIHRoaXMgY29udmVyc2lvbiBpZiB3ZSBoYXZlIGEKICAgICAv
LyByb3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUgd29ybGQgY2xvY2sgd2lkZ2V0
LiBXZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbwpAQCAtMTQ4MiwyNyArMTI5NiwxMSBAQCBGbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNbwogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwg
cm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIERh
c2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMuYXBwZW5k
KHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJl
Y3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICgh
d2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlTGluZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ29s
b3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZsb2F0UmVjdCBib3Vu
ZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVj
dChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBwcmludGluZywg
bG9jYWxTdHJva2VDb2xvcik7CkBAIC0xNTU2LDE2ICsxMzU0LDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZpbGxD
b2xvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3Qg
VVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4
dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBj
b250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0cy4K
LSAgICB9Ci0KICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGxpbmsuY3JlYXRlQ0ZV
UkwoKTsKICAgICBpZiAoIXVybFJlZikKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3OSwzNiArMTM2
OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGlu
aywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKICAgICBDR1BERkNvbnRleHRTZXRVUkxGb3JS
ZWN0KGNvbnRleHQsIHVybFJlZi5nZXQoKSwgQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocmVj
dCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxp
dHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0KLSAgICBDR0lu
dGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0
OgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0g
ICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFsaXR5ID0ga0NH
SW50ZXJwb2xhdGlvbkxvdzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbk1lZGl1
bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoK
LSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25IaWdoOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250
ZXh0KCksIHF1YWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVy
Q29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0
SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQg
Zm9yIENBIENvbnRleHQuCiAgICAgQVNTRVJUKG1fZGF0YSk7CiAgICAgaWYgKGlzTGF5ZXJDb250
ZXh0KQpAQCAtMTYxNywxMjkgKzEzNzksMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElz
Q0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKICAgICAgICAgbV9kYXRhLT5tX2Nv
bnRleHRGbGFncyAmPSB+SXNMYXllckNHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRl
eHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aXND
QUxheWVyQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YSAmJiAobV9kYXRhLT5t
X2NvbnRleHRGbGFncyAmIElzTGF5ZXJDR0NvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJh
dGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgZm9yIENBIENvbnRleHQuCi0gICAgQVNTRVJUKG1fZGF0
YSk7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0Rmxh
Z3MgfD0gSXNBY2NlbGVyYXRlZENHQ29udGV4dDsKICAgICBlbHNlCiAgICAgICAgIG1fZGF0YS0+
bV9jb250ZXh0RmxhZ3MgJj0gfklzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJ
c0FjY2VsZXJhdGVkQ0dDb250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICAKLSAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3
aW5nTW9kZTo6RmlsbCk7Ci0gICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3
aW5nTW9kZTo6U3Ryb2tlKTsKLSAgICBpZiAoZmlsbCAmJiBzdHJva2UpCi0gICAgICAgIENHQ29u
dGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0RmlsbFN0cm9rZSk7Ci0gICAg
ZWxzZSBpZiAoZmlsbCkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRl
eHQsIGtDR1RleHRGaWxsKTsKLSAgICBlbHNlIGlmIChzdHJva2UpCi0gICAgICAgIENHQ29udGV4
dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0U3Ryb2tlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR1N0cm9rZUNvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldExpbmVXaWR0aChwbGF0Zm9ybUNvbnRleHQo
KSwgc3RkOjptYXgodGhpY2tuZXNzLCAwLmYpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwotCi0gICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFs
aWFzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wg
ZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRT
aG91bGRTbW9vdGhGb250cyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29udGV4
dCgpLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6OnJlbmRlcmlu
Z01vZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0
U2V0QmxlbmRNb2RlKHBsYXRmb3JtQ29udGV4dCgpLCBzZWxlY3RDR0JsZW5kTW9kZShjb21wb3Np
dGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7CisgICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0Rmxh
Z3MgJiBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQg
OiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CiAK
ICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFzZSBDVE0gb2YgYSBIaURQSSBjb250
ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVkIHRvIGl0LgogICAgIC8vIEZhaWxp
bmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxsIGNhdXNlIGNlcnRhaW4gQ0cgZmVh
dHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCkBAIC0xNzQ3LDEzICsxNDA4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcikKICAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250
ZXh0KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICAvLyBDR0Nv
bnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBp
ZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAg
ICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3NjQsMTMgKzE0MjAsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiAgICAgQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgZWxsaXBzZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQogICAgIC8vIENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xp
ZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKSB7CiAgICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBAIC0x
NzgxLDE4ICsxNDMyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENHQ29udGV4dFN0cm9rZUVsbGlw
c2VJblJlY3QoY29udGV4dCwgZWxsaXBzZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6c3Vw
cG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgRmxvYXRSZWN0IHJlY3QgPSBk
ZXN0UmVjdDsKQEAgLTE4MDIsMTUgKzE0NDgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jgog
ICAgIENHUERGQ29udGV4dFNldERlc3RpbmF0aW9uRm9yUmVjdChjb250ZXh0LCBuYW1lLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotCiAgICAgQ0dQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0g
Q0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvc2l0aW9uLCBDR0NvbnRleHRHZXRDVE0oY29u
dGV4dCkpOwogICAgIENHUERGQ29udGV4dEFkZERlc3RpbmF0aW9uQXRQb2ludChjb250ZXh0LCBu
YW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUG9pbnQpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmgKaW5kZXggMjVhMDg2NmUyZjM4NjllMWU3ZTFmOWU2NjI2YmVjMjA1YmIwZGM3NS4uZjk2
NmUyNzlhYjg2ZjU4Y2ZkZGFhMTMxODMzOGQxNDBhNGZhY2I5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCkBA
IC03Miw1ICs3MiwxMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7CiB9
OwogCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDRyA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJl
Zik7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgR3JhcGhpY3NDb250ZXh0Q0coSERDLCBib29s
IGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4KKyNlbmRpZgorCisg
ICAgfkdyYXBoaWNzQ29udGV4dENHKCk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0OworICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworCisg
ICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mg
PSAxKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
ZmFjdG9yKSBmaW5hbDsKKworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwor
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5h
bDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7
CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisKKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKworICAgIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisKKyAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBm
bG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IFN0cm9rZVN0eWxlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisKKyAg
ICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworCisgICAgYm9vbCBz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncykgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWw7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKK307CisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCmluZGV4IDVmZmNlMTJmZWEyMTlmMzEwMGE4YmViOTYyMzMwODA4NzhjYTdi
YTYuLjY4NjVmMGJkNDFiYjQ4NDYwZGJhMWY0ZjZiYTU4MDc4NGNjYWVlNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250
ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dENHPihjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgZGF0YSwgbnVtQnl0ZXMsIFtd
ICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CiAgICAgICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGNlZDNhZGJhMmI0YzEyZjBlODIzYTA4OGQyNWZjMTVh
YTg4OWE0MjcuLmYzM2RjZTkxNmRlYjM2ZTliMjUyYTI1YjgyODRlZDVkMWE4YWIxZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjQ0
LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1QYXRo
KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ryb2tl
U3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBib29sIGhpdFN1Y2Nlc3MgPSBD
R0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7
CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChj
b25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2sKICAgICBDR0NvbnRl
eHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAogICAgIGlmIChzdHJva2VTdHls
ZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQxYTg5N2ZhYTNlNWRmZGFiMjNkZjgxMzQuLjA1YTM5MTY1
NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRkMDg4YzhkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMzAsNyArMzAsNyBAQAog
I2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQzLDcgKzQz
LDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJl
ZiBjb250ZXh0KQogICAgIGlmICghcGxhdGZvcm1JbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBp
eGVscygKKyAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dENHKGNvbnRleHQpLnJvdW5k
VG9EZXZpY2VQaXhlbHMoCiAgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgo
cGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsKICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2Fk
ZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQppbmRleCBlMjlhZWNkZmJmZTY4MDA2N2ZjYmExOTM5ZmFlNTFlZGM4Nzky
ZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3OGFiY2E4N2JlNDIyZmI1ODFjZjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNj
YWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NT
UEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29h
Lm1tCmluZGV4IDE0MjFlYjkwZDdhNDlkMWU0ODI0YjVhYzg5Njg4MTNhMzA1NDNmN2QuLjM4OGFm
Y2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5NjdmMGU1MzU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dENvY29hLm1tCkBAIC0xMDYsNDggKzEwNiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3Rm9jdXNSaW5n
VG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aAog
ICAgIGRyYXdGb2N1c1JpbmcoY29udGV4dCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKKyAg
ICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNldCwgY29s
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4
dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3IpOwogfQogCiAj
aWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRU
aW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91Ymxl
IHRpbWVPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyBib29sIGRyYXdGb2N1c1Jp
bmdUb0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1Jp
bmdQYXRoLCBkb3VibGUsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGltZU9mZnNldCk7CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29u
dGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0aCk7CiAgICAgcmV0dXJuIGRyYXdGb2N1
c1JpbmdBdFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSwg
Y29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSAvLyBGSVhNRTogaW1wbGVt
ZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4KKyAgICBpZiAocGF0aC5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNSaW5nVG9Db250
ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCB0aW1lT2Zm
c2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
Ly8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCi0gICAgICAg
IHJldHVybjsKLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRo
ID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYg
cmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCks
IDAsIENHUmVjdChyZWN0KSk7CkBAIC0xNTcsMTYgKzE0Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91Ymxl
IHRpbWVPCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IGZv
Y3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9yIChh
dXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5n
ZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNldCwgLW9mZnNldCkpOwpAQCAtMTk5LDEx
ICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xvckZvck1hcmtlckxpbmVTdHlsZShEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSBzdHlsZSwgYgogICAgIH0KIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBXZSB3YW50IHRvIGZpbmQgdGhlIG51bWJlciBv
ZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNvbHZpbmcgdGhlIGVxdWF0aW9uczoKICAgICAvLyBkb3RE
aWFtZXRlciA9IGhlaWdodAogICAgIC8vIGRvdERpYW1ldGVyIC8gZG90R2FwID0gMTMuMjQ3IC8g
OS40NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZS5tbQppbmRleCA1OGM1MTI0ZDRiNmM2MTM2NGU4ZDM2OTZmMzQ5NWZkYjI2NDU5N2Ew
Li5lMTM4YzMyMDFkZGU2NDUwMDViODZkMGE5ZjYxYThmNDBmNzQ2ODdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0z
NzEsNyArMzcxLDcgQEAgR3JhcGhpY3NDb250ZXh0JiBJT1N1cmZhY2U6OmVuc3VyZUdyYXBoaWNz
Q29udGV4dCgpCiAgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4gKm1f
Z3JhcGhpY3NDb250ZXh0OwogCi0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOworICAgIG1fZ3JhcGhpY3ND
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oZW5zdXJlUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dCh0
cnVlKTsKIAogICAgIHJldHVybiAqbV9ncmFwaGljc0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDIwZGFlZjRiYjQx
ZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAwNGYzZjcuLmQ3N2Y3NDE2ZGQ1NjVjM2QzZjliNDU1ODg2
MzA4YjZhMzliNWVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgor
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogI2lmIFVTRShDT1JFX1RFWFQpCiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgpAQCAtNTgsNyArNTksNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAKLSNpZiBVU0Uo
Q09SRV9URVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAgdm9p
ZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBDR1Jl
Y3QpOwogICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYpOwogICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoW10sIGNv
bnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CkBAIC02OCw3ICs2OSw5IEBA
IHB1YmxpYzoKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb247IH0KIAog
cHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQgY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Cisj
aWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBVbmlxdWVSZWY8R3JhcGhp
Y3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNlbmRpZgogCiAgICAgdm9pZCBw
b3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2
b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7
CkBAIC04NSwxMyArODgsMTcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgdXBkYXRlU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotI2lmIFVT
RShDT1JFX1RFWFQpCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2
b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKICNlbmRpZgogCiAgICAgUmVjb3JkZXImIG1f
b3duZXI7CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIG1fZHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uOwotICAgIEdyYXBoaWNzQ29udGV4dCBtX2ludGVybmFsQ29udGV4dDsKKworI2lmIFVT
RShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKKwogICAgIGNvbnN0IEZvbnQqIG1fb3Jp
Z2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5n
TW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGMw
NDg2NTJmOWIwZTY1YWI1YzJjOWNlNTk4YjUyNzcwMmM4YWEzM2QuLmNhY2Y3NjRmNWRlMmM4Y2Y2
ZDNmNDAwMDJmZWFmNWUxMjE2OTFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNv
cmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAK
ICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
QEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVn
YXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGEKICAgICByZXR1cm4ga0NH
RXJyb3JTdWNjZXNzOwogfQogCi1HcmFwaGljc0NvbnRleHQgRHJhd0dseXBoc1JlY29yZGVyOjpj
cmVhdGVJbnRlcm5hbENvbnRleHQoKQorVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0ds
eXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogewogICAgIGF1dG8gY29udGV4
dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CiAgICAg
Q0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVn
aW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVn
aW5MYXllcikpOwpAQCAtODQsNyArODUsNyBAQCBHcmFwaGljc0NvbnRleHQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIENHQ29udGV4dERlbGVnYXRlU2V0
Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OkRpc3BsYXlMaXN0Ojpk
cmF3R2x5cGhzKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVs
ZWdhdGUuZ2V0KCksIGRlRHJhd0ltYWdlLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVn
YXRlQ2FsbGJhY2s+KCZkcmF3SW1hZ2UpKTsKICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Q29udGV4dENyZWF0ZVdpdGhEZWxlZ2F0ZShjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGtDR0NvbnRl
eHRUeXBlVW5rbm93biwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQoY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3ND
b250ZXh0Q0c+KGNvbnRleHQuZ2V0KCkpOwogfQogCiBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBk
cmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCkBAIC0xMTksMzQgKzEyMCwzMSBAQCB2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBjb250ZQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxD
b250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCiB7CiAgICAg
aWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBt
X2ludGVybmFsQ29udGV4dC5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5j
b2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbEdyYWRp
ZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50
LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJu
KTsKICAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAg
ICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLnBhdHRlcm4pOworICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZp
bGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwogICAgIH0KIAog
ICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlmIChtX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGll
bnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFs
U3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQu
c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwor
ICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKLSAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNl
dFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJh
bnNmb3Jtcyk7Ci0gICAgaWYgKGNvbnRleHRTdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0
YXRlLnNoYWRvdy5jb2xvcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5z
ZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvcik7CisgICAgbV9pbnRlcm5h
bENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cuaWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvdyht
X29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVy
LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0U3RhdGUuc2hhZG93UmFkaXVz
TW9kZSk7CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFRleHRE
cmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYgZm9udCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTMwMiw3ICszMDAsNyBAQCB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVm
LCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgICAgICByZXR1cm47CiAKICNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50
ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBhdXRvIHRleHRQb3NpdGlvbiA9
IENHQ29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIEFTU0VSVCghdGV4dFBvc2l0aW9uLngpOwogICAgIEFTU0VSVCghdGV4dFBv
c2l0aW9uLnkpOwogI2VuZGlmCkBAIC0zMjEsNyArMzE5LDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXQKICAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0byBlYWNoIG90aGVyLCBh
bmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKICAgICAvLyBDVE0gKiBjdXJyZW50VGV4dE1hdHJpeCA9
IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAogICAgIC8vIGN1cnJlbnRUZXh0TWF0cml4
ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnRUZXh0
TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBjdG1GaXh1cDsKICAgICBpZiAoYXV0
byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0cml4LmludmVy
c2UoKSkKICAgICAgICAgY3RtRml4dXAgPSBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVydGVkT3Jp
Z2luYWxUZXh0TWF0cml4LnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggNTRkODU0NzEyM2Y4OTQ3ZDZmMmZhY2Q3ZmNhNmY5
OTUxODFhMjY3MS4uMzk1N2M0NTc2ZmU5MTJkNjgxMDIwNzYxMDAxY2MyNGY2ODY4ODYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAt
MzQsOSArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBSZWNvcmRlcjo6RGVs
ZWdhdGUqIGRlbGVnYXRlKQotICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRp
c3BsYXlMaXN0Q29udGV4dCkgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4o
ZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgp
LCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVnYXRlKTsKLSAg
ICB9KQorICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRl
KCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVsZWdhdGUpCiB7
CiB9CiAKQEAgLTQ2LDEzICs0NCw2IEBAIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiAgICAgbV9yZXBs
YXllZERpc3BsYXlMaXN0LnJlc2V0KCk7CiB9CiAKLVJlY29yZGVyJiBEcmF3aW5nQ29udGV4dDo6
cmVjb3JkZXIoKQotewotICAgIGF1dG8qIGdyYXBoaWNzQ29udGV4dEltcGwgPSBjb250ZXh0KCku
aW1wbCgpOwotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHRJbXBsKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVjb3JkZXImPigqZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci19Ci0KIHZvaWQgRHJh
d2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQpCiB7CiAgICAgaWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKaW5kZXggZDM3YzA3MzViZWI1NTQ5MmQ5
MGZmOWVjZTRjYTRkYjc5OTVkNWY1OC4uOTY1NjM2MzRkNTdmNDA5NGIzYzJjYmE2ZjA2NzQwZjUw
NjNkZDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3aW5n
Q29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0gPSB7IH0sIFJlY29yZGVyOjpEZWxlZ2F0ZSogPSBudWxscHRyKTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UmVjb3JkZXImIHJlY29yZGVyKCk7CisgICAgUmVjb3JkZXImIHJlY29yZGVyKCkgeyByZXR1cm4g
bV9jb250ZXh0OyB9OwogICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxheURpc3Bs
YXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR3JhcGhpY3NDb250
ZXh0IG1fY29udGV4dDsKKyAgICBSZWNvcmRlciBtX2NvbnRleHQ7CiAgICAgRGlzcGxheUxpc3Qg
bV9kaXNwbGF5TGlzdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1vcnlEaXNwbGF5TGlzdD4g
bV9yZXBsYXllZERpc3BsYXlMaXN0OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMWE0
ZWE2ZGUzYjVhOGNlMzVkOGU3NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIyMmUyMTgzYTM5MTAzYmQ2
OTg1MzQ0NjRkZjNjYjBhOGZmOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcApAQCAtNjA1LDExICs2MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAKIHZvaWQgRHJhd1BhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSNpZiBVU0UoQ0cpCiAg
ICAgY29udGV4dC5kcmF3UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CmluZGV4IDA3NDA0MWYyNmExZTk2NGRjNGM3NmY0ODJiYzRjOTkzZTg3ZWUzMTUuLmYxMTdjZmE4
MzkzNjA4OWU3MWZkMDVhYjc4NjQ4YmQyNDhkNWU3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaApAQCAtMjc5LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX3N0cm9rZVBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogICAgIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsbFBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogCi0gICAgc3RhdGlj
IHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAg
c3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KTsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0U3Rh
dGU+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTMzNSw5ICszMzEsNyBAQCB2b2lkIFNldFN0YXRl
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0Uo
Q0cpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9CiAK
ICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC00NjMsMTQgKzQ1NywxMiBAQCBPcHRpb25hbDxTZXRTdGF0
ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiAgICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAKLSNpZiBVU0UoQ0cpCi0g
ICAgICAgIE9wdGlvbmFsPGJvb2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgaWYgKCFzaGFkb3dzVXNl
TGVnYWN5UmFkaXVzKQorICAgICAgICBPcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dS
YWRpdXNNb2RlOworICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAg
IGlmICghc2hhZG93UmFkaXVzTW9kZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0g
KnNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENHKQorICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNN
b2RlKTsKICAgICB9CiAKICAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDY5NDQ4MjhkZmM2NGI4NzRi
OTM3Y2VlYWRmMmFlZGMyYTY3MzgxMTUuLjgyYjJjN2FiNjUxMzgyMTBiZjNiNjU0ZTU5MmVkMzA3
MWU0ZjgxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAg
LTMzLDE1ICszMywxNSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNE
ZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0gICAgOiBHcmFwaGljc0Nv
bnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQorUmVj
b3JkZXI6OlJlY29yZGVyKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwgRHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uKQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKICAgICAsIG1fZGVsZWdhdGUo
ZGVsZWdhdGUpCiAgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQogICAgICwgbV9kcmF3R2x5cGhzUmVj
b3JkZXIoKnRoaXMsIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTUwLDkgKzUwLDggQEAg
UmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0LCBjb25zdCBHcmEKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUs
IGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOwogfQogCi1SZWNvcmRlcjo6UmVjb3JkZXIoUmVj
b3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29u
dGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCitSZWNvcmRl
cjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rpc3BsYXlMaXN0
KQogICAgICwgbV9kZWxlZ2F0ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQo
dHJ1ZSkKICAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBwYXJlbnQubV9kcmF3R2x5
cGhzUmVjb3JkZXIuZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKCkpCkBAIC0xNjYsMTEgKzE2NSw2
IEBAIFJlbmRlcmluZ01vZGUgUmVjb3JkZXI6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogICAgIHJl
dHVybiBtX2RlbGVnYXRlID8gbV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQot
ewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQogdm9pZCBSZWNvcmRlcjo6c2V0TGlu
ZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXAp
OwpAQCAtMjA2LDYgKzIwMCwxMCBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmREcmF3R2x5cGhzSXRl
bVdpdGhDYWNoZWRGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQgogCiB2b2lkIFJl
Y29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAgIGlmICghY2FuRHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgIG1fZGlzcGxheUxpc3QuY2FjaGVJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlcik7CiAgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
IH0KQEAgLTI3MCw3ICsyNjgsNyBAQCB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKIH0K
IAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpCitBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogUmVz
cGVjdCB0aGUgZ2l2ZW4gdmFsdWUgb2YgSW5jbHVkZURldmljZVNjYWxlLgogICAgIHJldHVybiBj
dXJyZW50U3RhdGUoKS5jdG07CkBAIC0yOTgsNyArMjk2LDcgQEAgdm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
CiAgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKICAgICBhcHBlbmQ8RHJh
d0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQpAQCAtMzI4LDYgKzMyNiwxOCBA
QCB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4o
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNv
bnN0IENvbG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogdm9p
ZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGFwcGVu
ZDxGaWxsUmVjdD4ocmVjdCk7CkBAIC00NDAsMTAgKzQ1MCw5IEBAIHZvaWQgUmVjb3JkZXI6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZDxD
bGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91
bmRzKCkKK0ludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIFdURkxv
Z0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBE
aXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4
LCA0MDk2LCA0MDk2KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtNDUy
LDM1ICs0NjEsMzQgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QKICAgICBhcHBlbmQ8Q2xpcFRv
SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBk
ZXN0UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0
aW9uKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVjb3Jk
ZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4
dCBuZXN0ZWRDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
YXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNp
emUoKSk7CisgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRl
c3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMg
SW1hZ2VCdWZmZXIncyBpbml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwotICAgICAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0
cmFuc2Zvcm0ueVNjYWxlKCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZElu
dFNpemUoZGVzdGluYXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gaW5pdGlhbENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0g
ICAgICAgIGluaXRpYWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAg
ICAgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsK
KyAgICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RN
LgorICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0
b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2Nh
bGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rv
cik7CisgICAgQWZmaW5lVHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2Fs
ZSgxLCAtMSk7CisgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0
KCkpOworICAgIGluaXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUo
KSk7CiAKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29y
ZGVyKCp0aGlzLCBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwg
aW5pdGlhbENUTSkpOwotICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMs
IEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBh
cHBlbmQ8QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNl
KTsKICAgICBkcmF3aW5nRnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENs
aXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotYm9vbCBSZWNvcmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVy
JiBwbGF5ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAg
ICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYg
RU5BQkxFKFZJREVPKQogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFw
bGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFt
ZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZv
ck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjUsNyBAQCBGbG9h
dFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dS
YWRpdXM7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgp
LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Cisg
ICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
KSB7CiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNo
YWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZs
YXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTMs
NiBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJl
dHVybiBjdXJyZW50U3RhdGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6
OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91
bmRzOwotfQotCiB2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQogewogICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBiODc2ZDZhZGI1MTQ3M2YxZjMwYWFiZGMyYmEyNWFh
M2I2MDI0MTliLi4wZDg2NjFjMTc5YzdjYTljN2M5ZDIxZjE5NDM0MGM5N2JiOTk0NWQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVj
dCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xh
c3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRl
ciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFz
cyBEZWxlZ2F0ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQm
LCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVs
bHB0ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29u
c3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVj
b3JkZXIoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3Qg
UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCk7CkBAIC03NywxNSArNzcsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBEcmF3R2x5cGhzUmVjb3JkZXI7Ci0gICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9h
dFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pOwor
ICAgIFJlY29yZGVyKFJlY29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBp
bml0aWFsQ1RNKTsKIAogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJ
bWFnZUJ1ZmZlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBNYXliZSByZW1vdmUg
dGhpcz8KKyAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNv
bnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkK
KyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9CisgICAgYm9v
bCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsgfQorI2VuZGlm
CisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYs
IGNvbnN0IENvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorICAgIHZv
aWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0
eWxlKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2b2lkIHVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRl
OwpAQCAtMTA1LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwogCi0jaWYgVVNFKENHKQorI2lmIFVTRShDRykgfHwgVVNFKERJUkVD
VDJEKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBh
cHBseUZpbGxQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyMCwxNCArMTI5LDIwIEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9y
VGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgb3ZlcnJpZGU7CisgICAg
dm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3Ms
IGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVz
LCBTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOworCiAgICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
IAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYs
IGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBk
b3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7CisjZW5kaWYKKwogICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVzdG9y
ZSgpIG92ZXJyaWRlOwogCkBAIC0xMzYsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIEFmZmluZVRyYW5z
Zm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkp
IG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAg
LTE0NSwxMiArMTYwLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAg
IEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIEludFJlY3QgY2xpcEJvdW5kcygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1h
Z2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVy
cmlkZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mJikgb3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoVklERU8pCiAgICAgdm9pZCBwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
KSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBs
YXllciYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpAQCAtMTczLDcgKzE4OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBhdXRvIGl0ZW0gPSBUKHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICAgICBpZiAoYXV0byByZWN0ID0gaXRl
bS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBpZiAoYXV0byBy
ZWN0ID0gaXRlbS5sb2NhbEJvdW5kcygqdGhpcykpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5
TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMoKnJlY3QpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91bmRzKCkpCiAg
ICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudCgqcmVjdCk7
CkBAIC0xOTUsNyArMjEwLDYgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgZXh0ZW50RnJvbUxv
Y2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIAogICAgIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBjbGlwQm91bmRz
KCkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIGN0bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Db2xvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQppbmRleCA2NWJjYTY3MGY5Mjg2ZDI1YTE5NTE5MjFiODVmMGEwNWEwMTUyZDUx
Li44OWQ4ODJjNTdmNDc2MWU1NDZkZDQyNDcwMWYzM2QyZmIyMDMxZjM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBVU0UoQVBQS0lUKQogCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5o
IgogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0IDx3dGYv
QmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0xvY2suaD4KQEAgLTg1LDcgKzg2
LDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxlQ29sb3JGcm9t
TlNDb2xvcihOU0NvbG9yICpjb2xvcikKICAgICAgICAgUmV0YWluUHRyPE5TQml0bWFwSW1hZ2VS
ZXA+IG9mZnNjcmVlblJlcCA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0
V2l0aEJpdG1hcERhdGFQbGFuZXM6bmlsIHBpeGVsc1dpZGU6MSBwaXhlbHNIaWdoOjEKICAgICAg
ICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBoYTpZRVMgaXNQ
bGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5dGVzUGVyUm93
OjQgYml0c1BlclBpeGVsOjMyXSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGJpdG1hcENv
bnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJl
cDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dENHIGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhC
aXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CiAgICAgICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoYml0bWFwQ29udGV4dCk7CiAK
ICAgICAgICAgW2NvbG9yIGRyYXdTd2F0Y2hJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5
ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0K
aW5kZXggY2U3YWJkN2I0ZTk1ZWViMzg5NmFlNWQ5YjNjYTRkMWNlMGZlYjllZi4uNTU0ODBiNTJi
OTFlMDI4NjJmZjBiZmMxMzA2ZGE4MGQ2MDNjNTQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtMjYsNyArMjYsNyBAQAogI2lt
cG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgogCi0jaW1wb3J0ICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJHcmFw
aGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgogI2ltcG9ydCA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+CkBAIC01MSw3ICs1MSw3IEBAIC0gKHZvaWQpZHJhd0luQ29u
dGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKICAgICBhdXRvIGxheWVyID0gV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlkZ2Ugdm9pZCop
c2VsZik7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyOjpSZXBhaW50UmVjdExpc3QgcmVjdHNUb1BhaW50ID0gV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyOjpjb2xsZWN0UmVjdHNUb1BhaW50KGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0
KCkpOwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdMYXllckNvbnRlbnRz
KGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCksIHJlY3RzVG9QYWludCwgc2VsZi5pc1JlbmRl
cmluZ0luQ29udGV4dCA/IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludFNuYXBzaG90dGluZyA6
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludE5vcm1hbCk7CiAgICAgfQpAQCAtMTI4LDcgKzEy
OCw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsK
ICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93bmVyKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBncmFw
aGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmco
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlci5jcHAKaW5kZXggZjMyNzY0MzY4NTFjYzdlMDFkNDcwYzU3MGQ5ZDlmMDZjMjNkNWZj
NS4uNTc3NGQwZGUwZTk0MDkyZDg0YjczMmU5ODQzOTA2MzYzZTA1NjI2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKQEAg
LTcyLDkgKzcyLDggQEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxUPigpOwogfQogCi1DYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJhdGlvblJl
Y29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGFpbnRpbmdPcGVyYXRpb25zJiBjb21t
YW5kTGlzdCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fY29t
bWFuZExpc3QoY29tbWFuZExpc3QpCitDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCisgICAgOiBtX2Nv
bW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewogICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoeyB7IH0s
IHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0KQEAgLTE1NCwxMCArMTUzLDYg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXAKICAgICB9CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewogICAgIHN0cnVjdCBTZXRMaW5l
Q2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGluZUNhcD4gewpA
QCAtMjUwLDcgKzI0NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIENhaXJv
OjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBA
IC0yNzAsNyArMjY1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgfQogICAg
IH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIENh
aXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCkBAIC0yOTIsNyArMjg3
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pKSk7CiB9CiAKQEAgLTMxNiw3ICszMTEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRvciwg
YmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21wb3NpdGVPcGVy
YXRvcikpOwogfQogCkBAIC0zNDYsNyArMzQxLDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZFJlY3QK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChj
cmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9yLCBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7
CiB9CiAKQEAgLTM2Nyw3ICszNjIsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29ucwogICAgIH07
CiAKICAgICBVTlVTRURfUEFSQU0oY29sb3IpOwotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENhaXJvOjpTaGFk
b3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zODYsNyArMzgxLDcgQEAgdm9p
ZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86
OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00MDgsNyArNDAzLDcgQEAgdm9pZCBDYWly
b09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBD
YWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQyOCw3ICs0MjMsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUg
PSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3Rh
dGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0LCBsaW5lV2lk
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KSk7CiB9CiAKQEAgLTQ0OCw3ICs0NDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVBhdGg+KHBh
dGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KSk7CiB9CiAKQEAgLTQ3MCw3ICs0NjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsK
IAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRv
JiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ryb2tl
RWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTIzLDcgKzUxOCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ckdseXBoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFw
cGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwg
Q2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFkb3dTdGF0ZShz
dGF0ZSksIHBvaW50LAogICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRfdD4oZm9udC5w
bGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLApAQCAtNTUzLDcgKzU0OCw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJ
bWFnZSwgY29uc3QgRmxvCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShpbWFnZVNpemUpOwot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBz
dGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd05hdGl2
ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAt
NTkzLDcgKzU4OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lCiAgICAgICAgIH0KICAgICB9
OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3
UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02MTMsMTEgKzYwOCwxMSBAQCB2
b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMt
PnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9p
bnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxv
YXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9v
bCBkb3VibGVVbmRlcmxpbmVzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMs
IFN0cm9rZVN0eWxlKQogewogICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZpbmFsIDogUGFp
bnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQsIERhc2hBcnJh
eSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xpbmVzRm9yVGV4
dCgpID0gZGVmYXVsdDsKQEAgLTYzMyw3ICs2MjgsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5k
KGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhz
LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIH0KIApA
QCAtNjcyLDE0ICs2NjcsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxsaXBzZT4ocmVj
dCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCiB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBEcmF3Rm9jdXNSaW5n
IGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwgZmxvYXQsIENv
bG9yPiB7CkBAIC05MDMsNyArODk0LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgc3RhdGUuY3RtSW52
ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkK
K0FmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3ND
b250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc3RhdGVT
dGFjay5sYXN0KCkuY3RtOwogfQpAQCAtMTAzMiw3ICsxMDIzLDcgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKICAgICB9CiB9CiAKLUludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5k
cygpCitJbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAog
ewogICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKICAgICByZXR1cm4gZW5j
bG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xpcEJvdW5kcykp
OwpAQCAtMTA3NiwxNSArMTA2NywxNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmFw
cGVuZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFuZAogICAgIG1f
Y29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi12b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4
dCYpPiYmKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3ND
b250ZXh0Jik+JiYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICByZXR1
cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCiAjaWYgRU5BQkxF
KFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEo
TWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVkLgorICAg
IEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24p
OwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXIuaAppbmRleCAzMDhmMWZmNjM2NTZhZGE0MDlmMGQ1ZjUwMzZiYzkxZTI1
ZDdiNmQyLi43N2FlNTBkZjA0OTJkM2FiZjg4ZmRmN2M1YzMzOTk3Mjc3YmJjNWJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29z
aWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCkBA
IC0yOCwyMSArMjgsMjAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTmlj
b3NpYVBhaW50aW5nT3BlcmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIAotY2xhc3Mg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsIHsKK2NsYXNzIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIgZmluYWwgOiBwdWJsaWMg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKLSAgICBDYWlyb09wZXJhdGlvblJl
Y29yZGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFBhaW50aW5nT3BlcmF0aW9ucyYpOwor
ICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJik7CiAKIHByaXZh
dGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRleHQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xl
YXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChXZWJDb3JlOjpMaW5l
Q2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNvcmU6OkRhc2hB
cnJheSYsIGZsb2F0KSBvdmVycmlkZTsKQEAgLTUzLDYgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNv
bG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBXZWJDb3JlOjpD
b21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsKKyAgICB2b2lk
IGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQog
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3Im
KSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBhdGgmKSBvdmVy
cmlkZTsKQEAgLTcwLDEwICs3MCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdM
aW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZs
b2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJv
b2wsIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3JlOjpEYXNoQXJy
YXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdF
bGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNvcmU6
OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3JlOjpDb2xvciYp
IG92ZXJyaWRlOwpAQCAtODYsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NhbGUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25jYXRDVE0oY29u
c3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0o
Y29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgV2ViQ29yZTo6
QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVE
ZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENU
TShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRl
OwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAgLTk1LDEyICs5
NCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92
ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYsIFdlYkNvcmU6
OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBv
dmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVmZmVyJiwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9EcmF3aW5n
Q29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2Vi
Q29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Jik+
JiYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50RnJhbWVGb3JN
ZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVz
dGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0
IFdlYkNvcmU6Ok1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0K
ICNlbmRpZgogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJv
LmNwcAppbmRleCAwMDExMDBmNzc3ODFlNGNmNWI4YzFkODdhMmM2YzM3Y2NlOGFhZjU0Li40OWFi
Y2FhNDUyNTMxNDUzODRiMzU1ODg0Njg2N2UwY2ZiZDA2YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0Nv
bnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0zMiw3ICszMiw3
IEBACiAjaWYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCiAjaW5jbHVkZSAiTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVy
YXRpb25SZXBsYXlDYWlyby5oIgpAQCAtNzEsNyArNzEsNyBAQCBQYWludGluZ0NvbnRleHRDYWly
bzo6Rm9yUGFpbnRpbmc6OkZvclBhaW50aW5nKEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgbV9jYWly
by5jb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY2Fpcm8uc3VyZmFjZS5nZXQoKSkp
OwogICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRDYWlybz4obV9jYWlyby5jb250ZXh0LmdldCgpKTsKLSAgICBtX2dyYXBoaWNzQ29udGV4
dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PihXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoKm1fcGxhdGZvcm1Db250ZXh0KSk7Cisg
ICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvPigqbV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBQYWludGluZ0NvbnRleHRDYWlybzo6
Rm9yUGFpbnRpbmc6On5Gb3JQYWludGluZygpCkBAIC0xMDQsMTEgKzEwNCw3IEBAIHZvaWQgUGFp
bnRpbmdDb250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpyZXBsYXkoY29uc3QgUGFpbnRpbmdPcGVy
YXRpb25zJiBwYWludGluCiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6OkZv
clJlY29yZGluZyhQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW5nT3BlcmF0aW9ucykKIHsKLSAg
ICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
PigKLSAgICAgICAgWyZwYWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcj4oY29udGV4dCwgcGFpbnRpbmdPcGVyYXRpb25zKTsKLSAgICAg
ICAgfSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI+KHBhaW50aW5nT3BlcmF0aW9ucyk7CiB9CiAKIFBhaW50aW5nQ29udGV4dENhaXJv
OjpGb3JSZWNvcmRpbmc6On5Gb3JSZWNvcmRpbmcoKSA9IGRlZmF1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dENHV2luLmNwcAppbmRleCA4MzBhZWQwODIyZjU3NWQ1MmM4YmRiZDFjZTI4MmI4ZWJhN2Q1MGJi
Li5kOTc5ZjNkZjA0YjlkZWM1OTRmZTU5M2VjMTYxNzgyYTNiYTgwNTc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKQEAgLTY3LDMyICs2NywxOSBA
QCBzdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gQ0dDb250ZXh0V2l0aEhEQyhIREMgaGRj
LCBib29sIGhhc0FscGhhKQogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1HcmFwaGljc0NvbnRl
eHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250
ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCisgICAgOiBH
cmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEpLmdldCgpKQog
ewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQotewotICAgIGlmICgh
aGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkpOwogICAgIG1f
ZGF0YS0+bV9oZGMgPSBoZGM7Ci0gICAgaWYgKG1fZGF0YS0+bV9jZ0NvbnRleHQpIHsKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRl
LgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAgIHNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQogfQogCiAvLyBGSVhN
RTogSXMgaXQgcG9zc2libGUgdG8gbWVyZ2UgZ2V0V2luZG93c0NvbnRleHQgYW5kIGNyZWF0ZVdp
bmRvd3NCaXRtYXAgaW50byBhIHNpbmdsZSBBUEkKIC8vIHN1aXRhYmxlIGZvciBhbGwgY2xpZW50
cz8KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywg
Y29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBi
b29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2
YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAo
IWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAgICAgIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTExMCw3ICs5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2lu
ZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRB
bHBoYUJsZW5kID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtDR0ltYWdlQWxw
aGFOb25lU2tpcEZpcnN0KSkpOwogCiAgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSkpOwotICAgIENHQ29udGV4dERy
YXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7
CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2Nn
Q29udGV4dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2UuZ2V0KCkpOwogICAgIAogICAgIC8vIERlbGV0
ZSBhbGwgb3VyIGp1bmsuCiAgICAgOjpEZWxldGVEQyhoZGMpOwpAQCAtMTI0LDIxICsxMTEsMTgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRvd3NCaXRtYXAq
IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG8KICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRh
KGltYWdlRGF0YS5nZXQoKSkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1hZ2UtPnNpemUo
KS5oZWlnaHQoKSwgOCwgMzIsIGltYWdlLT5ieXRlc1BlclJvdygpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QsIGRh
dGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwot
ICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5z
aXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKKyAgICBDR0NvbnRleHREcmF3SW1h
Z2UoZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCksIGltYWdlLT5z
aXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0
IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAogfQogCiAvLyBG
SVhNRTogVGhpcyBpcyBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcgZnVuY3Rpb24gaW4gR3JhcGhpY3NDb250ZXh0TWFjLm1tLgogLy8gVGhlIGNv
ZGUgY291bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHRDRy5jcHAgYW5kIGJlIHNoYXJlZC4KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRS
ZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAg
ICBmbG9hdCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDIuMGY7CiAgICAgb2Zmc2V0ICs9IHJhZGl1
czsKICAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8gY2FjaGVkQ0dD
b2xvcihjb2xvcikgOiBudWxscHRyOwpAQCAtMTY0LDExICsxNDgsOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHdpZHRoLAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0eWxlLm1vZGUgIT0gRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nICYmIHN0eWxlLm1vZGUgIT0gRG9jdW1l
bnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIpCiAgICAgICAgIHJldHVybjsKIApAQCAt
MjQ0LDUgKzIyNSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1
c2goKQogICAgIENHQ29udGV4dEZsdXNoKG1fY2dDb250ZXh0LmdldCgpKTsKIH0KIAorR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDRzo6ZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQorCiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCmluZGV4IGYxNDQyNTcyY2M2ZDFkNTRi
YmVlNThiZGJjMzZlZGY3NzRhYWJiNjQuLmYzYzhmMWRkMTE0NWIyMWVjNTYxZGFmOTBhMTNlMzZj
ZjM3ZDRiN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcApAQCAtMjgsNyArMjgs
NyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRElCUGl4ZWxE
YXRhLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8t
d2luMzIuaD4KQEAgLTY2LDI4ICs2Niw5IEBAIHN0YXRpYyBjYWlyb190KiBjcmVhdGVDYWlyb0Nv
bnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7
CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYywgYm9vbCBoYXNB
bHBoYSkKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyhIREMgZGMs
IGJvb2wgaGFzQWxwaGEpCisgICAgOiBHcmFwaGljc0NvbnRleHRDYWlybyhjcmVhdGVDYWlyb0Nv
bnRleHRXaXRoSERDKGRjLCBoYXNBbHBoYSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGRjLCBoYXNB
bHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGRjLCBi
b29sIGhhc0FscGhhKQotewotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNh
aXJvX3QqIGNyID0gY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhEQyhkYywgaGFzQWxwaGEpOwotCi0g
ICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShtYWtlVW5pcXVl
PFBsYXRmb3JtQ29udGV4dENhaXJvPihjcikpOwotICAgIG1fZGF0YS0+cGxhdGZvcm1Db250ZXh0
LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEtPm1faGRjID0g
ZGM7Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT5jcigpKSB7Ci0gICAgICAgIC8vIE1ha2Ug
c3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICAgICAg
c2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAgICAgICBzZXRQbGF0Zm9ybVN0
cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIH0KLSAgICBpZiAoY3IpCi0gICAgICAgIGNh
aXJvX2Rlc3Ryb3koY3IpOwogfQogI2VuZGlmCiAKQEAgLTEyNyw5ICsxMDgsOSBAQCBzdGF0aWMg
dm9pZCBkcmF3Qml0bWFwVG9Db250ZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIGNvbnN0IERJQgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3ND
b250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhh
QmxlbmQpCiB7Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1f
aGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9
ICFkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxh
eWVyKCk7CiAgICAgaWYgKCFoZGMgfHwgIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRh
LT5yZXN0b3JlKCk7CisgICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3Jl
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3OCw0ICsxNTksOSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQogfQogI2VuZGlmCiAKK0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS5nZXQoKTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKaW5kZXggMjlhODJhODk3ODIy
OWIwZjU4NzNhYmRmODJiZmFmODA2Y2YxNjU5OC4uNjVlOTdmOTczNDY5MjI4MmQyN2ZjMWVkNzg0
ODhkMTgxNzNjMTYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCkBAIC00Nywx
NyArNDcsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiB7
CiAgICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwogfQogCi1HcmFwaGljc0NvbnRleHQ6
OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFy
Z2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJl
bmRlclRhcmdldCwgUkVDVCByZWN0LCBib29sIGhhc0FscGhhKQogewogICAgIC8vIENyZWF0ZSBh
IERDIHJlbmRlciB0YXJnZXQuCiAgICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0gRGlyZWN0MkQ6
OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAotICAgIEhSRVNVTFQgaHIgPSBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRhcmdldFByb3Bl
cnRpZXMsIHJlbmRlclRhcmdldCk7CisgICAgSFJFU1VMVCBociA9IEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0YXJnZXRQcm9w
ZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikp
OwogCiAgICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRjLCAmcmVjdCk7CkBAIC02NywxMiAr
NjcsMTIgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhkYywgSUQyRDFE
Q1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkUKICAgICBtX2RhdGEtPm1faGRjID0gaGRj
OwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlIHJlbmRlcmVyVHlwZSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKIHsKICAgICBwbGF0
Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIHJlbmRlcmVyVHlwZSk7CiB9CiAKLUlE
MkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKK0lEMkQxRmFjdG9y
eSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKQogewogICAgIHN0YXRp
YyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51bGxwdHI7CiAgICAgaWYgKCFkaXJl
Y3QyREZhY3RvcnkpIHsKQEAgLTg5LDcgKzg5LDcgQEAgSUQyRDFGYWN0b3J5KiBHcmFwaGljc0Nv
bnRleHQ6OnN5c3RlbUZhY3RvcnkoKQogICAgIHJldHVybiBkaXJlY3QyREZhY3Rvcnk7CiB9CiAK
LUlEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQo
KQorSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVu
ZGVyVGFyZ2V0KCkKIHsKICAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRlZmF1bHRSZW5k
ZXJUYXJnZXQgPSBudWxscHRyOwogICAgIGlmICghZGVmYXVsdFJlbmRlclRhcmdldCkgewpAQCAt
MTA0LDcgKzEwNCw3IEBAIElEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1
bHRSZW5kZXJUYXJnZXQoKQogICAgIHJldHVybiBkZWZhdWx0UmVuZGVyVGFyZ2V0OwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9v
bCBoYXNBbHBoYSkKIHsKICAgICBpZiAoIWhkYykKICAgICAgICAgcmV0dXJuOwpAQCAtMTM2LDEy
ICsxMzYsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBi
b29sIGhhc0FscGhhKQogICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xh
dGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAgICAgcGxhdGZvcm1Jbml0KHBsYXRm
b3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5n
VHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZSByZW5kZXJpbmdUeXBlKQogewogICAgIGlmICghcGxhdGZvcm1Db250ZXh0KQogICAgICAg
ICByZXR1cm47CkBAIC0xNTUsMTYgKzE1NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdAog
ICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0
SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxh
dGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVz
dHJveSgpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6fkdyYXBoaWNzQ29udGV4dERpcmVjdDJE
KCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1QbGF0Zm9ybUNvbnRleHREaXJlY3QyRCog
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29u
dGV4dCgpOwotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICByZXR1cm4gJm1f
ZGF0YS0+cGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKQEAgLTE5NSwzMyArMTkyLDI4IEBAIGZsb2F0
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y3VycmVudEdsb2JhbEFscGhhKCkgY29u
c3QKICAgICByZXR1cm4gbV9hbHBoYTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQ
bGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNhdmUoKQogewot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpz
YXZlKCk7CiAgICAgRGlyZWN0MkQ6OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgRGlyZWN0MkQ6OnJl
c3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKGNvbnN0IENPTVB0cjxJRDJEMUJpdG1hcD4mIGltYWdlLCBjb25zdCBG
bG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwor
ICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBuYXRpdmVJ
bWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBj
b25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0
IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9vbCBj
cmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVu
Y3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9ICFtX2RhdGEtPm1faGRjIHx8IGlz
SW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgICAgICBEaXJlY3QyRDo6cmVzdG9y
ZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDM0
ICsyNTQsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChI
REMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib28KICAgICA6OkRlbGV0ZURDKGhkYyk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0
bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IElu
dFBvaW50JiBwb2ludCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29s
b3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVu
dE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRy
YXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKKyAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVu
dE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwogfQogCi1HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCitHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fcGxhdGZv
cm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVyZXJUeXBlKHJlbmRlcmlu
Z1R5cGUpCiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBpZiAobV9yZW5k
ZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRUeXBlOjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCi1HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0Zm9ybUNvbnRl
eHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5n
VHlwZSkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBv
d25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiAgICAgOiBtX293bmVkUGxhdGZvcm1Db250
ZXh0KFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQpKQogICAgICwgbV9wbGF0Zm9ybUNvbnRl
eHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlwZShyZW5kZXJp
bmdUeXBlKQpAQCAtMjk3LDcgKzI5MCw3IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQCiAgICAg
aWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1v
cnkpCiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCkBAIC0zMTAsOSArMzAzLDggQEAgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KCkKICAgICAgICAgZW5kRHJhdygpOwogfQogCi1JRDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhp
Y3NDb250ZXh0OjpicnVzaFdpdGhDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJRDJEMVNvbGlk
Q29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JXaXRoR2xvYmFs
QWxwaGEoY29sb3IpKS5nZXQoKTsKIH0KIApAQCAtMzcyLDczICszNjQsNjAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKIH0KIAot
RDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxwaGEoY29uc3Qg
Q29sb3ImIGNvbG9yKSBjb25zdAorRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7CiAgICAg
YXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7CiAgICAgcmV0
dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xvYmFsQWxwaGEo
KSk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRTdHJva2VCcnVzaCgp
IGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VC
cnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkU3Ry
b2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRG
aWxsQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNv
bGlkRmlsbEJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1f
c29saWRGaWxsQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6
cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9y
bUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gq
IEdyYXBoaWNzQ29udGV4dDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2guZ2V0KCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpbkRyYXcoKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6YmVnaW5EcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkRyYXcoKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmVuZERyYXcoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kRHJh
dygpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+ZW5kRHJhdygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmx1c2goKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmx1c2goKQogewogICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0Zm9ybUNvbnRleHQo
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKGNvbnN0
IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0ZXJuVHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlOwogICAgIERpcmVjdDJEOjpkcmF3UGF0dGVy
bigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGlsZUltYWdlKSwgSW50U2l6ZShpbWFnZS5z
aXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRp
b25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogfQogCiAvLyBE
cmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1JlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBEaXJlY3QyRDo6ZHJhd1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBib3JkZXJU
aGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yKTsKIH0KQEAgLTQ5MCw1MiArNDY5LDI5IEBAIEQyRDFfU1RST0tFX1NUWUxFX1BST1BF
UlRJRVMgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzdHJva2VTdHlsZVByb3BlcnRp
CiAgICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX3BsYXRmb3JtQ29udGV4
dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRl
eHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVKb2luLCBtX3BsYXRmb3JtQ29u
dGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7CiB9CiAKLUlE
MkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VTdHlsZSgpIGNv
bnN0CitJRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlU3R5
bGUoKSBjb25zdAogewogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0
dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5zdHJva2VTdHlsZSgpOwogfQogCiAvLyBUaGlzIGlzIG9u
bHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9r
ZSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5z
dGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50
MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0
cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5
bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBU
aGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCkBAIC01NDMsMTEgKzQ5OSw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3RhdGUuc3Ryb2tl
UGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJU
b0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4o
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVybigpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jh
c2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCkBA
IC01NTUsMTc5ICs1MDgsMTA0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0
ZXJuKCkKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNoID0gYWRvcHRD
T00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0
ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkg
fHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5kcmF3UGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0
ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpkcmF3UGF0aChjb250ZXh0LCBw
YXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlz
RW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
YXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVj
dDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBw
YXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5z
dHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250
ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6
OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0
ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdChjb250ZXh0LCBy
ZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9y
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRl
eHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnRleHQs
IHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgYXV0byBicnVzaCA9IGdyYWRp
ZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKKyAgICBp
ZiAoIWJydXNoKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAg
RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBi
cnVzaC5nZXQoKSk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0g
c3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CisKKyAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5k
TW9kZSk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBj
b2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCit7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xv
ciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Zmls
bFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xvcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBs
YXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShj
b250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRl
LCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXAoKnBsYXRm
b3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocGF0aCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwUGF0
aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotSW50UmVjdCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAg
IHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcygqcGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCkBAIC03MzUsMTggKzYxMywxMyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCisg
ICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAg
IHNhdmUoKTsKIAogICAgIG1fc3RhdGUuYWxwaGEgPSBvcGFjaXR5OwogCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwogfQogCkBAIC03NTQsMTE5ICs2MjcsMTEz
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRUcmFuc3BhcmVuY3lM
YXllcigpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5j
eUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIAotICAgIEFTU0VSVCghbV9pbXBsKTsKLQogICAg
IG1fc3RhdGUuYWxwaGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpOwogCiAgICAgcmVz
dG9yZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lM
YXllcnMoKQorYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3VwcG9ydHNUcmFuc3BhcmVu
Y3lMYXllcnMoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVy
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp1cGRh
dGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgICh2b2lkKW9mZnNldDsKLSAg
ICAodm9pZClibHVyOwotICAgICh2b2lkKWNvbG9yOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0No
YW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0
Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCisgICAgICAgIERp
cmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0
cm9rZVN0eWxlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5
bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpIHsKKyAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7
CisgICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFz
c29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdl
IGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUg
WSBheGlzCisgICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBo
aWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7CisgICAgICAgICAg
ICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBt
dXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRv
d09mZnNldC5oZWlnaHQoKSB9OworICAgICAgICB9CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVN0eWxlKCpw
bGF0Zm9ybUNvbnRleHQoKSwgc3R5bGUpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpT
dGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hv
dWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0
IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAg
ICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLnN0cm9rZUNv
bG9yID09IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VC
cnVzaCA9IGJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOyAgICAKKyAgICB9CisgICAgCisg
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFu
Z2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7CisgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3Io
ZmlsbENvbG9yKCkpOwogICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZv
bnRzQ2hhbmdlKSkgeworICAgICAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8g
RDJEMV9URVhUX0FOVElBTElBU19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNf
TU9ERV9BTElBU0VEOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkt
PlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB9CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpBbHBo
YUNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxwaGEpOworICAg
ICAgICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKICAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxh
dGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKSB7CisgICAgICAgIEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05F
SUdIQk9SOworCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIEludGVycG9s
YXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKKyAgICAgICAg
ICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6Okxv
dzoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9MSU5FQVI7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6
TWVkaXVtOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0NV
QklDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkhpZ2g6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVf
SElHSF9RVUFMSVRZX0NVQklDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpLCBx
dWFsaXR5KTsKKyAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgRGlyZWN0MkQ6OnNldE1pdGVyTGlt
aXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNv
bnRleHQoKSwgcmVjdCk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3Qy
RDo6c3Ryb2tlUmVjdChjb250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJEOjpTdHJva2VT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6c2V0
TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNl
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9
IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpA
QCAtODc1LDM0MSArNzQyLDE3MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgICAgICAgICBk
YXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwogICAgIH0KIAot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNldExpbmVE
YXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihqb2luKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNl
dExpbmVKb2luKCpwbGF0Zm9ybUNvbnRleHQoKSwgam9pbik7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZpbGxSdWxlKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQogewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzY2FsZSgqcGxhdGZvcm1D
b250ZXh0KCksIHNpemUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJh
bnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJv
dGF0ZShmbG9hdCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKGFu
Z2xlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0KCksIGFuZ2xl
KTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xh
dGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgp
LCB4LCB5KTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0p
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBEaXJlY3QyRDo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsK
ICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlk
ZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgLy8gRklYTUU6
IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNl
OwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURl
dmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNv
bnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+
Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5n
TW9kZSk7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBEYXNoQXJyYXkg
d2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQoMCk7Ci0gICAgd2lkdGhzLmFwcGVuZChyZWN0Lndp
ZHRoKCkpOwotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdo
dCgpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3
aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmRy
YXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0
aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiBsaW5rLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4dDo6c2V0
VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBjb250ZXh0
cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0cy4KLSAgICB9
Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IG1v
ZGUpCi17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotCi0gICAgRDJEMV9JTlRF
UlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1Rf
TkVJR0hCT1I7Ci0KLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRpb25R
dWFsaXR5OjpEZWZhdWx0OgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0
aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5U
RVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfQ1VCSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkhpZ2g6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9I
SUdIX1FVQUxJVFlfQ1VCSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBGSVhNRTog
U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJD
b250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxheWVyQ29udGV4
dChib29sIGlzTGF5ZXJDb250ZXh0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybjsKLQogICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBj
b25zdAorYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCgpIGNv
bnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVkLgogICAgIG5v
dEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0Fj
Y2VsZXJhdGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1BsYXRmb3JtQ29udGV4dCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpp
c0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxh
Z3MgbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgKHZvaWQpbW9kZTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuc3Ry
b2tlQ29sb3IgPT0gY29sb3IpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENvbG9y
KHN0cm9rZUNvbG9yKCkpOworICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQuCiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9h
dCB0aGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzID09IHRoaWNrbmVzcyk7Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VUaGlja25lc3ModGhp
Y2tuZXNzKTsKLX0KKyAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxs
UGF0dGVybikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gZmlsbCBl
bGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisgICAgICAgIGZp
bGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgICAgICByZXR1cm47CisgICAgfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZp
bGxCcnVzaCA9IGJydXNoV2l0aENvbG9yKGZpbGxDb2xvcigpKTsKKyAgICBEaXJlY3QyRDo6Zmls
bEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZpbGxDb2xvciwg
bV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VU
aGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRB
bnRpYWxpYXMoYm9vbCBlbmFibGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJv
a2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ry
b2tlUGF0dGVybikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ry
b2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KKyAgICAg
ICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIEFTU0VSVCghbV9pbXBsKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgZW5hYmxlKTsKKyAgICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4
dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBt
X3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZl
ciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBVTlVTRURfUEFSQU0oZm9udFNtb290aGlu
Zyk7CisgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsK
KyAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOworICAgIFZlY3Rv
cjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7CisgICAgVmVjdG9yPERXUklU
RV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMpOwogCi0gICAgYXV0byBmb250
U21vb3RoaW5nTW9kZSA9IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9DTEVBUlRZ
UEUgOiBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQUxJQVNFRDsKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdN
b2RlKTsKLX0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHsK
KyAgICAgICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291bnQoKSkKKyAg
ICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBo
YShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VzKGkgKyBm
cm9tKTsKKyAgICAgICAgaWYgKCFhZHZhbmNlKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBhbHBoYSk7Ci0gICAgbV9kYXRhLT5zZXRBbHBoYShh
bHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9w
ZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOworICAg
ICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOworICAgICAgICBn
bHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7CisgICAgICAg
IGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOworICAg
IH0KIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNl
dCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbigq
cGxhdGZvcm1Db250ZXh0KCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBEaXJlY3QyRDo6ZHJh
d0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdy
YXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3ND
b250ZXh0KCkpLAorICAgICAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwg
Zm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2YW5jZXMsIGds
eXBoT2Zmc2V0cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBzdGF0
ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29sb3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdD
b21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBG
dW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQogewotICAgIC8vIFRoaXMgaXMgYSBu
by1vcCBmb3IgRGlyZWN0MkQuCisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KKyAgICBy
ZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlw
c2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghbV9pbXBs
KTsKLQotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJu
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxsIGVsbGlwc2Vz
IHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAgZmlsbEVsbGlw
c2VBc1BhdGgoZWxsaXBzZSk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJl
dHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERp
cmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUu
ZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byogY29udGV4dCA9ICZncmFwaGljc0NvbnRl
eHQoKTsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKGNvbnRleHQpKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpw
YWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVCgh
bV9pbXBsKTsKLQotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1fc3RhdGUuc3Ry
b2tlUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gc3Ry
b2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAg
ICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdF
bGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJva2VTdHlsZSwg
bV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOworICAgIC8vIEZJ
WE1FOiBOb3QgaW1wbGVtZW50ZWQuCiB9CisjZW5kaWYKKwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjcw
YzNjMTczYzkxYTc2YmViZDJlOGU2ZGYyMTU1ZjFhMTU0YWMxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGlyZWN0MkRPcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkZvbnQu
aCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0
SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFsmcGxh
dGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRD4oY29u
dGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCi17Ci0gICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAg
ICAgIFtyZW5kZXJUYXJnZXRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
Pihjb250ZXh0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0KQot
ICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9wbGF0Zm9ybUNvbnRl
eHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBtX3BsYXRm
b3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0g
ICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLSAg
ICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fb3duZWRQbGF0Zm9ybUNv
bnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4ocmVuZGVyVGFyZ2V0KSkK
LSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwg
bV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3Bs
YXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRl
eHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dCht
X3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6fkdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX3BsYXRm
b3JtQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9r
ZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ry
b2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUo
bV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAm
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQg
dGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQg
SFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBtdXRh
YmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5z
aGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBz
aGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0
ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0
ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNo
b3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRB
bnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGVhclNoYWRvdygpCi17Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGlu
ZUNhcCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29udGV4dCwgbGlu
ZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsKLSAgICBEaXJl
Y3QyRDo6c2V0TGluZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFzaE9mZnNldCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5l
Sm9pbiBsaW5lSm9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4obV9wbGF0Zm9ybUNv
bnRleHQsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TWl0
ZXJMaW1pdChtX3BsYXRmb3JtQ29udGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6OkZpbGxTb3Vy
Y2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBEaXJlY3QyRDo6
ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byBicnVzaCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1f
cGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIWJydXNoKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9y
bUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24o
bV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOwotICAgIERp
cmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6
Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3Ig
PSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwgYmxlbmRN
b2RlKTsKLQotICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7Ci0g
ICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUm91bmRlZFJl
Y3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgZWxz
ZQotICAgICAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVj
dCgpLCBjb2xvciwgc2hhZG93U3RhdGUpOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21w
b3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5k
TW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZp
bGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
YXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgRGlyZWN0MkQ6
OkZpbGxTb3VyY2UgZmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpOwotICAgIGZp
bGxTb3VyY2UuYnJ1c2ggPSBtX3BsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcik7
Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbFNvdXJjZSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpmaWxsUGF0
aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsIGdy
YXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsK
LSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVj
dDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRoKG1fcGxhdGZv
cm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBncmFwaGljc0Nv
bnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBz
dHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xlYXJS
ZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZm
ZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewot
ICAgIFVOVVNFRF9QQVJBTShmb250U21vb3RoaW5nKTsKLSAgICBpZiAoIWZvbnQucGxhdGZvcm1E
YXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZzZXQgPSBwb2lu
dC54KCk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5cGhzKTsKLSAg
ICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOwotICAgIFZlY3Rv
cjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsKLQotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAgICBpZiAoaSAr
IGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMoaSArIGZyb20p
OwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9tKTsKLSAgICAgICAgaG9y
aXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAgZ2x5cGhPZmZz
ZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAgICBnbHlwaE9m
ZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAgICB9Ci0KLSAg
ICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgp
OwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERp
cmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRl
LCBncmFwaGljc0NvbnRleHQoKSksCi0gICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxB
ZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50ZXh0RHJhd2lu
Z01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5z
aGFkb3dDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFn
ZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBpbWFnZVNp
emUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpkcmF3UGF0dGVybigoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSkKLSAgICAgICAgRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBXVEZN
b3ZlKHN1cmZhY2UpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9u
cy5ibGVuZE1vZGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0
MkQ6OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlja25lc3MsIHN0
YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmUo
bV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3Rh
dGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0
MkQ6OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0aGlja25lc3Ms
IHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKLXsKLSAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZmlsbEVs
bGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0
cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgm
KQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zm
c2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnNhdmUoKQotewotICAgIERpcmVjdDJEOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJlc3RvcmUoKQotewotICAgIERp
cmVjdDJEOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIERp
cmVjdDJEOjp0cmFuc2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQot
ewotICAgIERpcmVjdDJEOjpyb3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5z
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBEaXJlY3QyRDo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQs
IHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIERpcmVjdDJEOjpjb25j
YXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRy
YW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKLXsKLSAgICBy
ZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQotewotICAgIERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG1f
cGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBEaXJlY3QyRDo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgRGly
ZWN0MkQ6OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0g
ICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQot
ewotICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0aChtX3BsYXRm
b3JtQ29udGV4dCwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6Y2xpcEJvdW5kcygpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0
ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSBidWZmZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBpZiAoIWltYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBoaWNzQ29udGV4
dCgpOwotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29udGV4dCkpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KQot
ewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGlu
Z01vZGUpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0RldmljZVBpeGVs
cyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgRGVzdGlu
YXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQotewot
ICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViMDQ1MDUzMTcwM2ZiOTBlZWE3YjQyZjI0NzRmNTkzNmJk
M2JhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIFVTRShESVJF
Q1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0SW1wbERpcmVjdDJEIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwg
ewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVyVGFyZ2V0Kik7
Ci0KLSAgICBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiwgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQo
R3JhcGhpY3NDb250ZXh0JiwgSUQyRDFSZW5kZXJUYXJnZXQqKTsKLSAgICB2aXJ0dWFsIH5HcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKTsKLQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZs
YWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihM
aW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbEVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0
aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXImLCB1
bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkg
b3ZlcnJpZGU7Ci0KLSAgICBib29sIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIGJvb2wgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQotICAg
IHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZv
aWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFy
a2VyTGluZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcm90
YXRlKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwot
ICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNl
U2NhbGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUp
IG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpIG92ZXJyaWRlOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92
ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVy
JikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJl
Y3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6
OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAKaW5kZXggMWQ4MDQyMGNmN2VjNmNkNzc1YTYyYmFlYTIyZjk5MDYwN2Vi
NGNiZC4uNzdkYWZlMzIwYmIwNzMwODkwMTAwZDdjNGFmMTA0MTYzNjllNzIzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAKQEAgLTU2LDEyICs1NiwxMiBAQCBzdGF0aWMgdm9pZCBmaWxsV2l0aENs
ZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCiAjaWYgUExBVEZPUk0oV0lOKQogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoYm9vbCBpbmNsdWRlKQogewot
ICAgIG1fZGF0YS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVkZTsKKyAgICBk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0g
aW5jbHVkZTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnNob3VsZEluY2x1ZGVDaGlsZFdp
bmRvd3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPm1fc2hvdWxkSW5jbHVkZUNoaWxk
V2luZG93czsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fc2hvdWxk
SW5jbHVkZUNoaWxkV2luZG93czsKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFw
OjpXaW5kb3dzQml0bWFwKEhEQyBoZGMsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC05NSwxNSAr
OTUsMTMgQEAgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2luZG93c0JpdG1hcCgp
CiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA+IEdyYXBo
aWNzQ29udGV4dDo6Y3JlYXRlV2luZG93c0JpdG1hcChjb25zdCBJbnRTaXplJiBzaXplKQogewot
ICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KG1fZGF0YS0+bV9oZGMsIHNpemUp
OworICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KGRlcHJlY2F0ZWRQcml2YXRl
Q29udGV4dCgpLT5tX2hkYywgc2l6ZSk7CiB9CiAjZW5kaWYKIAogSERDIEdyYXBoaWNzQ29udGV4
dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0
QWxwaGFCbGVuZCkKIHsKLSAgICBIREMgaGRjID0gbnVsbHB0cjsKLSAgICBpZiAoIW1faW1wbCkK
LSAgICAgICAgaGRjID0gbV9kYXRhLT5tX2hkYzsKKyAgICBIREMgaGRjID0gZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCktPm1faGRjOwogICAgIC8vIEZJWE1FOiBTaG91bGQgYSBiaXRtYXAgYmUg
Y3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFkb3cgaXMgc2V0PwogICAgIGlmICghaGRjIHx8IGlzSW5U
cmFuc3BhcmVuY3lMYXllcigpKSB7CiAgICAgICAgIGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKQEAg
LTEzNSwxNyArMTMzLDE3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRvd3NDb250ZXh0
KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhCiAgICAgICAgIHJldHVy
biBiaXRtYXBEQy5sZWFrKCk7CiAgICAgfQogCi0gICAgbV9kYXRhLT5mbHVzaCgpOwotICAgIG1f
ZGF0YS0+c2F2ZSgpOwotICAgIHJldHVybiBtX2RhdGEtPm1faGRjOworICAgIGRlcHJlY2F0ZWRQ
cml2YXRlQ29udGV4dCgpLT5mbHVzaCgpOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
LT5zYXZlKCk7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsK
IH0KIAogSERDIEdyYXBoaWNzQ29udGV4dDo6aGRjKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZGF0
YSkKKyAgICBpZiAoIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIHJldHVybiBtX2RhdGEtPm1faGRjOworICAgIHJldHVybiBkZXByZWNh
dGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiB9CiAKICNpZiBQTEFURk9STShXSU4pICYmICFV
U0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU5OWFmOTNmNDE5YjE5
NGM3NzZiOTFhMGEzYzc5YzBjYmMwYzQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0Q0cKKworI2VsaWYg
VVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaCIKKyNk
ZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dERpcmVjdDJECisKKyNlbGlm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCisjZGVmaW5l
IEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHRDYWlybworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCmluZGV4IGE4ZWUzNWM1Mjc3ODEyNzNmNDdm
YjVkMmY0YmNkZjg4YzQ0ZTA4YzQuLmFkOTU1NGMwNTBhZWUyZTEwZWMxNTM1OWViOGI0ODVkMzUw
Y2RhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtNzgsNyAr
NzgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoYwogICAgIGlmICghcGxhdGZvcm1Db250ZXh0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgYXV0byBjb250
ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4ocGxhdGZvcm1Db250ZXh0
LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNw
cAppbmRleCBmOGExMGQ1YzQzNmU3MDYwODk4NzA3YmE4YjY1NDY0MWNlMmJkZjU0Li41MzM4ZmZj
YzdiNTY1ZjQ4N2Q5ZTdjZmI4ZjI2NGY3ZWExMjk2OWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCkBAIC03Myw3ICs3Myw3
IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBibXAsIGNvbnN0
IEludFNpemUqIHNpemUpCiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZShibXBJbmZvLmJtQml0cywgYm1wSW5mby5ibVdpZHRoLCBibXBJbmZvLmJtSGVp
Z2h0LAogICAgICAgICA4LCBibXBJbmZvLmJtV2lkdGhCeXRlcywgc1JHQkNvbG9yU3BhY2VSZWYo
KSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0KSk7CiAgIAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjZ0NvbnRleHQuZ2V0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dENHIGdjKGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBGbG9hdFNp
emUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2lu
LmNwcAppbmRleCAyY2VjOTlkYzcyOWZlNjVlMDg1NGVlZTcyZGZjNGVkN2FmMDk1MjNjLi5jOWVi
MDBjNDgyNDFmNWJjYmY1YzVlMmQ4M2I5NDdjYjdjOTQ5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCkBAIC0y
Niw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CkBA
IC03NSw3ICs3NSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1B
UCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCiAgICAgY2Fpcm9fdCogdGFyZ2V0UmVmID0gY2Fp
cm9fY3JlYXRlKGltYWdlKTsKICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGdjKEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeSh0YXJnZXRSZWYpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyh0YXJnZXRSZWYp
OwogCiAgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXplKCk7CiAgICAg
aWYgKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGF0aERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9QYXRoRGlyZWN0MkQuY3BwCmluZGV4IGQ5NjIwMzAwYWJjZWJhNDk0Y2E2NjE1MWQwMDFlNTJm
MWM3ODk0NGIuLjkxMjlhMTdiNzc4YTI0ODBjZGYzYzBlYmZhMmQ2ZTcyNzFhNjA3OTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0
MkQuY3BwCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgc2NyYXRjaENv
bnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgc2Ny
YXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJl
bmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEIHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBzdHJva2VTdHlsZUFw
cGxpZXIoc2NyYXRjaENvbnRleHQpOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAgLTM0Miw3ICsz
NDIsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3Jh
dGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgm
c2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENv
bnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxlQXBwbGllcikK
ICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCmluZGV4IDczNTkzM2YxNzIwODViOWU2
NjkzYWQ0NGIyYWYxNjBiMzQwYzRmOTkuLjM2MTYwMmU1N2IyNGZiMTZjYmUyYTdhOTlmNmU1Yzgw
YTMzOWZhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1h
Z2VJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5t
bQpAQCAtOTQsNyArOTQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdl
KEltYWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbgogCiAgICAgUmV0YWlu
UHRyPFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyPiByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9j
VUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVNpemVd
KTsKICAgICBVSUltYWdlICppbWFnZUNvcHkgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlv
bnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewot
ICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0
KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dD
b250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VTaXplLmhlaWdodCk7
CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyBhZGp1c3RlZEltYWdlU2NhbGUsIC1hZGp1c3RlZElt
YWdlU2NhbGUgfSk7CiAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgRmxvYXRQb2lu
dCgpLCB7IG9yaWVudGF0aW9uIH0pOwpAQCAtMTM2LDcgKzEzNiw3IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwmIHVybCwgY29u
c3QgU3RyaW5nCiAKICAgICBhdXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3Jh
cGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemVd
KTsKICAgICBhdXRvIGltYWdlID0gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBo
aWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAg
ICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwog
ICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5kZWRSZWN0OjpS
YWRpaSg0KSksIENvbG9yOjp3aGl0ZSk7CkBAIC0yMDQsNyArMjA0LDcgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIFRleHRJbmRpY2F0b3JE
YXRhJiBpbmRpY2EKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlH
cmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6
ZSgpXSk7CiAgICAgcmV0dXJuIFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGlj
c0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgY29udGV4dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3Nh
cnksIGFuZCBzdWdnZXN0cyB0aGF0IHNvbWV3aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAg
ICAgIC8vIGRyYWcgaW5pdGlhdGlvbiBmbG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdy
YXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5o
ZWlnaHQoKSk7CkBAIC0yMzgsNyArMjM4LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib28KICAg
ICBhdXRvJiBpbWFnZSA9ICp0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKTsKICAgICBhdXRv
IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3Rh
bmNlKCkgaW5pdFdpdGhTaXplOmltYWdlLnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmZpbmFsSW1h
Z2UgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6WyZpbWFnZV0oVUlHcmFwaGljc0lt
YWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAg
IGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBGbG9hdFBvaW50KCkpOwogICAgIH1dOwogCkBAIC0y
NTIsNyArMjUyLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvciwgY29uc3QgRmxvYXRSZWN0JiBlbGVtZW4KIAogICAgIGF1dG8gcmVuZGVy
ID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBp
bml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmltYWdlID0gW3Jl
bmRlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpy
ZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQgeyByZW5k
ZXJlckNvbnRleHQuQ0dDb250ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQgeyByZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0IH07CiAgICAgICAgIGNvbnRleHQudHJhbnNs
YXRlKDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29udGV4dC5zY2Fs
ZSh7IDEsIC0xIH0pOwogICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChzd2F0Y2gsIGNv
bG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2Nv
Y29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJDb2NvYS5jcHAKaW5kZXggMDlmYWVlZWU5ZWFjYjUwMzJmMWE3OWQ3M2JhMDE4YTliNjU1YmQy
Yi4uNWVjMzhlNjQxYmQ2ZWQwM2FkMDUyNTYxZDA0YzljZGFmZGZiNDEyYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2UuaCIKICNpbmNs
dWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJXZWJSVENBdWRp
b01vZHVsZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9E
cmFnSW1hZ2VXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdp
bi5jcHAKaW5kZXggZDAyMmU3ZTE5MWRhYzgxNjM2ZDUyOTUxZDQwZDUzYjg4NzNmNTUwOS4uYWM2
ZTI0NGQwNDFlOWZlNmJmNjJmMWU2MTVhZjk5ZTZjZjI1MDJlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIK
ICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlN0cmlu
Z1RydW5jYXRvci5oIgpAQCAtMTg2LDcgKzE4Nyw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBpbkxhYmVsLCBU
CiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICA6OlNlbGVjdE9iamVjdCh3b3JraW5n
REMuZ2V0KCksIGltYWdlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChjb250
ZXh0UmVmKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChjb250ZXh0UmVmKTsKICAg
ICAvLyBPbiBNYWMgYWxwaGEgaXMgezAuNywgMC43LCAwLjcsIDAuOH0sIGhvd2V2ZXIgd2UgY2Fu
J3QgY29udHJvbCBhbHBoYQogICAgIC8vIGZvciBkcmFnIGltYWdlcyBvbiB3aW4sIHNvIHdlIHVz
ZSAxCiAgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENvbG9yID0gU1JHQkE8dWludDhfdD4g
eyAxNDAsIDE0MCwgMTQwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1l
bnVXaW4uY3BwCmluZGV4IDkzOWE3OWFlZjNiYmY4MjA3NjZiOWZlZjdhYjZiMTNhZjgzNDcyZTcu
LjI0OGUzZGMxZTM4MjEyODNhZTAzZGIyZTMyMmNmMTVmNmNmYmFiM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0V2luLmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5jbHVkZSAiSG9z
dFdpbmRvdy5oIgpAQCAtNjA5LDcgKzYxMCw3IEBAIHZvaWQgUG9wdXBNZW51V2luOjpwYWludChj
b25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNlbGVjdE9iamVj
dChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQobV9E
Qy5nZXQoKSk7CiAKICAgICAvLyBsaXN0UmVjdCBpcyB0aGUgZGFtYWdlUmVjdCB0cmFuc2xhdGVk
IGludG8gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBlbnRpcmUgbWVudSBsaXN0ICh3aGljaCBpcyBs
aXN0U2l6ZSAqIG1faXRlbUhlaWdodCBwaXhlbHMgdGFsbCkKICAgICBJbnRSZWN0IGxpc3RSZWN0
ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250
ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50
ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCBkYTk1MmJmNmIzY2ZhMmZiNmMwOWFmMGQyZDY5ZjQ2
M2Q3NmFlYzI2Li4xYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3NjdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIu
Y3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCw3ICsz
OSw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVudGZ1
bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQYWludEJlaGF2
aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAgICAgZnJhbWVW
aWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0
IGNoZWNrZXJDb250ZXh0KEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51bGxHcmFwaGljc0NvbnRleHQgY2hl
Y2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWludChjaGVja2Vy
Q29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkpOwogCiAgICAg
ZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRlbnRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmlu
ZGV4IDAyNTQyMjViYjMxMzhjMzgyYzM2OGIwOTQ4ZDY1YWU2ZmIwYjdjMGIuLjE0M2EzNTljYmFl
ODhlM2UzYzZiM2M2YTdjNzM1YmNmZmM1NWU0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNjkwLDEwICs2OTAsNyBAQCBz
dGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAgICBib3hTaGFkb3cgPSBib3hTaGFkb3ctPm5l
eHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hhZG93LT54KCksIGJveFNo
YWRvdy0+eSgpKTsKLSAgICBpZiAoIWJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygp
LCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsK
LSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwg
Ym94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoYm94
U2hhZG93LT5jb2xvcigpKSk7CisgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBi
b3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hT
aGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dS
YWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIH0KIAogSW50
ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNob29zZUludGVycG9sYXRp
b25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdlLCBjb25zdCB2
b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKQEAgLTI0MzksMTAgKzI0MzYsNyBA
QCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWludElu
Zm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgRmxvYXRQb2ludCBzbmFwcGVk
U2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9y
aWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVsKHNoYWRvd1Jl
Y3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAgRmxvYXRTaXpl
IHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4ZWxTbmFwcGVk
RmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGlmIChzaGFkb3ctPmlz
V2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFk
b3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc25hcHBlZFNo
YWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAgICBjb250
ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0Nv
bG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICAgICAgaWYgKGhhc0Jv
cmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBp
dCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMg
dGltZQpAQCAtMjU0MywxMSArMjUzNyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAg
ICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShleHRyYU9mZnNldCk7CiAgICAgICAgICAgICBzaGFk
b3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgICAgIGlmIChzaGFkb3ctPmlzV2Vi
a2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3co
c2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRv
d1JhZGl1cywgc2hhZG93Q29sb3IpOwotCisgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhz
aGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOwogICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShw
aXhlbFNuYXBwZWRPdXRlclJlY3QsIHBpeGVsU25hcHBlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAppbmRleCA0OWI3MmQxNGMzYmQ2NjI2MjFlNzZkNjdjYzY2ZWU1YTI1Yzc0
ZGZlLi4yOWFhMTkwNmNhZDJmZTliNDhmZmUyOWI0MjhiZjEzY2M2MDU3YzZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtNTEsNiAr
NTEsNyBAQAogI2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vZGVsLmgiCisjaW5jbHVkZSAiTnVsbEdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZUxvZ2dp
bmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgpAQCAtMTc4OSw3ICsxNzkw
LDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKCkKICAgICB9
OwogCiAgICAgYXV0byB1cGRhdGVFdmVudFJlZ2lvbkZvckxheWVyID0gWyZdKEdyYXBoaWNzTGF5
ZXImIGdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0
KG51bGxwdHIpOworICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250ZXh0KE51bGxH
cmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgICAg
IEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9SRUdJT04pCiAg
ICAgICAgIGlmIChyZW5kZXJlcigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxlUmVnaW9uKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWly
by5jcHAKaW5kZXggOWNlYTVmYTM0YzRhNmMwODdmZGUyOGMyNTJhMzFmMTU1OGRlNjFmZi4uMTYx
NzdjMDAwNzFlZTgyNmU4MDk2ZjNlZGY5YjgyYmI4Yzg1MGZmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0NhaXJvT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXMu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5o
PgogCkBAIC02MCw3ICs2MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNo
YXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBpbWFnZSA9IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogICAgIFJlZlB0cjxj
YWlyb190PiBiaXRtYXBDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGltYWdlLmdldCgp
KSk7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoYml0bWFwQ29udGV4dC5nZXQoKSkpOworICAgIHJl
dHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENhaXJvPihiaXRtYXBDb250ZXh0LmdldCgp
KTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCmluZGV4IDM2
ZGMyNGI4MmZkZWVjMTU1NTEwNDc2OTk0ZTg3ZGIxZDc2NjJkYTcuLjFkMDZmNDZjMmYzNDZiOTFj
NDgxNzJhMTI2ZTc2OTlmOWViNDE0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9T
aGFyZWFibGVCaXRtYXBDRy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgp
CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCksIDAsIG1fc2l6
ZS5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4dC5nZXQoKSwg
MSwgLTEpOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihiaXRtYXBD
b250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4o
Yml0bWFwQ29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFwOjpwYWludChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYgc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKaW5kZXggMDhmNmZiNTJjODBjMzdj
ZWRkMTZmZTA3MDJhNTRiYmI1ODhkN2VmMy4uY2QxNThmMGNiNjQ3NmJkMjQ4Zjk3YzAwNjk2NTli
NGYxYmY2NGUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJs
ZUJpdG1hcERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVh
YmxlQml0bWFwRGlyZWN0MkQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9ESUJQaXhlbERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3BlcmF0aW9ucy5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVk
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1
ZGUgPGQyZDFfMS5oPgpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBp
ZiAoIXN1cmZhY2VDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpjcmVhdGVGYWN0b3J5KHN1cmZhY2VDb250ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VV
bmlxdWU8R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+KHN1cmZhY2VDb250ZXh0LmdldCgpKTsKIH0K
IAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCmlu
ZGV4IGRjMGE3MGI4ODI0YWZkYzdlYzNkZDFmNjlmNGQ5YjUxOTQyOTI0ZjYuLjRmNzhiNWViNWNk
YjUxZjJlYmZjYWZmNjRlY2QxOWIxZTYzMGFkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKQEAgLTMyLDcgKzMyLDcgQEAK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9y
ZUJhY2tlbmRDYWlyb0ltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNp
bmNsdWRlIDxjYWlyby5oPgpAQCAtODQsNyArODQsNyBAQCB2b2lkIEJhY2tpbmdTdG9yZTo6aW5j
b3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVwZGF0ZUluZm8m
CiAgICAgLy8gUGFpbnQgYWxsIHVwZGF0ZSByZWN0cy4KICAgICBJbnRQb2ludCB1cGRhdGVSZWN0
TG9jYXRpb24gPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24oKTsKICAgICBS
ZWZQdHI8Y2Fpcm9fdD4gY2Fpcm9Db250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fYmFj
a2VuZC0+c3VyZmFjZSgpKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9Db250ZXh0LmdldCgp
KSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KGNhaXJvQ29udGV4
dC5nZXQoKSk7CiAKICAgICAvLyBXaGVuIG1fd2ViUGFnZVByb3h5LmRyYXdzQmFja2dyb3VuZCgp
IGlzIGZhbHNlLCBiaXRtYXAgY29udGFpbnMgdHJhbnNwYXJlbnQgcGFydHMgYXMgYSBiYWNrZ3Jv
dW5kIG9mIHRoZSB3ZWJwYWdlLgogICAgIC8vIEZvciBzdWNoIGNhc2UsIGJpdG1hcCBtdXN0IGJl
IGRyYXduIHVzaW5nIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5IHRvIG92ZXJ3cml0ZSB0aGUgZXhp
c3Rpbmcgc3VyZmFjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5n
Vmlldy5tbQppbmRleCBmMThiYThmMDFiMjZkZTNmZDNjZGZiMDI4MTI4NWNmMGQ0YTY2NjlmLi5k
MDNlNjQzNGIxYWIyZmJkNWU1NTQzMjk2OGIzZTlmNTY1OTJiYWM3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0zMCwxNSArMzAsMTYgQEAK
IAogI2ltcG9ydCAiQVBJRGF0YS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2ltcG9ydCAiUERG
S2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlByaW50SW5mby5oIgogI2ltcG9ydCAiU2hhcmVhYmxl
Qml0bWFwLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFF1YXJ0ei9RdWFy
dHouaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2FsRGVmYXVsdFN5
c3RlbUFwcGVhcmFuY2UuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKKyNpbXBvcnQgIlBE
RktpdFNvZnRMaW5rLmgiCisKIE5TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2luYWxUb3BQcmlu
dGluZ01hcmdpbktleSA9IEAiV2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iOwogTlNTdHJpbmcgKiBj
b25zdCBXZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmln
aW5hbEJvdHRvbU1hcmdpbiI7CiAKQEAgLTU1NSw3ICs1NTYsNyBAQCAtICh2b2lkKV9kcmF3UHJl
dmlldzooTlNSZWN0KW5zUmVjdAogCiAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVhYmxlQml0bWFw
PiBiaXRtYXAgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKIAotICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
IENHQ29udGV4dF0pOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogCiAgICAg
Yml0bWFwLT5wYWludChjb250ZXh0LCBfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKSwgV2ViQ29yZTo6SW50UG9pbnQobnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+Ym91bmRzKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURp
cmVjdDJELmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJl
Y3QyRC5jcHAKaW5kZXggYWJkYWE2ZWIyYzU3ZGUzZWU2NmMyYzNmZjE2NGEzMzRiMTI0MTVkOS4u
OTBiNDI0YWNlMjk4MzdkMDViOTcwNmQwMDQ4NWQ5NWY3ZTFlMmQwZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwCkBAIC0z
Miw3ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNrZW5kRGlyZWN0
MkRJbXBsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJE
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1
ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkM2QxMV8xLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAppbmRleCAzY2FjYjlhZWM2
NGM4OWE1MTIwODcwMDBkMjZhNTdlMDZlMTgxZTM0Li5lNGMxMWYzZWIwODYyOWY2MTNkMzFiODQ3
Mzk5MzNlMjkyMzFiMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4v
V2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dp
bi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJX
ZWJWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HRElVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdp
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRoZW1lLmg+CkBA
IC04NTIsNyArODUzLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCwgSERDIGhkYykKICAgICAgICAgOjpTZWxlY3RPYmplY3QobV9E
Qy5nZXQoKSwgbV9ibXAuZ2V0KCkpOwogICAgIH0KIAotICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0KG1fREMuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KG1fREMuZ2V0
KCkpOwogI2Vsc2UKICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVmZmVyOyAKICAg
ICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRvZihJRDNEMTFU
ZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIpKTsgCkBAIC04
NjcsNyArODY4LDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQoY29uc3QgSW50
UmVjdCYgZGFtYWdlUmVjdCwgSERDIGhkYykKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
IHBsYXRmb3JtQ29udGV4dChyZW5kZXJUYXJnZXQuZ2V0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4
dC5zZXREM0REZXZpY2UobV9kM2REZXZpY2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQo
JnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0
VHlwZTo6R1BVTWVtb3J5KTsKICNlbmRpZgogCiAgICAgSW50UmVjdCB0cmFuc2xhdGVkRGFtYWdl
UmVjdCA9IGRhbWFnZVJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5tbQppbmRleCAwNGE0MGRmMDJlNDc0NDhmNWI5OGM4OWRmNDg1Yjcw
NmYwYmUwMzdjLi5lNDdhNDRjYzQ3ZTk5MWRlZTk4ZjliNGEzNmM1YTJjZGY2ZjBkMDY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0K
QEAgLTM1LDcgKzM1LDYgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBERkFubm90
YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgogI2ltcG9ydCAiUERGQ29udGV4dE1lbnUuaCIKLSNp
bXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCiAjaW1wb3J0ICJQREZMYXllckNvbnRyb2xsZXJTUEku
aCIKICNpbXBvcnQgIlBERlBsdWdpbkFubm90YXRpb24uaCIKICNpbXBvcnQgIlBERlBsdWdpblBh
c3N3b3JkRmllbGQuaCIKQEAgLTcyLDcgKzcxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQm9keUVs
ZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSFRNTEZvcm1FbGVtZW50Lmg+CkBAIC0xMDYsNiArMTA1LDggQEAKICNpbXBvcnQgPHd0Zi9j
b2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCisj
aW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgorCiAjaWYgSEFWRShJTkNSRU1FTlRBTF9QREZfQVBJ
UykKIEBpbnRlcmZhY2UgUERGRG9jdW1lbnQgKCkKIC0oaW5zdGFuY2V0eXBlKWluaXRXaXRoUHJv
dmlkZXI6KENHRGF0YVByb3ZpZGVyUmVmKWRhdGFQcm92aWRlcjsKQEAgLTE5NDQsNyArMTk0NSw3
IEBAIHZvaWQgUERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4dChDQUxheWVy
ICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRlCiAgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFy
YW5jZSBsb2NhbEFwcGVhcmFuY2UocGFnZS0+dXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCiAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggMTYy
NTNjODg3MDczMDc3ODAwMGQ4NTNkNGRkZmQzMjI3OWQ4MTg5ZS4uZjdiZGI5NTcwNGRjNDU2MDIz
NTkyNjM4MWRmNjA0ZjAyODBkMDEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtNDIsNiArNDIsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvY3VzQ29u
dHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxVTGlzdEVsZW1lbnQuaD4KQEAgLTMxNyw3ICszMTgsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBXZWJQYWdlOjpwZGZTbmFwc2hvdEF0U2l6ZShJbnRSZWN0IHJlY3QsIEludFNpemUgYml0
bWFwU2l6ZQogCiAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShwZGZDb250ZXh0LmdldCgp
LCBkaWN0aW9uYXJ5KTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
IHsgcGRmQ29udGV4dC5nZXQoKSB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGlj
c0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
Y2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKDAsIC1i
aXRtYXBTaXplLmhlaWdodCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3Jh
cGhpY3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4IDg3MTZkZjQ5
YmQxOTJkMDEwNTExNmI2YmRiMGFiNjk2MzE4NzdiYjguLmU5OTQ1N2M3NDIzMjFiNTNlMWY2ZWE1
ZGM5MGRkZWE4NjUyM2ViODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTQzLDcgKzQzLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKICNpZiBVU0UoRElSRUNUMkQpCi0j
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxk
M2QxMV8xLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CmluZGV4IDBhNzZlNzI5ZmUwMzdiNTFhNzM1YTZkMjc3ZTZhNjM1MTc0MWM1YzMuLjk2ODJmMDkz
YWUwZDQ0Y2RlYzg2OTkxY2QwNDlmNzJmYmVlNzE3OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNzIsNiArMzcyLDExIEBACiAjaW5jbHVk
ZSAiV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLmgiCiAjZW5kaWYKIAorI2lmIFVTRShD
RykKKy8vIEZJWE1FOiBNb3ZlIHRoZSBDRy1zcGVjaWZpYyBQREYgcGFpbnRpbmcgY29kZSBvdXQg
b2YgV2ViUGFnZS5jcHAuCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgor
I2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTM3NSw3ICs1MzgwLDcgQEAgdm9pZCBXZWJQYWdlOjpk
cmF3UGFnZXNUb1BERkltcGwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIGNvbnN0IFByaW50SW5m
byYgcHJpbnQKICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBwYWdl
SW5mbyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
CiAgICAgICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQuZ2V0KCksIHBh
Z2VJbmZvLmdldCgpKTsKIAotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjdHgoY29u
dGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY3R4KGNvbnRl
eHQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsK
ICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1tX3ByaW50Q29udGV4dC0+cGFnZVJl
Y3QocGFnZSkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIG1fcHJpbnRDb250ZXh0LT5zcG9v
bFBhZ2UoY3R4LCBwYWdlLCBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSkud2lkdGgoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJp
bnRPcGVyYXRpb25HdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCBkZTFmMDZkZDhhZGE4ZmRmZmM1YTA5ODcz
OWM0YWVhYjliYjMzYTg1Li4zOTliMWU4MGEzZDg0ZDFkMGQzMDA5NmFjNDQ2NTBhYzk4ZjU4MTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJp
bnRPcGVyYXRpb25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWly
by5oPgpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgV2ViUHJpbnRPcGVyYXRpb25HdGs6OnJlbmRl
clBhZ2UoaW50IHBhZ2VOdW1iZXIpCiAgICAgcHJlcGFyZUNvbnRleHRUb0RyYXcoKTsKIAogICAg
IGRvdWJsZSBwYWdlV2lkdGggPSBndGtfcGFnZV9zZXR1cF9nZXRfcGFnZV93aWR0aChtX3BhZ2VT
ZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCkgKiBtX3hEUEk7Ci0gICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNyZWF0ZUZhY3RvcnkobV9jYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQobV9jYWlyb0NvbnRleHQuZ2V0KCkp
OwogICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoZ3JhcGhpY3NDb250ZXh0LCBwYWdlTnVt
YmVyLCBwYWdlV2lkdGggLyBtX3NjYWxlKTsKIAogICAgIGNhaXJvX3Jlc3RvcmUobV9jYWlyb0Nv
bnRleHQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29y
ZVN0YXRpc3RpY3MubW0KaW5kZXggZDU0MWM0YzA0ZjJkNzVkMDZiZWUwODBlYmNmZTY2YjBhNDVm
YmVmNi4uOTI4YWU3ZDUxZTNmMGI3ZDkxMDIwYzdkYTI4OGVkZTI0NWMzODU5NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC0z
OSw3ICszOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0dDQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HbHlwaFBhZ2UuaD4KLSNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJD
b3JlL1BhZ2VDb25zb2xlQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50Q29udGV4dC5o
PgpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKHZvaWQpcHJpbnRUb0NHQ29udGV4dDooQ0dDb250ZXh0
UmVmKWNnQ29udGV4dCBwYWdlV2lkdGg6KGZsb2F0KXBhZ2VXaWR0aEluUGl4CiAgICAgaWYgKCFj
b3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQoY2dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY2dDb250ZXh0KTsKICAgICBQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNXaXRoQm91bmRh
cmllcygqY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6ZShwYWdlV2lkdGhJblBp
eGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCmluZGV4IDJiYTAwNmRkM2U3
YjJhZmM1MGVmZjI4NDUzMjBkOTY1MDViYTcxYmEuLjc4MzI1NjE5YzFhYzc3NDRlODhmZDQ5MjUz
NmM5NTdhMDQyNDRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2Mv
V2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlz
Yy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW1wb3J0IDxX
ZWJDb3JlL0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRlLmg+Ci0jaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJhcy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgpAQCAtNzgsNyArNzgsNyBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9pbnQ6KE5TUG9p
bnQpcG9pbnQgZm9udDooTlNGb250ICopZm9udCB0ZXh0Q29sb3I6KE5TQ29sb3IgKgogCiAgICAg
ICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdOwogICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gW25zQ29udGV4
dCBDR0NvbnRleHRdOwotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0IHsg
Y2dDb250ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dCB7
IGNnQ29udGV4dCB9OwogCiAgICAgICAgIC8vIFdlYkNvcmUgcmVxdWlyZXMgYSBmbGlwcGVkIGdy
YXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGJvb2wgZmxpcHBlZCA9IFtuc0NvbnRleHQgaXNGbGlw
cGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3BlY3Rvci9X
ZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkluc3Bl
Y3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQppbmRleCBkMzk3M2UyOTQ0NTllY2YxZGJkZWY0
NDllZjJjZmQyY2FjYjhlZDM1Li45NTBhZThlMDBkMzBhNDUyMDlmOWFkZGEzYzJiMzNmMTMxMDAy
MmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2Vi
Tm9kZUhpZ2hsaWdodFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViSW5z
cGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCkBAIC0yOSw3ICsyOSw3IEBACiAjaW1wb3J0
ICJXZWJOb2RlSGlnaGxpZ2h0Vmlldy5oIgogI2ltcG9ydCAiV2ViTm9kZUhpZ2hsaWdodC5oIgog
Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVy
Lmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogCkBAIC05OCw3ICs5OCw3IEBAIC0gKHZv
aWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAKICAgICAgICAgQVNTRVJUKFtbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwogCi0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4
dF0pOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOwogICAgICAgICBbX3dlYk5vZGVIaWdobGln
aHQgaW5zcGVjdG9yQ29udHJvbGxlcl0tPmRyYXdIaWdobGlnaHQoY29udGV4dCk7CiAgICAgICAg
IFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZjM1ZDdiZDVhMjM1
MWIyYjAxYjY4YmIxZTIxNmY3NDU3ZTQxOGE3MS4uOTViZGEzOTBjYTY5YmE2Yjk2MjBmNTFiZWU2
OTZiMjEyMzlhYjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCkBAIC04MSw3ICs4MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lTG9hZGVyU3Rh
dGVNYWNoaW5lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNv
cmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxOYW1lcy5o
PgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtNjEzLDcgKzYxMyw3IEBAIC0g
KHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c09ubHk6KEJPT0wpY29udGVudHNP
bmx5CiAjZWxzZQogICAgIENHQ29udGV4dFJlZiBjdHggPSBXS0dldEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQoKTsKICNlbmRpZgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGN0
eCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChjdHgpOwogCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNl
bGYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2NyZWVuVmlkZW9D
b250cm9sbGVyLmNwcAppbmRleCA1MTlhNTczNmQyYTM1MGQ3Mjc4Njc2NWZiMThmY2YzMzljNWVj
NjhlLi5hZDY2MDdlNDUxMGU1OWY1MThmZWVmMWQ4Y2M2MzY1NmE4NGVkNDQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNw
cApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2NhZGUuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0ZvbnRTZWxlY3Rvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dFJ1bi5oPgpAQCAtNDkwLDcgKzQ5MSw3IEBAIHZvaWQgRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlcjo6ZHJhdygpCiAgICAgYXV0byBiaXRtYXBEQyA9IGFkb3B0R0RJ
T2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX2h1ZFdpbmRvdykpKTsKICAgICBI
R0RJT0JKIG9sZEJpdG1hcCA9IFNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwgbV9iaXRtYXAu
Z2V0KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYml0bWFwREMuZ2V0KCksIHRy
dWUpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGJpdG1hcERDLmdldCgpLCB0cnVl
KTsKIAogICAgIGNvbnRleHQuc2F2ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5j
cHAKaW5kZXggMmY1MTEwMzEzNjE5NDU3Y2RhYzNiMzFjYTViZDUzNzZhYmNiMjE3Ny4uOGRhOTE5
NDgzYjBkYWE3MTBkNjIzNjJlOWIzYTA0NjlkNTAyYmRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYkZyYW1lLmNwcApAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVX
aW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dESU9iamVjdENvdW50ZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5oPgpAQCAtMzIxLDcgKzMyMiw3IEBAIEhSRVNVTFQgV2ViRnJh
bWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KFJFQ1QgcmVjdCwgX0luXyBIREMgZGV2aWNl
Q29udGV4dCkKICAgICAvLyBXZSBjYW4ndCBwYWludCB3aXRoIGEgbGF5b3V0IHN0aWxsIHBlbmRp
bmcuCiAgICAgdmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGRldmljZUNvbnRleHQpOworICAgIEdyYXBoaWNzQ29u
dGV4dFdpbiBnYyhkZXZpY2VDb250ZXh0KTsKICAgICBnYy5zZXRTaG91bGRJbmNsdWRlQ2hpbGRX
aW5kb3dzKHRydWUpOwogICAgIGdjLnNhdmUoKTsKICAgICBMT05HIHdpZHRoID0gcmVjdC5yaWdo
dCAtIHJlY3QubGVmdDsKQEAgLTM1Miw3ICszNTMsNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpwYWlu
dFNjcm9sbFZpZXdSZWN0VG9Db250ZXh0QXRQb2ludChSRUNUIHJlY3QsIFBPSU5UIHB0LCBfSW5f
CiAgICAgLy8gV2UgY2FuJ3QgcGFpbnQgd2l0aCBhIGxheW91dCBzdGlsbCBwZW5kaW5nLgogICAg
IHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBnYyhkZXZpY2VDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4g
Z2MoZGV2aWNlQ29udGV4dCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh0
cnVlKTsKICAgICBnYy5zYXZlKCk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QocmVjdCk7CkBAIC0x
ODA4LDcgKzE4MDksNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpzcG9vbFBhZ2VzKEhEQyBwcmludERD
LCBVSU5UIHN0YXJ0UGFnZSwgVUlOVCBlbmRQYWdlLCB2b2lkKiBjdAogICAgIGZsb2F0IGhlYWRl
ckhlaWdodCA9IDAsIGZvb3RlckhlaWdodCA9IDA7CiAgICAgaGVhZGVyQW5kRm9vdGVySGVpZ2h0
cygmaGVhZGVySGVpZ2h0LCAmZm9vdGVySGVpZ2h0KTsKICNpZiBVU0UoQ0cpIHx8IFVTRShDQUlS
TykKLSAgICBHcmFwaGljc0NvbnRleHQgc3Bvb2xDdHgocGN0eCk7CisgICAgR3JhcGhpY3NDb250
ZXh0V2luIHNwb29sQ3R4KHBjdHgpOwogICAgIHNwb29sQ3R4LnNldFNob3VsZEluY2x1ZGVDaGls
ZFdpbmRvd3ModHJ1ZSk7CiAKICAgICBmb3IgKFVJTlQgaWkgPSBzdGFydFBhZ2U7IGlpIDwgZW5k
UGFnZTsgaWkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYk5vZGVI
aWdobGlnaHQuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5j
cHAKaW5kZXggMDdhMmY2MDRmMzk3YTJhNThiMmQ3NzUxYzQ0ZWE5MjE5NDMxODczMC4uNDhlOWQx
YThkNzY2NzI1YjU3OWMzNDExYzNlY2Q0NWI2ZGJmNGNmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlLmg+
CkBAIC0xNTcsNyArMTU4LDcgQEAgdm9pZCBXZWJOb2RlSGlnaGxpZ2h0Ojp1cGRhdGUoKQogCiAg
ICAgOjpTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KGhkYy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRl
eHQoaGRjLmdldCgpKTsKICAgICBjb250ZXh0LnNjYWxlKG1faW5zcGVjdGVkV2ViVmlldy0+cGFn
ZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBtX2luc3BlY3RlZFdlYlZpZXctPnBhZ2Uo
KS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYzExYWM5ZDk3ZGJhZmUyYTNmMjg0NzdjY2Uw
NDQxZDliOTc3MDM2MC4uN2UxN2Y3MWQxNDJjMTZkYTUzZmU3MjY2ZjQ0Yzg4OWNkNDM4MmUyZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTExNiw2ICsxMTYsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9HZW9sb2NhdGlvbkVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvSFRNTE5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVmlkZW9FbGVtZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KQEAgLTEyNTAsNyArMTI1MSw3IEBAIHZvaWQg
V2ViVmlldzo6cGFpbnRXaXRoRGlyZWN0MkQoKQogCiAgICAgUkVDVCBjbGllbnRSZWN0ID0ge307
CiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KG1fcmVuZGVyVGFy
Z2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoJnBsYXRmb3JtQ29udGV4dCwgR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAg
ICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0
OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIAogICAgIHsKICAgICAg
ICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3MoV0VCS0lUX0RSQVdJTkcsIF9fTElORV9fKTsKQEAg
LTE0MDcsNyArMTQwOCw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2luZ1N0b3JlKEZy
YW1lVmlldyogZnJhbWVWaWV3LCBIREMgYml0bWFwREMsIGNvbnN0IEluCiAgICAgbV9iYWNraW5n
U3RvcmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwogI2VuZGlmCiAKLSAgICBHcmFwaGljc0NvbnRl
eHQgZ2MoYml0bWFwREMsIG1fdHJhbnNwYXJlbnQpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBn
YyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxk
V2luZG93cyh3aW5kb3dzVG9QYWludCA9PSBQYWludFdlYlZpZXdBbmRDaGlsZHJlbik7CiAgICAg
Z2Muc2F2ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNhMDhhNDQ0YzE4ODcxMzdhMDhmY2E3NTFl
YTJjZDZkOWM1MTc4ZTkuLjQyMWRhOWY1MzI4MWVlMmVhZGQyOTI2OTc3MzMyMGViYTZhYzU1MjUg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMS0wNS0yNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1QpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlz
dFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3Bs
YXlMaXN0VGVzdHNDRy5jcHAKaW5kZXggODdhMzZhY2ZlNmExMDBjYzMyM2UyNDg5N2ZjZTM4MDNm
MjM0YTc3OC4uYTU5OGQ1NGEyNzUyOTU4YzQyZTRlMmI3OWU1MzM3YzU3YjE3NGI0NiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVz
dHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3Bs
YXlMaXN0VGVzdHNDRy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYWRpZW50Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRDRy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKQEAgLTQ5LDcgKzUwLDcgQEAgVEVTVChEaXNwbGF5TGlzdFRlc3RzLCBS
ZXBsYXlXaXRoTWlzc2luZ1Jlc291cmNlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gRGVzdGlu
YXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQs
IDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UucGxhdGZvcm1Db2xvclNwYWNlKCksIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250
ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7
IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAKQEAgLTExMyw3ICsxMTQs
NyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIE91dE9mTGluZUl0ZW1EZWNvZGluZ0ZhaWx1cmUp
CiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhO
YW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQs
IDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0
LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQo
KSB9OwogCiAgICAgRGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0OwogICAgIFdyaXRpbmdDbGllbnQg
d3JpdGVyOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgSW5saW5l
SXRlbVZhbGlkYXRpb25GYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0gYWRvcHRDRihD
R0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwogICAgIGF1dG8g
Y2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0ciwgY29udGV4
dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xvclNwYWNlLmdl
dCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29udGV4dENHIGNv
bnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gcnVuVGVzdFdpdGhJbnZhbGlk
SWRlbnRpZmllciA9IFsmXShGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgewogICAgICAgICBF
WFBFQ1RfRkFMU0UoaWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>
<flag name="review"
          id="450923"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="450921"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429683</attachid>
            <date>2021-05-25 12:59:33 -0700</date>
            <delta_ts>2021-05-25 13:03:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525125932.patch</filename>
            <type>text/plain</type>
            <size>427658</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmNDJkMWM1OWUwNWM4
MmEzYWIxNGZkZDBlOGQ3M2Y0OWFhMzVkNS4uZDk0YjNiYTMwMzJmYzAwNjEyMzcxOThiYmFkODI1
OThmOTIzMjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxNSBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgSW4g
cHJlcGFyYXRpb24gZm9yIGZ1dHVyZSBwYXRjaGVzIHdoaWNoIGludHJvZHVjZSBuZXcga2luZHMg
b2YgR3JhcGhpY3NDb250ZXh0cywKKyAgICAgICAgdmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQs
IG1vdmluZyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgaW50byBzdWJjbGFzc2VzCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dHtDRyxDYWlybyxEaXJlY3QyRH0sIE51bGxHcmFwaGljc0NvbnRleHQs
IERpc3BsYXlMaXN0OjpSZWNvcmRlciwKKyAgICAgICAgYW5kIE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0SW1wbCBkaXNzb2x2ZXMgYXdh
eTsgcGxhdGZvcm0gY29udGV4dHMgdGhhdCB3ZXJlCisgICAgICAgIHVubmVjZXNzYXJpbHkgaW1w
bGVtZW50ZWQgYm90aCBhcyBgR3JhcGhpY3NDb250ZXh0YCBhbmQgYXMgYSBzdWJjbGFzcworICAg
ICAgICBvZiBHcmFwaGljc0NvbnRleHRJbXBsIChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gYW5k
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCkKKyAgICAgICAgYXJlIGZvbGRlZCBpbnRvIHRo
ZWlyIEdyYXBoaWNzQ29udGV4dCBzdWJjbGFzcy4KKworICAgICAgICBgcGFpbnRpbmdEaXNhYmxl
ZCgpYCBpcyBubyBsb25nZXIgcmVsZXZhbnQgaW4gR3JhcGhpY3NDb250ZXh0IGltcGxlbWVudGF0
aW9ucywKKyAgICAgICAgc28gd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gY2hlY2sgaXQgZXZlcnl3aGVy
ZTsgTnVsbEdyYXBoaWNzQ29udGV4dCBvdmVycmlkZXMKKyAgICAgICAgZXZlcnl0aGluZyB3aXRo
IGFuIGVtcHR5IGltcGxlbWVudGF0aW9uLiBXZSBrZWVwIGBwYWludGluZ0Rpc2FibGVkKClgIGZv
cgorICAgICAgICB1c2UgaW4gY29kZSBvdXRzaWRlIG9mIEdyYXBoaWNzQ29udGV4dCwgd2hlcmUg
aXQganVzdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4KKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBhbmQgdGhlIG90aGVycy4KKworICAgICAgICBBbHNvLCBhIGZldyBiaXRzIG9mIGNsZWFudXAg
dG8gbWFrZSB0aGlzIGVhc2llcjoKKworICAgICAgICAtIExlZ2FjeSBzaGFkb3cgcmFkaXVzIGJl
aGF2aW9yIGJlY29tZXMgYSBwYXJhbWV0ZXIgdG8gc2V0U2hhZG93IGluc3RlYWQgb2YgYSBzZXBh
cmF0ZSBtZXRob2QuCisgICAgICAgIC0gY2FudmFzQ2xpcCgpLCB3aGljaCBoYXNuJ3QgZG9uZSBh
bnl0aGluZyBkaWZmZXJlbnQgdGhhbiBjbGlwKCkgc2luY2UgU2tpYSwgaXMgcmVtb3ZlZC4KKyAg
ICAgICAgLSBHcmFwaGljc0NvbnRleHQgZ2FpbnMgcmVuZGVyaW5nTW9kZSgpIGluIHBsYWNlIG9m
IGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkuCisgICAgICAgIC0gU3ViY2xhc3NlcyBvdmVycmlkZSB1
cGRhdGVTdGF0ZSgpIHRvIHJlc3BvbmQgdG8gR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMs
CisgICAgICAgICAgYXMgd2FzIGFscmVhZHkgZG9uZSBmb3IgR3JhcGhpY3NDb250ZXh0SW1wbCwg
dG8ga2VlcCBzdWJjbGFzc2luZyBzaW1wbGUuCisgICAgICAgIC0gYnVpbGRlclN0YXRlKCksIHdo
aWNoIHdhcyB1bnVzZWQsIGlzIHJlbW92ZWQuCisgICAgICAgIC0gZHJhd1BhdGgoKSBpcyBpbnRy
b2R1Y2VkIG9uIGFsbCBwbGF0Zm9ybXMsIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRo
YXQganVzdCBmaWxscyBhbmQgc3Ryb2tlcy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6Cisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFp
bnRlcjo6cGFpbnRCb3hTaGFkb3cgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNBY2NlbGVyYXRlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVk
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1l
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVjdCk6CisgICAgICAgICog
cGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0v
U291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2Nv
YS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hh
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1
bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1BsYXRm
b3JtQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRT
aG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0VGV4dERyYXdpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJhbmNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmlj
ZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0lu
dGVybmFsTGlua3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGVyZm9ybWluZ1BhaW50SW52YWxp
ZGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6aW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3RoRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
b21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1NoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5U
cmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVS
TEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5h
dGlvbkZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGREZXN0
aW5hdGlvbkF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltcGwpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6Cisg
ICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5Q2FsbGJh
Y2spOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdSZXBhaW50Q291
bnRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tp
bmdMYXllcldpbi5jcHA6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxh
eUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86On5HcmFwaGljc0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2F2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
c3Ryb2tlQm91bmRpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9r
ZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb3JlSW50ZXJwb2xhdGlvblF1YWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2dJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpjZ1RleHREcmF3aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0dGVybkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91
bmRlZFJlY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0Rldmlj
ZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVz
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0SXNDQUxheWVy
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aXNDQUxheWVy
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0
SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydEludGVycG9sYXRpb25RdWFsaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpp
c0FjY2VsZXJhdGVkQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3Ro
Rm9udHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUFscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxF
bGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1TdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBv
aW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXR0ZXJuQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Rm9jdXNSaW5nVG9Db250ZXh0
QXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFj
ZTo6ZW5zdXJlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZWNv
cmRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjph
cHBseSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OlJlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJTaGFkb3cp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpnZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIubW06CisgICAgICAgICgtW1dlYkxheWVyIGRyYXdJbkNvbnRleHQ6XSk6Cisg
ICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmdldENUTSBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxl
dGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgp
OiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXBCb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChOaWNvc2lhOjpQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6
OkZvclBhaW50aW5nKToKKyAgICAgICAgKE5pY29zaWE6OlBhaW50aW5nQ29udGV4dENhaXJvOjpG
b3JSZWNvcmRpbmc6OkZvclJlY29yZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHREaXJlY3QyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzYXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VX
aW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd1dpbmRvd3NCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJy
dXNoV2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVz
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0
dGVybkZpbGxCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6YmVnaW5EcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
dHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBv
cnRzVHJhbnNwYXJlbmN5TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFt
ZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bs
YXRmb3JtSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhH
bG9iYWxBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNvbGlkU3Ryb2tlQnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpzb2xpZEZpbGxCcnVzaCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5TdHJva2VCcnVzaCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxs
QnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpiZWdpbkRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmREcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Zmx1c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
UGxhdGZvcm1QYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybVN0cm9rZVN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVzRm9yVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFVSTEZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5n
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRp
YWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURl
dmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRvd3NCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmhkYyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bh
dGhEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW06CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250
ZW50ZnVsUGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24pOgorCiAyMDIxLTA1LTI0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2ggZnJvbSBX
VEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYzExOWRjYmUyMzI2MWUx
NGQyZjA4ZmJlMjA4ZmJlMjcwNDgzYzUxNC4uYjYzYWU1YjI2YTk4MTM2ZGJkNzEzZjZkOGMxY2Ux
NWMyMTliZTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMS0wNS0yNSAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdy
YXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
ICogU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC93
aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3Jl
OjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50aW5n
Vmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3Ol0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwOgorICAgICAgICAq
IFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBhaW50
Q29udHJvbEZvckxheWVySW5Db250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZGZTbmFw
c2hvdEF0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRy
YXdQYWdlc1RvUERGSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
cmludE9wZXJhdGlvbkd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9u
R3RrOjpyZW5kZXJQYWdlKToKKwogMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlv
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZmQ2MDkyNTQ0YmIyNTVhMTQwMGU5
ZDliNDVhZWEwYTlhZjQ4NzYzZC4uMjljZDRlNDQ2YjBiOThmMzA2NTNkYWIxNjZmYTEzYWVlNDk2
MDc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIx
LTA1LTI1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAg
IFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAg
ICgtW1dlYkZyYW1lIHByaW50VG9DR0NvbnRleHQ6cGFnZVdpZHRoOnBhZ2VIZWlnaHQ6XSk6Cisg
ICAgICAgICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbToKKyAgICAgICAgKC1bTlNTdHJp
bmcgX3dlYl9kcmF3QXRQb2ludDpmb250OnRleHRDb2xvcjpdKToKKyAgICAgICAgKiBXZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW06CisgICAgICAgICgtW1dlYk5vZGVIaWdobGln
aHRWaWV3IGRyYXdSZWN0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIF9kcmF3UmVjdDpjb250ZW50c09ubHk6XSk6CisKIDIwMjEtMDUtMjQg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3Jt
IGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDQ1MDIyMzkzMDE4NmZmNTkyMzMzZGQ3ZDgyM2E2YTFm
ZDA5MDI2NjIuLmExM2NiMDY1YTkzNGIwMjUzZjlhN2MwODA4YWVhZDgzMTgyZmVkZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OmRyYXcpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6CisgICAgICAgIChX
ZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOgorICAgICAgICAo
V2ViRnJhbWU6OnNwb29sUGFnZXMpOgorICAgICAgICAqIFdlYk5vZGVIaWdobGlnaHQuY3BwOgor
ICAgICAgICAoV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKToKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDoKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKToKKyAgICAgICAgKFdlYlZp
ZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRM
aXRlcmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBlZjg1NmJjYTkxNGJhODRmMmI0NjZhNGQ3ODk2
ZjU3MjA5Y2JmMzljLi5jZWNmYjU1OGMyNmY0MjhhYjI1MWJjOGJjMGY4YTgyYWYwNjBmOWJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKQEAgLTEyMzksNyArMTIzOSw2IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTEyODYs
NiArMTI4NSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhVXNhZ2VJbmZvLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
T3BlbkdMU2hpbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUZUVy5jbWFrZQppbmRleCA0Y2MzOTE5OTMxNTQ3M2Q5YWQzMTcyYjZhYWMxYjU5YmE4YmYxOTFj
Li44NjdkMjUzNjEzMDdmYzllZDAxMTZjN2MxMWE3ODBlNDc2ZjdkZThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZQpAQCAtNDMsNyArNDMsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApAQCAt
NzEsNyArNzAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29u
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5jcHAKQEAgLTE4OSw3ICsxODcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IGQwODMwOTk4NGZhZjE1ZWFjNjY5NGVjNjA0ZjNlNDU5ZmVmOTc1MjQu
LmIyMjBhZjIwYmQzYjk1YTRlNzlmMTEzZjI4ZDZkMDgwZDBlMGNiNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCkBAIC0xMTQsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29u
dHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVy
Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3QuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNWM3NWRmNzkxZDcxYmQ2NzM3NDRmYjNmMDQ4MzZiNzcyYWM5OWQ5Li5lYWFmYjllMGIz
NmJkMzBmN2Q4MTc4OTYyZWY1ZjMwMDdkM2M0Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTk4Myw3
ICsxOTgzLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJV
cGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDdmMGZkZjQyOTI4NzU0YTlmNGYyN2FiNzNlOGNhYWNiZDU4MzhlZmQu
LjUxYmViMDczZTEyNWZlNWY4MDQwNzQ1NmU5ZDc0ZDFlMzVmN2MxYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg2MSw3ICs4
NjEsNyBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyogTWVkaWFLZXlzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJGNzMzMURCRkRD
MEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQkyRDlCRjc0NzFEQkZEQzQ5MDA3
QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMwRjAwN0E3RDk5IC8qIE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMxNEZGMUNCRjAwQkEwRkY3IC8q
IGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGluZWFyU1JHQi5pY2MgKi87IH07
Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAwMTIzRjFGQUQ4
N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAv
KiBOdWxsR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYx
MDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJG
RTk3MDBDRkNCQUIgLyogTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEQzhEMzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0
N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENv
bXBvc2l0aW9uVW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTYwODgsOCArNjA4OCw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBN
ZW51Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUND
RDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFy
Y2hQb3B1cE1lbnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIz
RjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjAzQzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzI5LDYg
KzczMjcsNyBAQAogCQkyRDlCRjc0MDFEQkZEQzBGMDA3QTdEOTkgLyogTmF2aWdhdG9yRU1FLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvckVNRS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUJGNzQxMURCRkRDMEYwMDdBN0Q5OSAv
KiBOYXZpZ2F0b3JFTUUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2aWdh
dG9yRU1FLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUYwRTEyMTRGRjFDQkYw
MEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBsaW5lYXJTUkdCLmljYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRBMzk3RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFw
aGljc0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTnVsbEdyYXBo
aWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREFBRTMyQzE5RENB
RjYwMDBFMDAyRDIgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJEMTlEQ0FGNjAwMEUwMDJEMiAvKiBNb2NrUGFn
ZU92ZXJsYXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1Bh
Z2VPdmVybGF5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUYzNDNB
MUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50UHJvcGVydHlNYXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwMTUsOCArMjcwMTQsNiBAQAogCQkJCTdDMzMwQTAx
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLywKIAkJ
CQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKLQkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgKi8sCi0JCQkJMEYwMDEyM0YxRkFEODdENjAwNTMx
RDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMjcwOTcsNiArMjcwOTQsNyBAQAogCQkJ
CTMxNEJFM0E1MUIzMTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCAq
LywKIAkJCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovLAog
CQkJCTU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAorCQkJCTJE
QTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJ
QjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguY3BwICovLAogCQkJCUIyNzUzNTUzMEIw
NTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggKi8sCiAJCQkJQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkw
IC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgKi8sCkBAIC0zMjMwMCw3ICszMjI5OCw2IEBACiAJ
CQkJMUNFOEQxMjcyNjE4NUMwRTAwRkMzQUVGIC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlcklkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDM3N0Q1NzI1NTFDOUM2MDA4
MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMzRTYy
NDMyNjU5NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUNFOEQxMkUyNjE4NjFDNDAwRkMzQUVGIC8qIERpc3BsYXlMaXN0SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjcwNSw3ICszMjcw
Miw2IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1
MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFw
aGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBF
NDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNB
LmggaW4gSGVhZGVycyAqLywKQEAgLTM0MzY2LDYgKzM0MzYyLDcgQEAKIAkJCQkxQTU2OUQxMTBE
N0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
OTI3RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDODEyNTFGMTJEMDAzRUYyNjkgLyogTnVt
YmVySW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxMjBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTQwRDdFMkI4MjAw
N0MzOTgzIC8qIG9iamNfaGVhZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTM4LDYgKzM0NTM1
LDcgQEAKIAkJCQk0OTlCM0VDNTEyOENDQzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1D
QUxheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDM0U2MjQz
MjY1OTc5MTgwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExNDk3ODcxMUFCQUYzQTUwMENFRjdFNCAvKiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNUM3NjJCMTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjYwMUVCRjE0QjNCOUFEMDAxMkMwRkUgLyogUGxh
dGZvcm1FdmVudEZhY3RvcnlJT1MuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAK
aW5kZXggMDA5NzlkMDA5Yjg1NTYzZTUyN2Y4MjgxZmU3MmE5ZDE3OTkzMGFlMy4uZDQ2OGZiYzBm
NzZhYjBiMmRiMjIyYWQ2MGFjY2RlNGM2NjVkZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBA
IC0xMjk4LDEwICsxMjk4LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hT
aGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgYXV0
byBzaGFkb3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCkgKyBzaGFkb3dP
ZmZzZXQ7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFkb3dSZWN0T3Jp
Z2luIC0gYWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICBpZiAo
c2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRMZWdhY3lTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93LmNvbG9yKCkpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRT
aGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCks
IHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDog
U2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1
cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNz
YXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDEy
LDExICsxNDA5LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3co
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zm
c2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIGlmIChzaGFkb3cuaXNXZWJraXRCb3hTaGFk
b3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExlZ2FjeVNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLQorICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFkb3dDYXN0aW5nUmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKaW5kZXggNGY0NmY2NTkwOTU5YTFlNGNkZGNkY2MzNzUyODA1MTZkNDJjYTFkMS4uZTdj
MDI4NWY3NTU0NTQ4MDNiMTQwYzkyMGJkNGIyYWZkZmU2MWY0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UoKS5leGlzdGluZ0Ry
YXdpbmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aXNBY2NlbGVy
YXRlZENvbnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5yZW5kZXJpbmdN
b2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQogICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1
bGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgYy0+Y2FudmFz
Q2xpcChwYXRoLCB0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CisgICAgYy0+Y2xpcFBhdGgocGF0
aCwgdG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmJlZ2luQ29tcG9zaXRlTGF5ZXIoKQpAQCAtMTIxMiw3ICsxMjEyLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgd2lkdGgsIGZsb2EKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewog
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAg
Y29udGV4dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7CisgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQog
ICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkg
ewpAQCAtMTM3OSw5ICsxMzc5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAg
ZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9h
dCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0
TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1
ciwgc3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Is
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldExl
Z2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAg
ICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTIwMzAsNyArMjAzMCw3
IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFz
UGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51
bGwoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1
dG8gcmVuZGVyaW5nTW9kZSA9ICFkcmF3aW5nQ29udGV4dCgpIHx8IGRyYXdpbmdDb250ZXh0KCkt
PmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gZHJh
d2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxl
bWVudC5jcmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmlu
Z01vZGUsIGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDczLDcgKzI0NzMsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGZsbwogCiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0Owog
Ci0gICAgICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRp
dXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAK
ICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDNmZjNjNjk5ZmVm
M2Y0NmNlNGZjN2U5NTZlMzNhZDM2MGFmYTczZWMuLmQzYzllZDMyYzc3ZjUwNWIwYzhlYmQzMjUz
ZTZkMDQzNTlkNjYxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTY5LDYgKzY5
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKQEAgLTQxODQsMTIgKzQxODUs
MTIgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cygpCiAgICAgICAgIHBhZ2Ut
PnNldElzQ291bnRpbmdSZWxldmFudFJlcGFpbnRlZE9iamVjdHMoaXNDdXJyZW50bHlDb3VudGlu
Z1JlbGV2YW50UmVwYWludGVkT2JqZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQordm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKIHsKICAgICBpZiAobmVlZHNMYXlv
dXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxh
dGZvcm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVD
b250ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50
UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00NzM5LDcgKzQ3NDAsNyBA
QCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQg
d2l0aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChHcmFw
aGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgTnVsbEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGlj
X2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAs
IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xk
VG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZm
OWEwZi4uZjhlMDIxMTcwMDdjYzlmMDZlZGVjZTUxZmY3OWY1ODA0ODVhMTdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdpbmF0
aW9uLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKQEAgLTY2Niw5ICs2NjcsOSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGcmFt
ZUZsYXR0ZW5pbmcgZWZmZWN0aXZlRnJhbWVGbGF0dGVuaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250
ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnMpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRy
b2xUaW50cygpIHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsgfQot
ICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udHJv
bFRpbnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsg
fQorICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQogCiAgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyc0ZvckFsbFNjcm9sbGFibGVBcmVhcygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCmluZGV4IDczZDhiNDljZWE3Y2E2NThkNTU0
NmQzZWIxNTIyYWQzNGMwYWVjMWMuLmExOGZlNWJiYWI3ZTM2NDk5MzI5ZjJhY2Y3Y2Y2ZjAzYWQy
NmI2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCkBAIC03Miw3ICs3
Miw3IEBAIEdESU9iamVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lKiBmcmFt
ZSwgSW50UmVjdCYgaXIpCiAgICAgICAgIDgsIHcgKiBzaXplb2YoUkdCUVVBRCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCkpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dC5nZXQo
KSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoY29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ2MoY29udGV4dC5nZXQoKSk7CiAKICAgICBkcmF3UmVjdEludG9Db250ZXh0
KGlyLCBmcmFtZS0+dmlldygpLCBnYyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd2luL0ZyYW1lR2RpV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2Rp
V2luLmNwcAppbmRleCAxNjFiNGU5MzI2ZjViMmIwMTY5MGFlMTQ5MTk3ZWJmZTgzMGZlYjk3Li5i
NzlmZWJmNjM4YTZhYjljNDJmM2YyNDZlYzQxZDJjNTJhZWVlZWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUdkaVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlIDx3dGYvd2luL0dE
SU9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3ICs2MCw3IEBAIEdESU9i
amVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KEZyYW1lKiBmcmFtZSwgSW50UmVjdCYgaXIpCiAg
ICAgSEdESU9CSiBoYm1wT2xkID0gOjpTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCksIGhCbXAuZ2V0
KCkpOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoYm1wREMuZ2V0KCkpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoYm1wREMuZ2V0KCkpOwogICAgICAgICB2aWV3
LT5wYWludCgmZ2MsIGlyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
aW5kZXggYzFiNTM2MDU3MTM3NzRkYzAwNmQwMjhlZGE3YzZhODIxM2Q2Y2NhMS4uMjM3ZWJmYmI4
MDMzOGQzMTNkMmE1MWE3N2UyODMwOWQ3MDVmYmY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKQEAgLTEyLDcgKzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3Jl
QmFja2VuZENhaXJvWDExLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA1ZjAxNDk0
ZjNjYTFlMzFkNzQ3YmY3YzdhZmI3NmFkMGNkN2Y2NzBiLi4xOTdlMzNjZGMzNzUzOGFjOTAwYzg3
ZDU0ZDljNmMzZjM1NjlmNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTI5LDcgKzI5LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCmluZGV4IDZkODExODg4ODQ2NGQ4
MTU1ZDlkNTA4MzJjY2JhNjQzYjE4N2RhZDguLmEwN2Q2NDZhMmU4MGMxZmUzZTUxNTRhZDdlOGY2
ZTAxNDg5ZWI5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0Ry
YWdJbWFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJ
bWFnZUNvY29hLm1tCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgog
I2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNl
LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkBAIC0zMDAsNyArMzAwLDcgQEAgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgZWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGkKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdlID0gYWRvcHROUyhbW05T
SW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBbZHJhZ0ltYWdlIF93
ZWJfbG9ja0ZvY3VzV2l0aERldmljZVNjYWxlRmFjdG9yOmRldmljZVNjYWxlRmFjdG9yXTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0uQ0dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0uQ0dDb250ZXh0KTsKIAogICAgIGNvbnRleHQuZmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5kaW5nUmVjdCwgRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSksIGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg3YTQ0YTUzNDdh
Yjg2YmE4ZTE5MzBmMDQyMGU2NDUwOTU2MGI4MWQuLjk2YzlmMGU2OGQxYjlmNGExYTg4NWMwMGEw
M2YzYjFmNWYzNDk3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAKQEAgLTIyOSw5ICsyMjksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZv
clRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1
ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQgcmVjb3JkaW5nQ29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRl
eHQpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsICpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJl
Y3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxwdHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RG9udERlY29uc3RydWN0KTsKLSAg
ICB9KTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxh
eUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBu
dWxscHRyLCBEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25z
dHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBv
aW50ID0gdG9GbG9hdFBvaW50KFdlYkNvcmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFu
Y2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZl
ciwgc3RhcnRQb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDk5
MzZiNzc1M2JlZjllNTEzMTE5ZjI5MDYzZmMzNWFlZWRhNjkzMmUuLjk3MGMzNzVjYmQ1ODE5YTIw
MGIyMGI2NzEzMjg3MGFkNWQ5MTdhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzAsMTEgKzMwLDExIEBACiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtODIs
MTEgKzgyLDYgQEAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkK
ICAgICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCiAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHModHJ1ZSkKICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lm
IFVTRShDRykKLSAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93
cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKLSAgICAvLyBi
dXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5k
IC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2Up
Ci0jZW5kaWYKICAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQogewogfQpAQCAtMTYwLDEw
ICsxNTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKICAgICB9CiAKICAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IERlYWwgd2l0aCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzLgogICAg
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAg
bV9zdGF0ZS5zaGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKICAgICAgICAgbV9zdGF0ZS5z
aGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICBtX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChmbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkK
QEAgLTIyOSwxNCArMjI0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotI2lmIFVTRShDRykK
LSAgICAgICAgaWYgKG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgICAg
IGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNo
YWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRl
LnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIH0KKyAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsK
IAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CkBAIC0zMDIsOSArMjkxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKSkgewogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5z
aGFkb3dCbHVyKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQpOwotI2lmIFVTRShDRykKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFk
aXVzKTsKLSNlbmRpZgorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KTsKICAgICB9CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTM2MSw1NSArMzQ4LDE5
IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoCiAgICAgcmV0dXJuIHRzOwogfQogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zKQotICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zKQotewotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQp
Ci17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkmIGZhY3RvcnlGdW5jdGlvbikKLSAgICA6IG1faW1wbChmYWN0b3J5RnVuY3Rpb24oKnRo
aXMpKQotewotfQotCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewogICAg
IEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUNv
dW50KTsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6
Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+aGFzUGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICEhbV9kYXRh
OworICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnNhdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFUlJP
UiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTQyMiwyMCArMzczLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCkKICAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkg
YWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCiAgICAgaWYgKG1fc3Rh
Y2suaXNFbXB0eSgpKQogICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+cmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVs
bGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNhdmUoKTsKIAogICAgIHNldFN0
cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKQEAgLTQ1MSw2NyArMzkyLDIxIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBlbGxpCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxs
cHRyOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRl
LnNoYWRvd0NvbG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93
KG9mZnNldCwgYmx1ciwgY29sb3IpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hh
ZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
b2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgbV9zdGF0ZS5zaGFk
b3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMgPSB0cnVlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNl
dCwgYmx1ciwgY29sb3IpOworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IHJhZGl1c01v
ZGU7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCkBAIC01
MTksMTUgKzQxNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiAgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKICAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotI2lmIFVTRShDRykK
LSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyU2hhZG93KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOworICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7CisgICAgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CkBAIC01NDQsNjYgKzQzMiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fc3Rh
dGUuZmlsbENvbG9yID0gY29sb3I7CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRy
OwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0
UGxhdGZvcm1GaWxsQ29sb3IoY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsK
LSAgICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hv
dWxkQW50aWFsaWFzKQotewotICAgIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50
aWFsaWFzOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
c2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNt
b290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOwotICAgIAotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotewotICAgIG1fc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi17Ci0gICAgbV9zdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsK
LQotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02
MTEsOCArNDQwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwogICAg
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVy
bkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYyMCw4ICs0NDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikK
ICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9
IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTYzMCwxNSArNDU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHIKICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsK
ICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZp
bGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxs
UnVsZTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7CisgICAgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pCkBAIC02NDcsNjQgKzQ2NiwzOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbgogICAg
IG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwog
ICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxHcmFkaWVudENoYW5nZSk7IC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAgICB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdl
KTsKKyAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKIHsKLSAgICBpZiAobV9p
bXBsKQotICAgICAgICBtX2ltcGwtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0g
ICAgZWxzZQotICAgICAgICBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
Ci0gICAgKyttX3RyYW5zcGFyZW5jeUNvdW50OworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNv
dW50OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBlbHNlCi0gICAgICAgIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAg
ICBBU1NFUlQobV90cmFuc3BhcmVuY3lDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lD
b3VudDsKKyAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1t
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4g
dG8pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
U2l6ZSgpOwotCiAgICAgLy8gRGlzcGxheSBsaXN0IHJlY29yZGluZyBmb3IgdGV4dCBjb250ZW50
IGlzIGRvbmUgYXQgZ2x5cGhzIGxldmVsLiBTZWUgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
LgogICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBw
b2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51
bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9udC5kcmF3RW1waGFz
aXNNYXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBCaWRpUmVzb2x2
ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CiAgICAg
YmlkaVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRp
cmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwogICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9y
aW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIDApKTsKQEAgLTczNCwxOSAr
NTI4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIGJpZGlSdW5zLmNsZWFyKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd05hdGl2ZUltYWdlKGlt
YWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybUltYWdlKGltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIEltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7CiAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFn
ZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjAsMTggKzU0MSwxMiBAQCBJ
bWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbgogCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
aXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgq
dGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwog
fQpAQCAtNzc5LDkgKzU1NCw2IEBAIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiBJbWFnZURyYXdS
ZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIElt
YWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRp
bGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CiAgICAgICAgIC8vIEp1c3QgZG8g
YSBzY2FsZS4KICAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CkBAIC04MDMsMTQgKzU3NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCAmJiBt
X2ltcGwtPmNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZSkpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOwogICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG9wdGlvbnMpOwogfQpAQCAtODMzLDM2ICs1OTcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25z
dAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92
ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXR0ZXJuKGlt
YWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJh
d1BsYXRmb3JtUGF0dGVybihpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0
KTsKICAgICBjbGlwUGF0aChwYXRoKTsKQEAgLTg3MCw5ICs2MTIsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgY2xpcE91dChy
ZWN0LnJlY3QoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTg4NSwxNCArNjI0LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0KQogCiBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGRy
YXdpbmdGdW5jdGlvbikpOwotICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVz
dWx0OjpTdWNjZXNzOwotICAgIH0KLQogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihkZXN0aW5hdGlvbi5zaXplKCksIGNvbG9yU3BhY2Us
ICp0aGlzKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0OjpGYWlsZWRUb0NyZWF0ZUltYWdlQnVmZmVyOwpAQCAtOTA0LDYx
ICs2MzUsMjIgQEAgR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWEKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpICYmICFVU0Uo
Q0FJUk8pCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KLSNlbmRp
ZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5n
TW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOwot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShtb2RlKTsKLX0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBncmFk
aWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBncmFkaWVudC5maWxsKCp0aGlz
LCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlv
bigpOwogICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKICAgICBmaWxs
UmVjdChyZWN0LCBjb2xvcik7CkBAIC05NjcsMjggKzY1OSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvcwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJvdW5kZWRSZWN0KHJlY3Qs
IGNvbG9yLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKHJl
Y3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChyZWN0LCBjb2xvcik7CisgICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3Ip
OwogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCkpOwog
ICAgIH0gZWxzZQogICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJF
Q1QyRCkgJiYgIVVTRShDQUlSTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFBhdGgg
cGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKQEAgLTEwMDgsNzAgKzY4OCwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSbwogICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKICAg
ICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9zdGF0ZS5hbHBoYSA9IGFs
cGhhOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQWxwaGEoYWxwaGEpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBtX3N0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwogICAgIG1fc3RhdGUuYmxlbmRNb2RlID0g
YmxlbmRNb2RlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKQotewot
ICAgIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7Ci19Ci0KLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCi17Ci0gICAgbV9zdGF0ZS51c2VEYXJrQXBw
ZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlKTsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJF
Q1QyRCkKLS8vIEltcGxlbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIGdvIHB1c2ggdGhlIGRyYXdp
bmcgbW9kZSBpbnRvIHlvdXIgbmF0aXZlIGNvbnRleHQgaW1tZWRpYXRlbHkuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxh
Z3MpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSkK
LXsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKTsKIH0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShE
SVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZv
bnRzKGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
ICYmICFVU0UoQ0FJUk8pCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQog
ewpAQCAtMTEwMiwyNCArNzI1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVU
b1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9
CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLSNlbmRpZgotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcikKLXsKLSAgICBzY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VT
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotfQotICAgIAogRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKQEAgLTExMzMsMjQgKzczOCwxMCBAQCBGbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29ucwogICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxs
RWxsaXBzZShlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3Jt
RmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgp
OworICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCkBAIC0xMTY3LDIzICs3NTgs
MTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQogICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLSNpZiAhVVNFKENH
KSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Cisg
ICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hB
cnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5
bGUpOwogfQotI2VuZGlmCiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykK
IHsKQEAgLTEyMTgsMjAgKzc5Niw2IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvCiAgICAgcmV0
dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSkKLXsKLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFk
b3dPZmZzZXQsIHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICBzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotICAgIHNldFBs
YXRmb3JtVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2VDb2xvcihzdGF0ZS5zdHJva2VDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1GaWxs
Q29sb3Ioc3RhdGUuZmlsbENvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0YXRl
LnN0cm9rZVN0eWxlKTsKLSAgICBzZXRQbGF0Zm9ybUFscGhhKHN0YXRlLmFscGhhKTsKLSAgICBz
ZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3Rh
dGUuYmxlbmRNb2RlKTsKLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc3RhdGUuc2hv
dWxkU21vb3RoRm9udHMpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVD
b3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTI4MywzNiArODQ3LDE1
IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRP
ZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIg
fTsKIH0KIAotI2lmICFVU0UoQ0cpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0lu
dGVybmFsTGlua3MoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBG
bG9hdFJlY3QmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKQotewotfQotCi0jZW5kaWYK
LQogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsICYmIG1faW1wbC0+Y2FuUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllcikpIHsKLSAg
ICAgICAgbV9pbXBsLT5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAK
K3ZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK3sKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmOTEwYjg2ODZkMTlm
OTcwNWMwNDM3MjE4NTA2ZmFlOTk1ZTI3MzUwLi5iNzMxNzM3NzE4MDQxYjlkODcyNTM4MjRjMDcy
YmZkMTcyZTNlNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC04
Niw3ICs4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
IGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFJlY3Q7CkBAIC0xMTAsNiArMTEwLDEzIEBAIGVudW0g
Y2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CiB9OwogdXNpbmcgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKIAorLy8gTGVnYWN5IHNoYWRv
dyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cu
CisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xh
c3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9
OworCiBlbnVtIFN0cm9rZVN0eWxlIHsKICAgICBOb1N0cm9rZSwKICAgICBTb2xpZFN0cm9rZSwK
QEAgLTIxOSwxNCArMjI2LDEyIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlciB9OwogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1vZGU6Ok5vcm1h
bCB9OwogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
eyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFNoYWRvd1JhZGl1c01vZGUg
c2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKIAogICAgIGJv
b2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICBib29sIHNob3VsZFNtb290aEZvbnRzIDogMTsK
ICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7CiAgICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0jaWYgVVNFKENHKQotICAgIGJvb2wgc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cyA6IDE7Ci0jZW5kaWYKICAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDog
MTsKICNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UgOiAxOwpAQCAtMjU0LDI3ICsyNTksMTUgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKLSAgICAKLSAgICB1c2luZyBH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dEltcGw+KEdyYXBoaWNzQ29udGV4dCYpPjsKLSAgICBXRUJDT1JFX0VY
UE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkmKTsK
K3B1YmxpYzogICAKIAotICAgIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgCi0gICAgZW51bSBjbGFzcyBQYWlu
dEludmFsaWRhdGlvblJlYXNvbnMgOiB1aW50OF90IHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAg
SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzLAotICAgICAgICBJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzLAotICAgICAgICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQKLSAgICB9Owot
ICAgIEdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFVTRShESVJFQ1QyRCkKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHREaXJlY3QyRAogICAg
IGVudW0gY2xhc3MgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgOiB1aW50OF90IHsKICAgICAg
ICAgQ1BVTWVtb3J5LAogICAgICAgICBHUFVNZW1vcnkKQEAgLTI4MiwyNTAgKzI3NSwyNzAgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCosIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKICNlbmRpZgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgYm9vbCBwYWludGluZ0Rp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YSAmJiAhbV9pbXBsOyB9Ci0gICAgYm9vbCBw
ZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KLSAgICBi
b29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5n
Q29udHJvbFRpbnRzOyB9Ci0gICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNv
ZGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9
Ci0gICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVj
dGluZ0NvbnRlbnRmdWxQYWludDsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludGluZ0Rpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybWluZ1Bh
aW50SW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQ
YWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgLy8gQ29udGV4dCBTdGF0ZQorCisgICAg
dm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzID0gdGhpY2tuZXNzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQogICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CiAKLSAgICB2
b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKKyAgICB2b2lkIHNldFN0cm9rZVN0eWxl
KFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsg
fQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VTdHlsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihj
b25zdCBDb2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihS
ZWY8UGF0dGVybj4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQYXR0ZXJu
KFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFN0cm9r
ZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50KiBzdHJva2VH
cmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7IH0K
IAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgIHZvaWQgc2V0RmlsbFJ1bGUo
V2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyB1cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9CiAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwog
ICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxD
b2xvcjsgfQogCi0gICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7CiAgICAg
UGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJu
LmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50
KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQo
KTsgfQogCi0gICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sKTsKKyAgICB2
b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wpOworICAg
IHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUu
c2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQogICAgIGJvb2wg
c2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7
IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CiAKICAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBp
eGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBh
bGlnbmluZyBnbHlwaHMuCiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUg
dG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZv
aWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IH0KIAotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7IH0KKyAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CiAKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAg
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
OworICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhh
OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2Up
OyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCk7Ci0gICAg
Ym9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5k
TW9kZTo6Tm9ybWFsKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAgQmxlbmRN
b2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2Rl
OyB9CisKKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1h
c2spIHsgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOyB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpOyB9CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KKworICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2Rl
KFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBt
b2RlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdp
bmdNb2RlQ2hhbmdlKTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBj
b25zdDsKKworICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1f
c3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0
KCkpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlz
aWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorCisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJh
bmNlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0Fw
cGVhcmFuY2VDaGFuZ2UpOyB9CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KICNlbmRpZgotICAgIGJvb2wgaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3Rv
cmUoKTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogICAgIAogICAgIHVuc2lnbmVk
IHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBi
ZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2Yg
YSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPworICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBi
ZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3IganVzdCBiZSBy
ZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoYm9vbCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
IH0KKworICAgIC8vIFBpeGVsIFNuYXBwaW5nCisKKyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Cisg
ICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwor
ICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsK
KworICAgIC8vIFNoYXBlcworCiAgICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90
aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0
KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwogICAgIC8vIHVzaW5n
IGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29y
cmVjdAogICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKTsKLSAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IpOworCisgICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBh
dGgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwog
Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRyYXdS
YWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3Is
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVhbCB2b2lkIGZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpO
b3JtYWwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CiAKLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOwot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKLSAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5l
Q2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGlu
ZUpvaW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0IGxpbmVXaWR0aCk7CisgICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmll
bnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAotICAgIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKIAotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5KTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CisjZW5kaWYKIAotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5k
UnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICBlbnVtIGNsYXNzIENs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0NyZWF0
ZUltYWdlQnVmZmVyIH07Ci0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKTsKLSAg
ICAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICB2b2lkIHNl
dFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0gICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJh
d2luZ01vZGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsK
IAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBw
ZWFyYW5jZShib29sKTsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQotI2VuZGlmCisgICAgZW51bSBjbGFzcyBD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgOiBib29sIHsgU3VjY2VzcywgRmFpbGVkVG9DcmVh
dGVJbWFnZUJ1ZmZlciB9OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYmKTsKIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jiwg
Rm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBX
VEY6Om51bGxvcHQpOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsK
IAotICAgIHZvaWQgYnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Cisg
ICAgLy8gVGV4dAogCi0gICAgZW51bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFsbFNp
ZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpOwotCi0gICAgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNG
b3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOwotICAgIHZvaWQgZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2ln
bmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6
bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNv
bnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3Bh
cmVuY3lMYXllcnMoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjb21wdXRlVW5k
ZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5
bGUgPSBTb2xpZFN0cm9rZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBT
b2xpZFN0cm9rZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBi
bHVyLCBjb25zdCBDb2xvciYpOwotICAgIC8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMg
dXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIC8vIEl0IGhhcyBk
aWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgotICAgIHZvaWQgc2V0TGVnYWN5U2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7CisgICAgLy8g
VHJhbnNwYXJlbmN5IExheWVycwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclNoYWRv
dygpOwotICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0
IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNT
aGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hh
ZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93
T2Zmc2V0LmhlaWdodCgpKTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsg
cmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICAv
LyBGb2N1cyBSaW5ncwogCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENh
biB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPwog
I2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwogI2VuZGlmCiAKLSAgICB2b2lkIHNldExpbmVD
YXAoTGluZUNhcCk7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCBkYXNoT2Zmc2V0KTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKLSAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5ibGVuZE1vZGU7IH0KLQotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9v
bCk7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
ZHJhd0x1bWluYW5jZU1hc2s7IH0KLQotICAgIC8vIFRoaXMgY2xpcCBmdW5jdGlvbiBpcyB1c2Vk
IG9ubHkgYnkgPGNhbnZhcz4gY29kZS4gSXQgYWxsb3dzCi0gICAgLy8gaW1wbGVtZW50YXRpb25z
IHRvIGhhbmRsZSBjbGlwcGluZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNpbmNlCi0gICAg
Ly8gdGhlIGRpc2NpcGxpbmUgaXMgZGlmZmVyZW50LgotICAgIHZvaWQgY2FudmFzQ2xpcChjb25z
dCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKTsKKyAgICAvLyBUcmFuc2Zvcm1zCiAKLSAgICB2b2lkIHNjYWxlKGZsb2F0
IHMpCi0gICAgewotICAgICAgICBzY2FsZSh7IHMsIHMgfSk7Ci0gICAgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpOworICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZSh7IHMs
IHMgfSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpID0gMDsKICAgICB2
b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBv
aW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0KLSAgICB2b2lkIHNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgYWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYp
OwotCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdmlydHVhbCB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CiAKICAgICBlbnVtIEluY2x1ZGVEZXZpY2VT
Y2FsZSB7IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUsIFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNs
dWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNl
U2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOwogCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250
ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBhIGJh
c2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0
b3IoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxl
KGZhY3Rvcik7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5n
KGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29u
c3Q7CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbmZ1
bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW5mdWxQYWludERldGVjdGVkOyB9CisgICAgLy8gTGlu
a3MKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwot
I2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsg
fQorCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorCisgICAg
dm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRl
Y3RlZCA9IHRydWU7IH0KKyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9CiAKKyAgICAvLyBGSVhNRTogTm90
aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBoZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVs
c2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQogICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCk7IC8vIFRoZSBwYXNzZWQgaW4gcmVj
dCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5z
cGFyZW5jeSBsYXllcnMuCiAgICAgdm9pZCByZWxlYXNlV2luZG93c0NvbnRleHQoSERDLCBjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCk7IC8vIFRoZSBwYXNzZWQgaW4gSERD
IHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3NDb250ZXh0LgogICAg
IEhEQyBoZGMoKSBjb25zdDsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgR3JhcGhpY3NDb250ZXh0
KEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV4aXN0OyB3ZSBuZWVkIGEgZGlmZmVyZW50
IHBsYWNlIHRvCisgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4gV2luZG93cyBDRyBhbmQg
V2luZG93cyBDYWlybyBiYWNrZW5kcy4KKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVs
bHB0cjsgfQorI2lmIFBMQVRGT1JNKFdJTikKICAgICAvLyBXaGVuIHNldCB0byB0cnVlLCBjaGls
ZCB3aW5kb3dzIHNob3VsZCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dAogICAgIC8vIHJh
dGhlciB0aGFuIGFsbG93aW5nIHRoZW0ganVzdCB0byByZW5kZXIgdG8gdGhlIHNjcmVlbi4gRGVm
YXVsdHMgdG8KICAgICAvLyBmYWxzZS4KQEAgLTU4NSw2MSArNTk4LDEzIEBAIHB1YmxpYzoKICNl
bmRpZiAvLyBQTEFURk9STShXSU4pCiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIAotICAgIHN0YXRp
YyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQ
b2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7Ci0KLSAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0OwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbCog
aW1wbCgpIHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQotCiBwcml2YXRlOgotICAgIHZvaWQgcGxh
dGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdm9pZCBwbGF0Zm9ybURl
c3Ryb3koKTsKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMs
IGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wg
aGFzQWxwaGEgPSBmYWxzZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQotICAgIHZv
aWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzKTsKLQotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwot
ICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3Jt
RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkQW50
aWFsaWFzKGJvb2wpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29s
KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhclBsYXRmb3Jt
U2hhZG93KCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtQWxwaGEoZmxvYXQpOwotICAgIHZvaWQg
c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLQotICAgIHZvaWQgYmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIHZvaWQgZW5kUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcigpOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCitwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0K
LSAgICB2b2lkIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0
Zm9ybUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKTsKLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KICAgICBGbG9hdFJl
Y3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nLCBDb2xvciYpOwogCiAgICAgZmxvYXQgZGFzaGVkTGluZUNv
cm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OwpAQCAtNjQ3LDE1ICs2MTIsMTMg
QEAgcHJpdmF0ZToKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5B
bmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25z
dDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9v
bCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBG
bG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0SW1wbD4gbV9pbXBsOwotCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsK
KworcHJpdmF0ZToKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7
CiAKLSAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKLSAgICB1bnNpZ25l
ZCBtX3RyYW5zcGFyZW5jeUNvdW50IHsgMCB9OwotICAgIGJvb2wgbV9jb250ZW5mdWxQYWludERl
dGVjdGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQg
eyAwIH07CisgICAgYm9vbCBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkIHsgZmFsc2UgfTsKIH07
CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgewpAQCAtNzQ0LDggKzcwNyw2IEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7CiB9OwogCi0KLQogY2xhc3MgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjE0YTBhODkyYjZlOTlm
OTlkYjgyM2NlYTM1MjFiNGM1ZmY1NWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6OkdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotICAgIDogbV9ncmFwaGljc0NvbnRleHQoY29udGV4dCkKLXsKLX0KLQot
R3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4dEltcGwoKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI2MmZmYjQ1NDVhZTIzNTZmN2MxZmJmNzhjMDQ5NGIzY2FjY2UzYjEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGwgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29u
dGV4dEltcGwpOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250
ZXh0Jik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbCgpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzQ29u
dGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVy
JikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pdGVy
TGltaXQoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBHcmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwotCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwotICAgIHZpcnR1
YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZp
cnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblBhaW50RnJhbWVGb3JN
ZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0ID0gMDsKLSNlbmRpZgotICAgIAotICAgIHZp
cnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250
ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDQ0MGY3MjUzNTgyY2M2NDkzMTVmMjQ3M2IzOTAz
MjJiMGE2NjIwODUuLjZhYjQzMjczMjZkYTA4MmQ4MTFlZTQxMjhmY2Q2NGFiMjU2OWU2OWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTE4OCw4ICsx
ODgsOSBAQCBJbWFnZURyYXdSZXN1bHQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZS10ZXN0IHRoaXMgYW5kIHJlbW92
ZSB0aGlzIGlPUyBiZWhhdmlvciBkaWZmZXJlbmNlIGlmIHBvc3NpYmxlLgogICAgIC8vIFdoZW4g
dXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2gg
YW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpIHsKICAgICAgICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJz
ZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0
KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAg
IHZpc2libGVTcmNSZWN0LnNldFgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYxN2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4x
NzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZkZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRC
dWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwogCkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2Jz
ZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRJbXBsOwogcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxH
cmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNz
Q29udGV4dCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xh
c3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisg
ICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlcywKKyAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50Cisg
ICAgfTsKKworICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
IHJlYXNvbnMpCisgICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisK
KyAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJl
YXNvbnM6Ok5vbmU7IH0KKyAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVh
c29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWlu
dDsgfQorCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lm
IFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KKworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRp
ZgorCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
ZmluYWwgeyB9CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiBy
ZWN0OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwg
Ym9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNo
QXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZp
bmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9
CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJv
dGF0ZShmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0K
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNp
emUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0
KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQor
CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0g
MCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRD
YXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFn
ZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
IHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgor
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1
ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1
Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhX
SU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8v
IE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5
NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRl
Zjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCkBAIC0xOTgsNyArMTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykK
LSAgICBpZiAoc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3Jh
cGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRh
cjovL3Byb2JsZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRo
aXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAg
IGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkg
ewogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUu
c2hhZG93Qmx1cik7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVy
LCBzaGFkb3dCbHVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZl
NDlkNGU4YTM2MjAwZDc3MmEzMzJlN2MxLi4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5
YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRT
dGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAo
Ym91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsK
LSAgICAgICAgfSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rp
c3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJh
bnNmb3JtKCkpOwogICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4
YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRmMzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJp
YWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIK
QEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBv
aW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNj
YWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVw
ZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBH
cmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6
OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4
LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRl
eCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2Vi
MDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJlNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAj
aW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAg
LTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNh
bGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FM
YXllcjo6ZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9y
dGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUg
c2lnbmlmaWNhbnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcu
IHRpbGVkIGxheWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0Nv
bgogICAgIGVsc2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xv
cjo6cmVkKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBs
YXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25l
cigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZj
MDYyMTRmYzMuLmI1M2EzMzdiYTRjY2RjZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgVVNFKENBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRl
ICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyAr
ODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FD
RkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVu
dCogY2xpZW50ID0gb3duZXIoKS0+b3duZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3Jt
Q0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZy
b20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBz
bWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3
NWExMjhiMDc1Ny4uZTQyM2Y1Y2RmNDdkNjRjY2M0YWEwY2M5NDBlMDg2M2Y3NWIxNzE3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICsz
OSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWly
by5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAt
NTcsNjMzICs1NiwzNjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRl
eHQpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBs
YXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZv
cm1Db250ZXh0KQotICAgICAgICByZXR1cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3lu
Y0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Cit9CiAKLSAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1f
ZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsK
LSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CitHcmFwaGlj
c0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0
KQorICAgIDogbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4
dENhaXJvPihjYWlyb0NvbnRleHQpKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKK3sKKyAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJvKCpwbGF0Zm9ybUNvbnRleHQpCiB7Ci0g
ICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAg
IH0KIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVE
ZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdy
YXBoaWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5j
bHVkZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVy
biAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4
dDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUo
KnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQ
bGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAog
Ly8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhp
Y2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9y
bUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxw
aGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1J
bWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBk
cmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENh
aXJvOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRv
IGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpm
aWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUoKSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0
ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0
dGVybikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
Y29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9w
bGF0Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRl
eHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7
CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBD
YWlybzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0
aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBj
b25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91
bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBD
YWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNF
RF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwog
I2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5n
KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6
OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9y
VGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qu
d2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRl
cmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4
dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1
cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsK
LSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9r
ZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBm
aWxsIG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VDb2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNh
bid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNl
dCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwog
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19
CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewor
ICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVp
Z2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAg
ICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRv
d09mZnNldC5oZWlnaHQoKSB9OworICAgICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0
eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlU3R5bGUpOworICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9y
bUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpT
dGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAot
ICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBo
YXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zm
c2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZv
cm1Db250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3Jt
Q29udGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNo
KGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZv
cm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5l
Sm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8g
TWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+
c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xp
cFBhdGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0
KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgp
LCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9y
LmlzVmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0
ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50
U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgp
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29s
IGVuYWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01v
ZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJl
dHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQo
KSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8
Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1
dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tp
XSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tp
XS53aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsK
KyAgICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCog
c2NhbGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJs
ZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAg
ICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcg
PSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAg
ICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERy
YXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3Rh
dGUuc2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODhhNDhl
M2ZmYjQ5MzViN2M4MDU5MDcwZGIxYmM5MTEwZDRiZWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0
cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0
Zm9ybUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJvKik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8oY2Fpcm9fdCopOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENh
aXJvKEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQu
CisjZW5kaWYKKworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4
dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7
CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7Cisg
ICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKKworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworCisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShm
bG9hdCkgZmluYWw7CisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKKyAgICB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIGZpbmFsOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpIGZpbmFsOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAg
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5h
bDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKKworI2lmIE9TKFdJTkRPV1Mp
CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKKyAgICBQ
bGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWYyYTA0ODE3YmZkNGVkMGYyMDY3NzVhYzI4NjIyNDk5NzI1YWQ1YS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotCi0jaWYgVVNFKENBSVJPKQot
Ci0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVj
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAgICBbJnBsYXRmb3Jt
Q29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIHBs
YXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShjYWlyb190KiBjYWlyb0NvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtjYWlyb0NvbnRleHRdKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBjYWlyb0NvbnRleHQp
OwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2
YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3Jt
Q29udGV4dCkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0
Zm9ybUNvbnRleHQuY3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6R3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY2Fpcm9fdCogY2Fp
cm9Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWly
b0NvbnRleHQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5z
eW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjp+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1fcGxh
dGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0
ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09m
ZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0
aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9k
ZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFs
aWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3Bs
YXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIENhaXJv
OjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX3BsYXRmb3Jt
Q29udGV4dCwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpz
ZXRMaW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewot
ICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBhdXRvIHBhdHRlcm4gPSBn
cmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2Fpcm86OnNh
dmUobV9wbGF0Zm9ybUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRv
ciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9z
aXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZp
b3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0
b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91
c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgQ2Fpcm86OlNoYWRvd1N0YXRlIHNoYWRvd1N0
YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgQ2Fpcm86OmZp
bGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0YXRl
KTsKLSAgICBlbHNlCi0gICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikKLXsKLSAgICBDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgeyB9LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0g
ICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6c3Ry
b2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpz
dHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIHN0cm9rZVBhdGgo
cGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17
Ci0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90
PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0byB5T2Zmc2V0ID0g
cG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5
T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7Ci0g
ICAgICAgICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZv
cm1EYXRhKCkuc2NhbGVkRm9udCgpOwotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFs
aWFzaW5nKCkpCi0gICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmc7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29s
b3IsCi0gICAgICAgIGZvbnRTbW9vdGhpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3KGdyYXBoaWNzQ29udGV4dCgp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKG1fcGxhdGZvcm1D
b250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0g
ICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlj
a25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xp
bmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwg
c3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
LXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnNhdmUoKQotewotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJlc3RvcmUoKQotewotICAgIENhaXJv
OjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENhaXJvOjp0cmFu
c2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIENhaXJvOjpy
b3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBDYWlybzo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5z
Zm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0o
bV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBDYWlybzo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENhaXJv
OjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgY2xp
cFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5k
cygpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3Jt
Q29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQot
ewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJl
Y3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkZTVkMmE3ZTk4ZGJiYmVhMjY3YWIwNTRjMGRm
ZjE0MjU2Y2YyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbC5oIgotCi10eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKLQotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwg
ewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KGNhaXJvX3QqKTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHRDYWly
byYpOwotICAgIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBjYWly
b190Kik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCk7Ci0KLSAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29u
dGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJh
d2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJy
aWRlOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJv
b2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4
dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
JiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcAppbmRleCBkMzdmYjY2MzczYWFjOTMyYTcxNDgyNTM0ODVmMzM0OTExODY4NWQ0Li5hNThk
ZGI5NjgyNzUyZTc5NTAwZjMyMmJjNTNjZjA0ZDYwNzAzYzdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJDb2xvclRyYW5zZmVyRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dENhaXJvLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcAppbmRleCAzYmU3NTU2OWU5NzNjMmIxNjg5OWE1MDc2Mjc1ZjUyM2ZhODA3MWVh
Li45YjVjMGFkMDc0NDUxODgwZGVmZGQzYzQ4OTJlNGY3M2MyODY0MmM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDYWlyby5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8Y2Fpcm8uaD4KQEAgLTUxLDcgKzUxLDcgQEAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYKIAog
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2Uu
Z2V0KCkpKTsKICAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworICAgIG1fY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KG1fcGxhdGZvcm1Db250ZXh0KTsKIH0K
IAogR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRl
eHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0aENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKaW5kZXggODFkMTU4ZTJkZmY3ZTViZjAzYzdiNjVkMDM2ZGRhODk5
ZjBmOTAxZi4uMmExOWU0N2E5YWFjZWMyMDk2YTYwZTk3ZTNiNWM0ODc0NTNkYWFmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9VbmlxdWVQdHIuaCIKICNpbmNs
dWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENh
aXJvLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00MjEsNyArNDIxLDcgQEAgRmxvYXRS
ZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgaWYg
KHN0cm9rZVN0eWxlQXBwbGllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyhtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VT
dHlsZUFwcGxpZXIoZ2MpOwogICAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIGJvb2wgUGF0aDo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNy
ZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
IGdyYXBoaWNzQ29udGV4dChtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxp
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBlZjNh
YzJlMTM3MWI4ZTFjOTA3ZGExMjQyYTc2Y2U2ZTYxNDc4NzBlLi4xMDhlOWYwOWY5OGQ0M2IzZjUx
MzM2YWYwNDBjMTE2NzJlZDM1NTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01NSwxNyArNTUs
MTIgQEAgc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29u
dGV4dCwgY2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1N0cm9r
ZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
Q0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihj
b2xvcikpOwotfQotCiBpbmxpbmUgQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShD
R0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQoQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpLCBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0Nv
bnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpKSk7CiB9CiAKLXN0YXRpYyBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBx
dWFsaXR5KQorc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvcmVJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCiB7CiAgICAgc3dpdGNoIChxdWFs
aXR5KSB7CiAgICAgY2FzZSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDoKQEAgLTgyLDYgKzc3LDM0
IEBAIHN0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxCiAgICAgcmV0dXJuIEludGVycG9sYXRpb25RdWFs
aXR5OjpEZWZhdWx0OwogfQogCitzdGF0aWMgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBjZ0ludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCit7CisgICAgc3dp
dGNoIChxdWFsaXR5KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OworICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHJldHVybiBrQ0dJbnRl
cnBvbGF0aW9uTm9uZTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6CisgICAg
ICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTG93OworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25NZWRpdW07Cisg
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIGtDR0lu
dGVycG9sYXRpb25IaWdoOworICAgIH0KKyAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1
bHQ7Cit9CisKK3N0YXRpYyBDR1RleHREcmF3aW5nTW9kZSBjZ1RleHREcmF3aW5nTW9kZShUZXh0
RHJhd2luZ01vZGVGbGFncyBtb2RlKQoreworICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKKyAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOworICAgIGlmIChmaWxsICYmIHN0cm9rZSkKKyAgICAg
ICAgcmV0dXJuIGtDR1RleHRGaWxsU3Ryb2tlOworICAgIGlmIChmaWxsKQorICAgICAgICByZXR1
cm4ga0NHVGV4dEZpbGw7CisgICAgcmV0dXJuIGtDR1RleHRTdHJva2U7Cit9CisKIHN0YXRpYyBD
R0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9kZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBzd2l0Y2ggKGJsZW5kTW9kZSkg
ewpAQCAtMTU2LDM1ICsxNzksMzYgQEAgc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRN
b2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE0KICAgICByZXR1
cm4ga0NHQmxlbmRNb2RlTm9ybWFsOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhp
Y3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKICAgICBpZiAoIWNnQ29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBz
dGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25R
dWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgp
KSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxD
b2xvckNoYW5nZSB8IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSB8IEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpOworICAgIG1fc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0Nv
bnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dENH
Ojp+R3JhcGhpY3NDb250ZXh0Q0coKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLUNHQ29u
dGV4dFJlZiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Citib29sIEdy
YXBoaWNzQ29udGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVy
biB0cnVlOworfQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwogICAgIEFT
U0VSVChtX2RhdGEtPm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4
dC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNhdmUoKQogewotICAgIEFTU0VSVCghcGFpbnRpbmdE
aXNhYmxlZCgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0
aW9uIHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2
b2lkIHRoZSBleHRyYQogICAgIC8vIHNhdmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTE5MiwxMCArMjE2LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEtPnNh
dmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogewotICAgIEFTU0VSVCghcGFpbnRp
bmdEaXNhYmxlZCgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlz
IGZ1bmN0aW9uIHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50
IHRvIGF2b2lkIHRoZSBleHRyYQogICAgIC8vIHJlc3RvcmUgb2YgdGhlIHNlY29uZGFyeSBjb250
ZXh0IChpbiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTIwNCwxMCAr
MjI3LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBs
YXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlID0gbmF0aXZl
SW1hZ2UucGxhdGZvcm1JbWFnZSgpOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIE1vbm90b25p
Y1RpbWUgc3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC0yOTgsNyArMzIwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3Jt
SW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KIAogICAgIGF1dG8gb2xkQ29tcG9zaXRlT3BlcmF0
b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKICAgICBhdXRvIG9sZEJsZW5kTW9kZSA9IGJsZW5k
TW9kZU9wZXJhdGlvbigpOwotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlv
bnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29t
cG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSk7CiAKICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0
byBiZSBhdCAoMCwgMCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgYWRqdXN0
ZWREZXN0UmVjdC54KCksIGFkanVzdGVkRGVzdFJlY3QueSgpKTsKQEAgLTMyNSwxMCArMzQ3LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9y
bUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHdhc0FudGlhbGlhc2Vk
KTsKICNlbmRpZgotICAgICAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihvbGRDb21w
b3NpdGVPcGVyYXRvciwgb2xkQmxlbmRNb2RlKTsKKyAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKG9sZENvbXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOwogICAgIH0KIAotICAgIExP
R19XSVRIX1NUUkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0
aXZlSW1hZ2UgIiA8PCBpbWFnZS5nZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBp
bnRvICIgPDwgZGVzdFJlY3QgPDwgIiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0g
c3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSA8PCAibXMiKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0o
SW1hZ2VzLCBzdHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UgIiA8
PCBpbWFnZS5nZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBpbnRvICIgPDwgZGVz
dFJlY3QgPDwgIiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5t
aWxsaXNlY29uZHMoKSA8PCAibXMiKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxs
YmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKQEAgLTMzOSw3ICszNjEsNyBA
QCBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJl
ZiBjb250ZXh0KQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWhlaWdodCk7CiAjZW5kaWYKLSAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5k
VG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhl
aWdodCkpLCBpbWFnZSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dENHKGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENH
SW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTM0NywxNiArMzY5LDE4IEBA
IHN0YXRpYyB2b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKICAgICBjYWxs
T25NYWluVGhyZWFkKFtpbWFnZSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0dJbWFnZVJlZj4oaW5m
bykpXSB7IH0pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVy
bihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UucGxhdGZv
cm1JbWFnZSgpOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRQbGF0Zm9ybUNv
bXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxl
bmRNb2RlKCkpOworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9w
ZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0
KCkpOwogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKQEAgLTQyMywxNiAr
NDQ3LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3Qg
UGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEYKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQg
cmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVj
dChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Ly8gRklYTUU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBhdHRlcm5zIGFuZCBncmFk
aWVudHMgbGlrZSBkcmF3UGF0aCBkb2VzLCBpdCBwcm9iYWJseSBzaG91bGQuCiAgICAgQVNTRVJU
KCFyZWN0LmlzRW1wdHkoKSk7CiAKQEAgLTQ1OCwxOSArNDc0LDExIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmUoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9r
ZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlja25lc3MoKTsK
ICAgICBib29sIGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkgKyB0aGlja25lc3MgPT0gcG9p
bnQyLngoKSk7CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBpc1ZlcnRpY2FsTGluZSA/IHBvaW50
Mi55KCkgLSBwb2ludDEueSgpIDogcG9pbnQyLngoKSAtIHBvaW50MS54KCk7CkBAIC01MjYsMzEg
KzUzNCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludAogICAgICAgICBDR0NvbnRleHRTZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dCwgdHJ1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKICAgICBkcmF3UGF0
aChwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5hcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShn
ZXRVc2VyVG9CYXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC01NjUsMTYgKzU1Nyw4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldFN0
cm9rZVBhdHRlcm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJuQWxw
aGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+YXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFm
ZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jh
c2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTYxNiwxNSArNjAwLDEwIEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjYWxjdWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3Rh
dGUsIENHUGF0CiAgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlm
IChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKQEAgLTY1NCwxNiArNjMzLDExIEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIH0KIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBo
aWNzQ29udGV4dENHOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
ZmlsbFBhdGgocGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdy
YWRpZW50KSB7CkBAIC03MTgsMTUgKzY5MiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKQEAgLTc5NCwxNiArNzYzLDggQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAK
ICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTgzMyw3ICs3OTQsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlm
IChtX3N0YXRlLmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKLSAg
ICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVy
cmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0
IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9
IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFz
Qmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAg
IENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsK
ICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dz
LgpAQCAtODQ2LDIzICs4MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmls
bENvbG9yICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7
CiAKLSAgICBib29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBo
YXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8v
IERvbid0IHVzZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNo
YWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkg
JiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
OwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hh
ZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBz
aGFkb3dzLgpAQCAtODgxLDIwICs4MzQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBz
ZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJv
dW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9
IGZpbGxDb2xvcigpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKICAgICAgICAg
c2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93
ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0
YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3Ig
Y2FudmFzIHlldC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAh
bV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFk
b3cpIHsKICAgICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTkyNCwxNiArODcyLDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4
dCwgb2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShy
ZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBQYXRo
IHBhdGg7CkBAIC05NTEsNyArODkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBz
ZXRGaWxsQ29sb3IoY29sb3IpOwogCiAgICAgLy8gZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSBh
c3N1bWVzIHRoYXQgdGhlIGVkZ2VzIG9mIHJlY3QgYXJlIGNsaXBwZWQgb3V0LCBzbyB3ZSBvbmx5
IGNhcmUgYWJvdXQgc2hhZG93cyBjYXN0IGFyb3VuZCBpbnNpZGUgdGhlIGhvbGUuCi0gICAgYm9v
bCBkcmF3T3duU2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNo
YWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGJvb2wgZHJh
d093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3
T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9m
ZiBDRyBzaGFkb3dzLgpAQCAtOTcwLDUyICs5MTAsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXQKICAgICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBtX2RhdGEtPmNsaXAocmVj
dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gRklYTUU6IFVzaW5nIENHUmVjdEluZmluaXRlIGlz
IG11Y2ggZmFzdGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xpcCBib3VuZGluZyBib3guIEhvd2V2ZXIs
IGR1ZQogICAgIC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRl
IGNhbid0IGJlIHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBo
YXMgY2VydGFpbiB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBh
IHNjYWxlLiBBbmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBj
YW5ub3QgdXNlIGl0IGluIGZvciBhIHByaW50aW5nIGNvbnRleHQgZWl0aGVyLgogICAgIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgY3RtID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJ
bmZpbml0ZSA9IENHQ29udGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRl
eHRUeXBlUERGICYmICghaXNBY2NlbGVyYXRlZENvbnRleHQoKSB8fCAoIWN0bS5iKCkgJiYgIWN0
bS5jKCkpKTsKKyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlw
ZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01v
ZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3Rt
LmMoKSkpOwogICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBD
R1JlY3RJbmZpbml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRl
eHQoKSksIHJlY3QgfTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENHQ29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7CiAg
ICAgQ0dDb250ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4
dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0
Zm9ybUNvbnRleHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4
dCgpKSk7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKQEAgLTEwMjMsMTYgKzkzOSw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgQ0dDb250
ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwpAQCAtMTA0OSwyMyArOTU3LDE0
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0
Q0c6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5jbGlwQm91bmRzKCk7Ci0KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChD
R0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBv
cGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogCiAgICAgc2F2ZSgpOwog
CkBAIC0xMDc1LDEyICs5NzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0Rl
dmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0
RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7CkBAIC0xMDg4LDExICs5ODQsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcmVz
dG9yZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lM
YXllcnMoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCBhcHBseVNoYWRv
d09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IENHRmxvYXQmIHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQpAQCAtMTEwMCw3ICs5OTEsNyBAQCBzdGF0aWMgdm9p
ZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsCiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVOVVNFRF9QQVJB
TSh5T2Zmc2V0KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKKyAgICBpZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhD
b3JyZWN0U2hhZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKQEAgLTExMjEs
MjEgKzEwMTIsMjIgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZO
ZWVkZWQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogI2VuZGlmCiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNl
dCwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dTaGFk
b3coY29uc3QgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdyYXBoaWNzQ29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgJiYgIWJs
dXIpIHsKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6
ZVplcm8sIDAsIDApOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYXZvaWQgdGhl
IHNoYWRvdyBzZXR1cCBjb3N0IHdoZW4gd2Uga25vdyB3ZSdsbCByZW5kZXIgdGhlIHNoYWRvdyBv
dXJzZWx2ZXMuCiAKICAgICBDR0Zsb2F0IHhPZmZzZXQgPSBvZmZzZXQud2lkdGgoKTsKICAgICBD
R0Zsb2F0IHlPZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVyUmFkaXVz
ID0gYmx1cjsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwog
Ci0gICAgaWYgKCFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYgKCFn
cmFwaGljc0NvbnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkgewogICAgICAgICBDR0Fm
ZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsK
IAogICAgICAgICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEg
KyB1c2VyVG9CYXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBAIC0xMTU2LDcgKzEwNDgsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBj
YW4gbWFrZSB0ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBj
bGFtcAogICAgIGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNp
b25Ub0NHRmxvYXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZCgqdGhpcywgeE9mZnNldCwgeU9mZnNldCk7CisgICAgYXBwbHlTaGFkb3dPZmZzZXRX
b3JrYXJvdW5kSWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAog
ICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhl
IGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0
aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTE2Niw1MCAr
MTA1OCw1MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3Qg
RmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogICAgICAgICBDR0NvbnRleHRTZXRT
aGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1
clJhZGl1cywgY2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxh
dGZvcm1Db250ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwotfQorICAgIGF1dG8gY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1p
dChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VUaGlja25lc3NDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4
dCwgc3RkOjptYXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKIAotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUu
Ci0gICAgICAgIG1faW1wbC0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJv
a2VDb2xvckNoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9y
KGNvbnRleHQsIGNhY2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIAotICAgIENHQ29u
dGV4dFNldE1pdGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLX0KKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCisg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250
ZXh0U2V0QWxwaGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOwogCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmNsZWFyUmVjdChyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoZmxhZ3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRl
T3BlcmF0aW9uQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0p
KQorICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwgc2VsZWN0Q0dCbGVuZE1v
ZGUoc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSkpOwogCi0gICAgQ0dD
b250ZXh0Q2xlYXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCisgICAg
ICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9k
ZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250
ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisK
KyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290
aEZvbnRzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29u
dGV4dCwgc3RhdGUuc2hvdWxkU21vb3RoRm9udHMpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkK
KyAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRl
cnBvbGF0aW9uUXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7CisKKyAg
ICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkp
CisgICAgICAgIHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUu
c2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0
U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChj
b25zdCBGbG9hdFJlY3QmIHIpCit7CisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KHBsYXRmb3JtQ29u
dGV4dCgpLCByKTsKK30KIAordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpIHsKQEAgLTEyNjksMTYgKzExNjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDR0Nv
bnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUNhcChMaW5lQ2FwIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAo
TGluZUNhcCBjYXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2Fw
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAoY2FwKSB7CiAgICAgY2Fz
ZSBCdXR0Q2FwOgogICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgp
LCBrQ0dMaW5lQ2FwQnV0dCk7CkBAIC0xMjkyLDE2ICsxMTc5LDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXApCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hP
ZmZzZXQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJy
YXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+c2V0TGluZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9hdCBsZW5ndGggPSAw
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKQEAg
LTEzMTIsMTYgKzExOTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29u
c3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgQ0dDb250ZXh0U2V0
TGluZURhc2gocGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRh
c2hlcy5zaXplKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGlu
ZUpvaW4gam9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVKb2lu
IGpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChqb2luKSB7CiAgICAgY2FzZSBN
aXRlckpvaW46CiAgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgp
LCBrQ0dMaW5lSm9pbk1pdGVyKTsKQEAgLTEzMzUsOTQgKzEyMDYsNDMgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiAgICAgfQogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxs
UnVsZSkKLXsKLSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0U2NhbGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7CiAgICAgbV9kYXRhLT5zY2FsZShzaXplKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJv
dGF0ZShmbG9hdCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKGFu
Z2xlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJvdGF0ZUNUTShw
bGF0Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwogICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKICAg
ICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxz
ZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQo
KSwgeCwgeSk7CiAgICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7CiAgICAgbV9kYXRhLT5tX3Vz
ZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0
cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Q29uY2F0
Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+Y29uY2F0Q1RN
KHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9C
ZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAg
IG1fZGF0YS0+c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBH
cmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBj
b25zdAorQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVkZURl
dmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBs
KQotICAgICAgICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQogICAgIC8v
IFRoZSBDVE0gdXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGlu
IFdlYktpdCAxIHdoZW4gdGhlCiAgICAgLy8gY29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2lu
Y2UgdGhlIHNjYWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVkIGF0IGEgbG93ZXIKICAgICAvLyBsZXZl
bC4gVG8gZ3VhcmFudGVlIHRoZSBkZXZpY2VTY2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0
aGlzIENHIEFQSS4KQEAgLTE0MzIsMTQgKzEyNTIsOCBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhp
Y3NDb250ZXh0OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QK
ICAgICByZXR1cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3ND
b250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3Vu
ZGluZ01vZGUgcm91bmRpbmdNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybiByZWN0OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1f
aW1wbC0+cm91bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwotCiAgICAgLy8g
SXQgaXMgbm90IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2Uu
IFRoZSByb3RhdGlvbiBwYXJ0IG9mIHRoZQogICAgIC8vIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4
IHRvIGRldmljZSBzcGFjZSBjYW4gbWVzcyB3aXRoIHRoaXMgY29udmVyc2lvbiBpZiB3ZSBoYXZl
IGEKICAgICAvLyByb3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUgd29ybGQgY2xv
Y2sgd2lkZ2V0LiBXZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbwpAQCAtMTQ4MiwyNyArMTI5Niwx
MSBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNbwogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRl
ZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJv
b2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQot
ewotICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0
aHMuYXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0
aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJv
a2VTdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYg
d2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJv
a2VTdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0
eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIGlmICghd2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywg
d2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ29sb3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZsb2F0
UmVjdCBib3VuZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KEZsb2F0UmVjdChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBw
cmludGluZywgbG9jYWxTdHJva2VDb2xvcik7CkBAIC0xNTU2LDE2ICsxMzU0LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaWNrbmVzcywKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0
KCksIGZpbGxDb2xvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBo
aWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJl
Y29yZGluZyBjb250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxh
eSBsaXN0cy4KLSAgICB9Ci0KICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGxpbmsu
Y3JlYXRlQ0ZVUkwoKTsKICAgICBpZiAoIXVybFJlZikKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3
OSwzNiArMTM2OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0
IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKICAgICBDR1BERkNvbnRleHRT
ZXRVUkxGb3JSZWN0KGNvbnRleHQsIHVybFJlZi5nZXQoKSwgQ0dSZWN0QXBwbHlBZmZpbmVUcmFu
c2Zvcm0ocmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0K
LSAgICBDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVm
YXVsdDsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5
OjpEZWZhdWx0OgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJw
b2xhdGU6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFs
aXR5ID0ga0NHSW50ZXJwb2xhdGlvbkxvdzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xh
dGlvbk1lZGl1bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0
eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25IaWdoOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxh
dGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFNob3VsZCBi
ZSBjYWxsZWQgZm9yIENBIENvbnRleHQuCiAgICAgQVNTRVJUKG1fZGF0YSk7CiAgICAgaWYgKGlz
TGF5ZXJDb250ZXh0KQpAQCAtMTYxNywxMjkgKzEzNzksMjggQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldElzQ0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKICAgICAgICAgbV9k
YXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNMYXllckNHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRl
eHRDRzo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YSAmJiAo
bV9kYXRhLT5tX2NvbnRleHRGbGFncyAmIElzTGF5ZXJDR0NvbnRleHQpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVk
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBp
c0FjY2VsZXJhdGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgZm9yIENBIENvbnRleHQuCi0gICAgQVNT
RVJUKG1fZGF0YSk7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1fZGF0YS0+bV9j
b250ZXh0RmxhZ3MgfD0gSXNBY2NlbGVyYXRlZENHQ29udGV4dDsKICAgICBlbHNlCiAgICAgICAg
IG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJj0gfklzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiB9CiAK
LWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cmVuZGVyaW5nTW9kZSgpID09IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0
RmxhZ3MgJiBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAKLSAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5z
KFRleHREcmF3aW5nTW9kZTo6RmlsbCk7Ci0gICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5z
KFRleHREcmF3aW5nTW9kZTo6U3Ryb2tlKTsKLSAgICBpZiAoZmlsbCAmJiBzdHJva2UpCi0gICAg
ICAgIENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0RmlsbFN0cm9r
ZSk7Ci0gICAgZWxzZSBpZiAoZmlsbCkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdN
b2RlKGNvbnRleHQsIGtDR1RleHRGaWxsKTsKLSAgICBlbHNlIGlmIChzdHJva2UpCi0gICAgICAg
IENHQ29udGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0U3Ryb2tlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR1N0cm9r
ZUNvbG9yKHBsYXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldExpbmVXaWR0aChwbGF0Zm9y
bUNvbnRleHQoKSwgc3RkOjptYXgodGhpY2tuZXNzLCAwLmYpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250
ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hv
dWxkQW50aWFsaWFzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0K
LSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0KCksIGVuYWJs
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZv
bnRzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQgYWxwaGEpCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRm
b3JtQ29udGV4dCgpLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRv
ciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6
OnJlbmRlcmluZ01vZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
Q0dDb250ZXh0U2V0QmxlbmRNb2RlKHBsYXRmb3JtQ29udGV4dCgpLCBzZWxlY3RDR0JsZW5kTW9k
ZShjb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7CisgICAgcmV0dXJuIG1fZGF0YS0+bV9j
b250ZXh0RmxhZ3MgJiBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0ID8gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNj
YWxlRmFjdG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZh
Y3Rvcik7CiAKICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFzZSBDVE0gb2YgYSBI
aURQSSBjb250ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVkIHRvIGl0LgogICAg
IC8vIEZhaWxpbmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxsIGNhdXNlIGNlcnRh
aW4gQ0cgZmVhdHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCkBAIC0xNzQ3LDEzICsxNDA4LDgg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3Rvcihm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKICAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3Jt
Q29udGV4dCgpLCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxh
dGZvcm1Db250ZXh0KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAg
ICAvLyBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9y
cy4KICAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikg
ewogICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3NjQsMTMgKzE0MjAs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwg
ZWxsaXBzZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ry
b2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKLQogICAgIC8vIENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBw
b3J0cyBzb2xpZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9z
dGF0ZS5zdHJva2VQYXR0ZXJuKSB7CiAgICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBz
ZSk7CkBAIC0xNzgxLDE4ICsxNDMyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENHQ29udGV4dFN0
cm9rZUVsbGlwc2VJblJlY3QoY29udGV4dCwgZWxsaXBzZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3ND
b250ZXh0OjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRl
eHRDRzo6c3VwcG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgRmxvYXRSZWN0
IHJlY3QgPSBkZXN0UmVjdDsKQEAgLTE4MDIsMTUgKzE0NDgsOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxv
YXRSZWN0JgogICAgIENHUERGQ29udGV4dFNldERlc3RpbmF0aW9uRm9yUmVjdChjb250ZXh0LCBu
YW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFk
ZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotCiAgICAgQ0dQb2ludCB0cmFuc2Zvcm1l
ZFBvaW50ID0gQ0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvc2l0aW9uLCBDR0NvbnRleHRH
ZXRDVE0oY29udGV4dCkpOwogICAgIENHUERGQ29udGV4dEFkZERlc3RpbmF0aW9uQXRQb2ludChj
b250ZXh0LCBuYW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUG9pbnQpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmgKaW5kZXggMjVhMDg2NmUyZjM4NjllMWU3ZTFmOWU2NjI2YmVjMjA1YmIw
ZGM3NS4uZjk2NmUyNzlhYjg2ZjU4Y2ZkZGFhMTMxODMzOGQxNDBhNGZhY2I5NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5oCkBAIC03Miw1ICs3MiwxMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2F2ZUFuZFJl
c3RvcmU7CiB9OwogCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDRyA6IHB1
YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dENHKENH
Q29udGV4dFJlZik7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgR3JhcGhpY3NDb250ZXh0Q0co
SERDLCBib29sIGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4KKyNl
bmRpZgorCisgICAgfkdyYXBoaWNzQ29udGV4dENHKCk7CisKKyAgICBib29sIGhhc1BsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0OworICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25z
dCBmaW5hbDsKKworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZp
bmFsOworCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJU
aGlja25lc3MgPSAxKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7
CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7
CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKworICAgIHZvaWQgYmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRy
YW5zcGFyZW5jeUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQgZmFjdG9yKSBmaW5hbDsKKworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3Q7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAg
dm9pZCBmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBD
b2xvciYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
IGZpbmFsOworCisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2Up
IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAg
IGJvb2wgaXNDQUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0Fj
Y2VsZXJhdGVkQ29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2
b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25z
dCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRS
ZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5l
Q2FwKSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0
IGRhc2hPZmZzZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFs
OworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdO
YXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsK
KworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7CisgICAgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFu
cykgZmluYWw7CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisK
KyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2
b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKworICAgIEFmZmluZVRy
YW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNl
U2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisK
KyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOworI2VuZGlm
CisKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRo
aWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91
YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmlu
YWw7CisKKyAgICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0
JikgZmluYWw7CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworCisg
ICAgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkg
Y29uc3QgZmluYWw7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKK307CisKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwCmluZGV4IDVmZmNlMTJmZWEyMTlmMzEwMGE4YmViOTYyMzMw
ODA4NzhjYTdiYTYuLjY4NjVmMGJkNDFiYjQ4NDYwZGJhMWY0ZjZiYTU4MDc4NGNjYWVlNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dD4oY2dDb250ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dENHPihjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgZGF0YSwgbnVt
Qnl0ZXMsIFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CiAgICAgICAgIGZh
c3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGNlZDNhZGJhMmI0YzEyZjBlODIzYTA4
OGQyNWZjMTVhYTg4OWE0MjcuLmYzM2RjZTkxNmRlYjM2ZTliMjUyYTI1YjgyODRlZDVkMWE4YWIx
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhD
Ry5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNw
cApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgpAQCAtMjQ0LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgQ0dDb250
ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxh
dGZvcm1QYXRoKCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAg
ICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBib29sIGhpdFN1
Y2Nlc3MgPSBDR0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0
aFN0cm9rZSk7CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5k
aW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2sKICAg
ICBDR0NvbnRleHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAogICAgIGlmIChz
dHJva2VTdHlsZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dChjb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsK
ICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0
ZXJuQ0cuY3BwCmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQxYTg5N2ZhYTNlNWRmZGFiMjNkZjgxMzQu
LjA1YTM5MTY1NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRkMDg4YzhkYTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMzAsNyAr
MzAsNyBAQAogI2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAg
LTQzLDcgKzQzLDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENH
Q29udGV4dFJlZiBjb250ZXh0KQogICAgIGlmICghcGxhdGZvcm1JbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRU
b0RldmljZVBpeGVscygKKyAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dENHKGNvbnRl
eHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCiAgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdl
R2V0V2lkdGgocGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkp
KTsKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9G
b250Q2FzY2FkZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhc2NhZGVDb2NvYS5tbQppbmRleCBlMjlhZWNkZmJmZTY4MDA2N2ZjYmExOTM5ZmFl
NTFlZGM4NzkyZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3OGFiY2E4N2JlNDIyZmI1ODFjZjc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5o
IgogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29u
dGV4dENvY29hLm1tCmluZGV4IDE0MjFlYjkwZDdhNDlkMWU0ODI0YjVhYzg5Njg4MTNhMzA1NDNm
N2QuLjM4OGFmY2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5NjdmMGU1MzU1MGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBo
aWNzQ29udGV4dENvY29hLm1tCkBAIC0xMDYsNDggKzEwNiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3
Rm9jdXNSaW5nVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNS
aW5nUGF0aAogICAgIGRyYXdGb2N1c1JpbmcoY29udGV4dCwgY29sb3IpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0LCBmbG9hdCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051
bGwoKSkKKyAgICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9m
ZnNldCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZHJhd0ZvY3VzUmlu
Z1RvQ29udGV4dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3Ip
OwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9D
b250ZXh0QXRUaW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0
aCwgZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyBib29sIGRy
YXdGb2N1c1JpbmdUb0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJl
ZiBmb2N1c1JpbmdQYXRoLCBkb3VibGUsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBVTlVT
RURfUEFSQU0odGltZU9mZnNldCk7CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwog
ICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0aCk7CiAgICAgcmV0dXJu
IGRyYXdGb2N1c1JpbmdBdFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjptYXgoKSwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmlu
Zyhjb25zdCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBw
YXRoLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSAvLyBGSVhN
RTogaW1wbGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4KKyAgICBpZiAocGF0aC5p
c051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgp
LCB0aW1lT2Zmc2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9j
dXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQs
IGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91
YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgLy8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcu
Ci0gICAgICAgIHJldHVybjsKLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1
c1JpbmdQYXRoID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoY29u
c3QgYXV0byYgcmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1Bh
dGguZ2V0KCksIDAsIENHUmVjdChyZWN0KSk7CkBAIC0xNTcsMTYgKzE0Miw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0
cywgZG91YmxlIHRpbWVPCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVj
dHMsIGZsb2F0LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29s
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBh
dGhSZWY+IGZvY3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAg
ICAgZm9yIChhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNS
aW5nUGF0aC5nZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNldCwgLW9mZnNldCkpOwpA
QCAtMTk5LDExICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xvckZvck1hcmtlckxpbmVT
dHlsZShEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSBzdHlsZSwgYgogICAgIH0KIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBXZSB3YW50IHRvIGZpbmQgdGhl
IG51bWJlciBvZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNvbHZpbmcgdGhlIGVxdWF0aW9uczoKICAg
ICAvLyBkb3REaWFtZXRlciA9IGhlaWdodAogICAgIC8vIGRvdERpYW1ldGVyIC8gZG90R2FwID0g
MTMuMjQ3IC8gOS40NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCA1OGM1MTI0ZDRiNmM2MTM2NGU4ZDM2OTZmMzQ5NWZk
YjI2NDU5N2EwLi5lMTM4YzMyMDFkZGU2NDUwMDViODZkMGE5ZjYxYThmNDBmNzQ2ODdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCkBAIC0zNzEsNyArMzcxLDcgQEAgR3JhcGhpY3NDb250ZXh0JiBJT1N1cmZhY2U6OmVuc3Vy
ZUdyYXBoaWNzQ29udGV4dCgpCiAgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICBy
ZXR1cm4gKm1fZ3JhcGhpY3NDb250ZXh0OwogCi0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOworICAgIG1f
Z3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oZW5zdXJlUGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zZXRJc0FjY2VsZXJhdGVk
Q29udGV4dCh0cnVlKTsKIAogICAgIHJldHVybiAqbV9ncmFwaGljc0NvbnRleHQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDIw
ZGFlZjRiYjQxZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAwNGYzZjcuLmQ3N2Y3NDE2ZGQ1NjVjM2Qz
ZjliNDU1ODg2MzA4YjZhMzliNWVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHRG
bGFncy5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogI2lmIFVTRShDT1JFX1RFWFQp
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgpAQCAtNTgsNyArNTksNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBo
QnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAK
LSNpZiBVU0UoQ09SRV9URVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4p
CiAgICAgdm9pZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRl
UmVmLCBDR1JlY3QpOwogICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJl
ZiwgQ0dHU3RhdGVSZWYpOwogICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0
YXRlUmVmLCBDR0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0ds
eXBoW10sIGNvbnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CkBAIC02OCw3
ICs2OSw5IEBAIHB1YmxpYzoKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b247IH0KIAogcHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQgY3JlYXRlSW50ZXJuYWxDb250
ZXh0KCk7CisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBVbmlxdWVS
ZWY8R3JhcGhpY3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNlbmRpZgogCiAg
ICAgdm9pZCBwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
KTsKICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJik7CkBAIC04NSwxMyArODgsMTcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQg
dXBkYXRlU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dC
bHVyLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsK
IAotI2lmIFVTRShDT1JFX1RFWFQpCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKICAgICB2b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKICNlbmRpZgogCiAgICAgUmVj
b3JkZXImIG1fb3duZXI7CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIG1fZHJhd0dseXBo
c0RlY29uc3RydWN0aW9uOwotICAgIEdyYXBoaWNzQ29udGV4dCBtX2ludGVybmFsQ29udGV4dDsK
KworI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdy
YXBoaWNzQ29udGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKKwogICAgIGNvbnN0IEZv
bnQqIG1fb3JpZ2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1f
c21vb3RoaW5nTW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0ds
eXBoc1JlY29yZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3Bw
CmluZGV4IGMwNDg2NTJmOWIwZTY1YWI1YzJjOWNlNTk4YjUyNzcwMmM4YWEzM2QuLmNhY2Y3NjRm
NWRlMmM4Y2Y2ZDNmNDAwMDJmZWFmNWUxMjE2OTFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNS
ZWNvcmRlckNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAK
QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2Nh
ZGUuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCiAKICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29u
dGV4dERlbGVnYXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGEKICAgICBy
ZXR1cm4ga0NHRXJyb3JTdWNjZXNzOwogfQogCi1HcmFwaGljc0NvbnRleHQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQorVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4
dD4gRHJhd0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogewogICAgIGF1
dG8gY29udGV4dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlz
KSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0
KCksIGRlQmVnaW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxi
YWNrPigmYmVnaW5MYXllcikpOwpAQCAtODQsNyArODUsNyBAQCBHcmFwaGljc0NvbnRleHQgRHJh
d0dseXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIENHQ29udGV4dERl
bGVnYXRlU2V0Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJl
aW50ZXJwcmV0X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpkcmF3R2x5cGhzKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhj
b250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0ltYWdlLCByZWludGVycHJldF9jYXN0PENHQ29u
dGV4dERlbGVnYXRlQ2FsbGJhY2s+KCZkcmF3SW1hZ2UpKTsKICAgICBhdXRvIGNvbnRleHQgPSBh
ZG9wdENGKENHQ29udGV4dENyZWF0ZVdpdGhEZWxlZ2F0ZShjb250ZXh0RGVsZWdhdGUuZ2V0KCks
IGtDR0NvbnRleHRUeXBlVW5rbm93biwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQoY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8
R3JhcGhpY3NDb250ZXh0Q0c+KGNvbnRleHQuZ2V0KCkpOwogfQogCiBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlwaHNEZWNvbnN0
cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCkBAIC0xMTksMzQgKzEyMCwzMSBAQCB2
b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiBjb250ZQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRl
SW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUp
CiB7CiAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5jb2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3Io
bV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0
RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBtX2lu
dGVybmFsQ29udGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxl
LmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHls
ZS5wYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVy
bikKLSAgICAgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOworICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRl
eHQtPnNldEZpbGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwog
ICAgIH0KIAogICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxp
ZCgpKQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFs
U3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0
U3Ryb2tlQ29sb3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKICAgICBlbHNl
IGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50
ZXJuYWxDb250ZXh0LnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5
bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJh
bnNmb3JtKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCpt
X29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJv
a2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNT
RVJUKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICAgICAgaWYgKG1f
b3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5h
bENvbnRleHQuc2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBh
dHRlcm4pOworICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4o
Km1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKLSAgICBtX2lu
dGVybmFsQ29udGV4dC5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CisgICAgbV9pbnRlcm5h
bENvbnRleHQtPnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKIAotICAgIG1faW50ZXJuYWxD
b250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cu
aWdub3JlVHJhbnNmb3Jtcyk7Ci0gICAgaWYgKGNvbnRleHRTdGF0ZS5zaGFkb3dzVXNlTGVnYWN5
UmFkaXVzKQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9v
cmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ludGVybmFs
Q29udGV4dC5zZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2lu
YWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvcik7CisgICAg
bV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxT
dGF0ZS5zaGFkb3cuaWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNl
dFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNo
YWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0U3RhdGUuc2hh
ZG93UmFkaXVzTW9kZSk7CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRUZXh0RHJhd2luZ01v
ZGUoY29udGV4dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldFRleHREcmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKIH0KIAog
dm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9u
dCYgZm9udCwgRm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTMwMiw3ICszMDAs
NyBAQCB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmlu
Z1N0YXRlUmVmLCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgICAgICByZXR1cm47CiAKICNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0
aW9uKG1faW50ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBhdXRvIHRleHRQ
b3NpdGlvbiA9IENHQ29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCkpOwogICAgIEFTU0VSVCghdGV4dFBvc2l0aW9uLngpOwogICAgIEFTU0VS
VCghdGV4dFBvc2l0aW9uLnkpOwogI2VuZGlmCkBAIC0zMjEsNyArMzE5LDcgQEAgdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dH
U3RhdGVSZWYgZ3N0YXQKICAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0byBlYWNo
IG90aGVyLCBhbmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKICAgICAvLyBDVE0gKiBjdXJyZW50VGV4
dE1hdHJpeCA9IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAogICAgIC8vIGN1cnJlbnRU
ZXh0TWF0cml4ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCi0gICAgQWZmaW5l
VHJhbnNmb3JtIGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2lu
dGVybmFsQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN1
cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBjdG1GaXh1cDsKICAg
ICBpZiAoYXV0byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0
cml4LmludmVyc2UoKSkKICAgICAgICAgY3RtRml4dXAgPSBjdXJyZW50VGV4dE1hdHJpeCAqIGlu
dmVydGVkT3JpZ2luYWxUZXh0TWF0cml4LnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggNTRkODU0NzEyM2Y4OTQ3ZDZmMmZh
Y2Q3ZmNhNmY5OTUxODFhMjY3MS4uMzk1N2M0NTc2ZmU5MTJkNjgxMDIwNzYxMDAxY2MyNGY2ODY4
ODYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmNwcApAQCAtMzQsOSArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlz
cGxheUxpc3QgewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBSZWNv
cmRlcjo6RGVsZWdhdGUqIGRlbGVnYXRlKQotICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0Nv
bnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxS
ZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVn
YXRlKTsKLSAgICB9KQorICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVs
ZWdhdGUpCiB7CiB9CiAKQEAgLTQ2LDEzICs0NCw2IEBAIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiAg
ICAgbV9yZXBsYXllZERpc3BsYXlMaXN0LnJlc2V0KCk7CiB9CiAKLVJlY29yZGVyJiBEcmF3aW5n
Q29udGV4dDo6cmVjb3JkZXIoKQotewotICAgIGF1dG8qIGdyYXBoaWNzQ29udGV4dEltcGwgPSBj
b250ZXh0KCkuaW1wbCgpOwotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHRJbXBsKTsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVjb3JkZXImPigqZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci19Ci0K
IHZvaWQgRHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQpCiB7CiAgICAgaWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKaW5kZXggZDM3YzA3MzVi
ZWI1NTQ5MmQ5MGZmOWVjZTRjYTRkYjc5OTVkNWY1OC4uOTY1NjM2MzRkNTdmNDA5NGIzYzJjYmE2
ZjA2NzQwZjUwNjNkZDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0gPSB7IH0sIFJlY29yZGVyOjpEZWxlZ2F0ZSogPSBudWxs
cHRyKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgUmVjb3JkZXImIHJlY29yZGVyKCk7CisgICAgUmVjb3JkZXImIHJlY29yZGVyKCkg
eyByZXR1cm4gbV9jb250ZXh0OyB9OwogICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgp
IHsgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3Bs
YXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25z
dCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
OyB9CkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
cGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR3Jh
cGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBSZWNvcmRlciBtX2NvbnRleHQ7CiAgICAgRGlz
cGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1vcnlEaXNw
bGF5TGlzdD4gbV9yZXBsYXllZERpc3BsYXlMaXN0OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
aW5kZXggMWE0ZWE2ZGUzYjVhOGNlMzVkOGU3NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIyMmUyMTgz
YTM5MTAzYmQ2OTg1MzQ0NjRkZjNjYjBhOGZmOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmNwcApAQCAtNjA1LDExICs2MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAKIHZvaWQg
RHJhd1BhdGg6OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSNpZiBV
U0UoQ0cpCiAgICAgY29udGV4dC5kcmF3UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3RJdGVtcy5oCmluZGV4IDA3NDA0MWYyNmExZTk2NGRjNGM3NmY0ODJiYzRjOTkzZTg3ZWUzMTUu
LmYxMTdjZmE4MzkzNjA4OWU3MWZkMDVhYjc4NjQ4YmQyNDhkNWU3OTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMjc5LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgUmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3N0cm9rZVBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogICAg
IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciBmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fZmlsbFBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogCi0g
ICAgc3RhdGljIHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3Mp
OwotCi0gICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNo
YW5nZUZsYWdzKTsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVu
Y29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9u
YWw8U2V0U3RhdGU+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTMzNSw5ICszMzEsNyBAQCB2b2lk
IFNldFN0YXRlOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0ZS5zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93
Qmx1cjsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBVU0UoQ0cp
Ci0gICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRp
ZiAvLyBVU0UoQ0cpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsK
ICAgICB9CiAKICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC00NjMsMTQgKzQ1NywxMiBAQCBPcHRpb25h
bDxTZXRTdGF0ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiAgICAgICAg
IHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAKLSNpZiBV
U0UoQ0cpCi0gICAgICAgIE9wdGlvbmFsPGJvb2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0g
ICAgICAgIGRlY29kZXIgPj4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgaWYgKCFz
aGFkb3dzVXNlTGVnYWN5UmFkaXVzKQorICAgICAgICBPcHRpb25hbDxTaGFkb3dSYWRpdXNNb2Rl
PiBzaGFkb3dSYWRpdXNNb2RlOworICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7
CisgICAgICAgIGlmICghc2hhZG93UmFkaXVzTW9kZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5
UmFkaXVzID0gKnNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENHKQorICAg
ICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFk
b3dSYWRpdXNNb2RlKTsKICAgICB9CiAKICAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDY5NDQ4Mjhk
ZmM2NGI4NzRiOTM3Y2VlYWRmMmFlZGMyYTY3MzgxMTUuLjgyYjJjN2FiNjUxMzgyMTBiZjNiNjU0
ZTU5MmVkMzA3MWU0ZjgxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRl
ci5jcHAKQEAgLTMzLDE1ICszMywxNSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERp
c3BsYXlMaXN0IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYg
c3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRy
YXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0gICAgOiBH
cmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlM
aXN0KQorUmVjb3JkZXI6OlJlY29yZGVyKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwg
RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0Rl
Y29uc3RydWN0aW9uKQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKICAgICAsIG1f
ZGVsZWdhdGUoZGVsZWdhdGUpCiAgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQogICAgICwgbV9kcmF3
R2x5cGhzUmVjb3JkZXIoKnRoaXMsIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTUwLDkg
KzUwLDggQEAgUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmEKICAgICBtX3N0YXRlU3RhY2suYXBwZW5k
KHsgc3RhdGUsIGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOwogfQogCi1SZWNvcmRlcjo6UmVj
b3JkZXIoUmVjb3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IEdyYXBoaWNzQ29udGV4
dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3Qp
CitSZWNvcmRlcjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rp
c3BsYXlMaXN0KQogICAgICwgbV9kZWxlZ2F0ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAgICAsIG1f
aXNOZXN0ZWQodHJ1ZSkKICAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBwYXJlbnQu
bV9kcmF3R2x5cGhzUmVjb3JkZXIuZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKCkpCkBAIC0xNjYs
MTEgKzE2NSw2IEBAIFJlbmRlcmluZ01vZGUgUmVjb3JkZXI6OnJlbmRlcmluZ01vZGUoKSBjb25z
dAogICAgIHJldHVybiBtX2RlbGVnYXRlID8gbV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9kZSgpIDog
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJT
aGFkb3coKQotewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQogdm9pZCBSZWNvcmRl
cjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgYXBwZW5kPFNldExpbmVDYXA+
KGxpbmVDYXApOwpAQCAtMjA2LDYgKzIwMCwxMCBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmREcmF3
R2x5cGhzSXRlbVdpdGhDYWNoZWRGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQgog
CiB2b2lkIFJlY29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGlt
YWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAgIGlmICgh
Y2FuRHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIG1fZGlzcGxheUxpc3QuY2FjaGVJbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlcik7CiAgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VC
dWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKIH0KQEAgLTI3MCw3ICsyNjgsNyBAQCB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgYXBwZW5kPFNldENUTT4odHJhbnNm
b3JtKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCitBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICAvLyBG
SVhNRTogUmVzcGVjdCB0aGUgZ2l2ZW4gdmFsdWUgb2YgSW5jbHVkZURldmljZVNjYWxlLgogICAg
IHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CkBAIC0yOTgsNyArMjk2LDcgQEAgdm9pZCBSZWNv
cmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludDIpCiAgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLXZv
aWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlTGluZXMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKICAgICBh
cHBlbmQ8RHJhd0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCks
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQpAQCAtMzI4LDYg
KzMyNiwxOCBAQCB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgYXBwZW5kPERyYXdGb2N1c1Jp
bmdSZWN0cz4ocmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAorI2lmIFBMQVRGT1JN
KE1BQykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwg
Ym9vbCYsIGNvbnN0IENvbG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91Ymxl
LCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5k
aWYKKwogdm9pZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewog
ICAgIGFwcGVuZDxGaWxsUmVjdD4ocmVjdCk7CkBAIC00NDAsMTAgKzQ1MCw5IEBAIHZvaWQgUmVj
b3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAg
IGFwcGVuZDxDbGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IFJlY29yZGVy
OjpjbGlwQm91bmRzKCkKK0ludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewot
ICAgIFdURkxvZ0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0
ZWQgd2l0aCBEaXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIEludFJlY3QoLTIw
NDgsIC0yMDQ4LCA0MDk2LCA0MDk2KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJy
ZW50U3RhdGUoKS5jbGlwQm91bmRzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
KQpAQCAtNDUyLDM1ICs0NjEsMzQgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QKICAgICBhcHBl
bmQ8Q2xpcFRvSW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRp
ZmllcigpLCBkZXN0UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21t
YW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJh
d2luZ0Z1bmN0aW9uKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1
bHQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBo
aWNzQ29udGV4dCBuZXN0ZWRDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsK
LSAgICAgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3Rp
bmF0aW9uLnNpemUoKSk7CisgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGRlc3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RN
IG1hdGNoZXMgSW1hZ2VCdWZmZXIncyBpbml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNm
b3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRl
RGV2aWNlU2NhbGUpOwotICAgICAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhT
Y2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBl
eHBhbmRlZEludFNpemUoZGVzdGluYXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgx
LCAtMSk7Ci0gICAgICAgIGluaXRpYWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdo
dCgpKTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24u
c2l6ZSgpKTsKKyAgICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGlu
aXRpYWwgQ1RNLgorICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUg
c2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAg
IGF1dG8gc2NhbGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBz
Y2FsZUZhY3Rvcik7CisgICAgQWZmaW5lVHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlh
bENUTS5zY2FsZSgxLCAtMSk7CisgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNp
emUuaGVpZ2h0KCkpOworICAgIGluaXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0
aW9uLnNpemUoKSk7CiAKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4o
bmV3IFJlY29yZGVyKCp0aGlzLCBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0
aWFsQ2xpcCwgaW5pdGlhbENUTSkpOwotICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRl
eHQoKnRoaXMsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RN
KTsKICAgICBhcHBlbmQ8QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBj
b2xvclNwYWNlKTsKICAgICBkcmF3aW5nRnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBw
ZW5kPEVuZENsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5B
QkxFKFZJREVPKQotYm9vbCBSZWNvcmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1l
ZGlhUGxheWVyJiBwbGF5ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZp
ZXIoKTsKKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwog
fQogCisjaWYgRU5BQkxFKFZJREVPKQogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlh
KE1lZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Cisg
ICAgaWYgKCFwbGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6
cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47
CisgICAgfQogICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFp
bnRGcmFtZUZvck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjUs
NyBAQCBGbG9hdFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9h
dFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9h
dCBzaGFkb3dSYWRpdXM7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNz
Q29udGV4dCgpLmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29s
b3IpKSB7CisgICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hh
ZG93Q29sb3IpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAg
ICAgICAgIHNoYWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4
dGVudC5pbmZsYXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1
LDExICs1NTMsNiBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25z
dAogICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYg
UmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzOwotfQotCiB2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0
ZShmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBiODc2ZDZhZGI1MTQ3M2YxZjMwYWFi
ZGMyYmEyNWFhM2I2MDI0MTliLi4wZDg2NjFjMTc5YzdjYTljN2M5ZDIxZjE5NDM0MGM5N2JiOTk0
NWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4
LDcgQEAKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJh
d0dseXBoc1JlY29yZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRl
eHRGbGFncy5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEy
IEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKIAotY2xhc3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFz
cyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoK
ICAgICBjbGFzcyBEZWxlZ2F0ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGlj
c0NvbnRleHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29u
c3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdh
dGUqID0gbnVsbHB0ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rp
b24gPSBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25z
dHJ1Y3QpOworICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3Jk
ZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0ds
eXBoc0RlY29uc3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmly
dHVhbCB+UmVjb3JkZXIoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZm
ZXIoY29uc3QgUGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCk7CkBAIC03NywxNSArNzcsMjQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBEcmF3R2x5cGhzUmVjb3JkZXI7Ci0gICAgUmVjb3JkZXIoUmVjb3JkZXIm
IHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRp
YWxDVE0pOworICAgIFJlY29yZGVyKFJlY29yZGVyJiBwYXJlbnQsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBpbml0aWFsQ1RNKTsKIAogICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZl
cihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0IG92ZXJyaWRlOworICAgIC8vIEZJWE1FOiBNYXli
ZSByZW1vdmUgdGhpcz8KKyAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1
ZmZlciYpIGNvbnN0OwogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyNpZiBVU0UoQ0cpIHx8IFVTRShE
SVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgb3ZlcnJpZGUgeyB9
CisgICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIG92ZXJyaWRlIHsg
fQorI2VuZGlmCisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQorICAgIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2ws
IFN0cm9rZVN0eWxlKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2
b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFk
b3coKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsK
ICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQp
IG92ZXJyaWRlOwpAQCAtMTA1LDcgKzExNCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogCi0jaWYgVVNFKENHKQorI2lmIFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKQogICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgb3ZlcnJpZGU7CiAjZW5kaWYKQEAgLTEyMCwxNCAr
MTI5LDIwIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3TGluZShjb25z
dCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcykgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0
aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzLCBTdHJva2VTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBv
dmVycmlkZTsKICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRl
OworCiAgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxGbG9hdFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBv
dmVycmlkZTsKIAorI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0
UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7CisjZW5kaWYKKwogICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwogICAgIHZv
aWQgcmVzdG9yZSgpIG92ZXJyaWRlOwogCkBAIC0xMzYsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q1RNKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOworICAgIEFm
ZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpIG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVy
cmlkZTsKQEAgLTE0NSwxMiArMTYwLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJy
aWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIEludFJlY3QgY2xp
cEJvdW5kcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25z
dCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYp
PiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdp
bmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChH
cmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
dm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50RnJhbWVGb3JNZWRpYShjb25z
dCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpAQCAtMTczLDcgKzE4OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBhdXRvIGl0ZW0g
PSBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgICAgICAgICBpZiAoYXV0byBy
ZWN0ID0gaXRlbS5sb2NhbEJvdW5kcyhncmFwaGljc0NvbnRleHQoKSkpCisgICAgICAgICAgICBp
ZiAoYXV0byByZWN0ID0gaXRlbS5sb2NhbEJvdW5kcygqdGhpcykpCiAgICAgICAgICAgICAgICAg
bV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVudChleHRlbnRGcm9tTG9jYWxCb3VuZHMo
KnJlY3QpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8gcmVjdCA9IGl0ZW0uZ2xvYmFsQm91
bmRzKCkpCiAgICAgICAgICAgICAgICAgbV9kaXNwbGF5TGlzdC5hZGREcmF3aW5nSXRlbUV4dGVu
dCgqcmVjdCk7CkBAIC0xOTUsNyArMjEwLDYgQEAgcHJpdmF0ZToKICAgICBGbG9hdFJlY3QgZXh0
ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZsb2F0UmVjdCYpIGNvbnN0OwogICAgIAogICAgIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgY3RtKCkgY29uc3Q7Ci0gICAgY29uc3QgRmxvYXRSZWN0JiBj
bGlwQm91bmRzKCkgY29uc3Q7CiAKICAgICBzdHJ1Y3QgQ29udGV4dFN0YXRlIHsKICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIGN0bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db2xvck1hYy5tbQppbmRleCA2NWJjYTY3MGY5Mjg2ZDI1YTE5NTE5MjFiODVmMGEw
NWEwMTUyZDUxLi44OWQ4ODJjNTdmNDc2MWU1NDZkZDQyNDcwMWYzM2QyZmIyMDMxZjM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCkBA
IC0yOCw2ICsyOCw3IEBACiAKICNpZiBVU0UoQVBQS0lUKQogCisjaW1wb3J0ICJHcmFwaGljc0Nv
bnRleHRDRy5oIgogI2ltcG9ydCAiTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmgiCiAjaW1w
b3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8d3RmL0xvY2suaD4KQEAg
LTg1LDcgKzg2LDcgQEAgc3RhdGljIE9wdGlvbmFsPFNSR0JBPHVpbnQ4X3Q+PiBtYWtlU2ltcGxl
Q29sb3JGcm9tTlNDb2xvcihOU0NvbG9yICpjb2xvcikKICAgICAgICAgUmV0YWluUHRyPE5TQml0
bWFwSW1hZ2VSZXA+IG9mZnNjcmVlblJlcCA9IGFkb3B0TlMoW1tOU0JpdG1hcEltYWdlUmVwIGFs
bG9jXSBpbml0V2l0aEJpdG1hcERhdGFQbGFuZXM6bmlsIHBpeGVsc1dpZGU6MSBwaXhlbHNIaWdo
OjEKICAgICAgICAgICAgIGJpdHNQZXJTYW1wbGU6OCBzYW1wbGVzUGVyUGl4ZWw6NCBoYXNBbHBo
YTpZRVMgaXNQbGFuYXI6Tk8gY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlIGJ5
dGVzUGVyUm93OjQgYml0c1BlclBpeGVsOjMyXSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0
IGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRt
YXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dENHIGJpdG1hcENvbnRleHQoW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dFdpdGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXAuZ2V0KCldLkNHQ29udGV4dCk7CiAg
ICAgICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoYml0bWFwQ29u
dGV4dCk7CiAKICAgICAgICAgW2NvbG9yIGRyYXdTd2F0Y2hJblJlY3Q6TlNNYWtlUmVjdCgwLCAw
LCAxLCAxKV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2Vi
TGF5ZXIubW0KaW5kZXggY2U3YWJkN2I0ZTk1ZWViMzg5NmFlNWQ5YjNjYTRkMWNlMGZlYjllZi4u
NTU0ODBiNTJiOTFlMDI4NjJmZjBiZmMxMzA2ZGE4MGQ2MDNjNTQyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtMjYsNyArMjYs
NyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgogCi0jaW1wb3J0
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1w
b3J0ICJHcmFwaGljc0xheWVyQ0EuaCIKICNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllci5oIgogI2lt
cG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CkBAIC01MSw3ICs1MSw3IEBAIC0gKHZvaWQp
ZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKICAgICBhdXRvIGxheWVyID0g
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXJGb3JMYXllcigoX19icmlk
Z2Ugdm9pZCopc2VsZik7CiAgICAgaWYgKGxheWVyKSB7Ci0gICAgICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpSZXBhaW50UmVjdExpc3QgcmVjdHNUb1BhaW50ID0gV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpjb2xsZWN0UmVjdHNUb1BhaW50KGdyYXBoaWNzQ29udGV4dCwg
bGF5ZXIuZ2V0KCkpOwogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmRyYXdMYXll
ckNvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgbGF5ZXIuZ2V0KCksIHJlY3RzVG9QYWludCwgc2Vs
Zi5pc1JlbmRlcmluZ0luQ29udGV4dCA/IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludFNuYXBz
aG90dGluZyA6IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludE5vcm1hbCk7CiAgICAgfQpAQCAt
MTI4LDcgKzEyOCw3IEBAIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRl
eHQKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGF1dG8gbGF5ZXIgPSBXZWJDb3Jl
OjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChfX2JyaWRnZSB2b2lk
KilzZWxmKTsKICAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93bmVyKCkpIHsKLSAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAg
ICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGxheWVyLT5hY2NlbGVyYXRl
c0RyYXdpbmcoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlci5jcHAKaW5kZXggZjMyNzY0MzY4NTFjYzdlMDFkNDcwYzU3MGQ5ZDlm
MDZjMjNkNWZjNS4uNTc3NGQwZGUwZTk0MDkyZDg0YjczMmU5ODQzOTA2MzYzZTA1NjI2NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9O
aWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAKQEAgLTcyLDkgKzcyLDggQEAgYXV0byBjcmVhdGVDb21tYW5kKCkgLT4gc3RkOjplbmFi
bGVfaWZfdDxzdGQ6OmlzX2Jhc2Vfb2Y8T3BlcmF0aW9uRGF0YTw+LCBUPjo6dmEKICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxUPigpOwogfQogCi1DYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGFpbnRpbmdPcGVyYXRp
b25zJiBjb21tYW5kTGlzdCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAg
ICAsIG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCitDYWlyb09wZXJhdGlvblJlY29yZGVyOjpD
YWlyb09wZXJhdGlvblJlY29yZGVyKFBhaW50aW5nT3BlcmF0aW9ucyYgY29tbWFuZExpc3QpCisg
ICAgOiBtX2NvbW1hbmRMaXN0KGNvbW1hbmRMaXN0KQogewogICAgIG1fc3RhdGVTdGFjay5hcHBl
bmQoeyB7IH0sIHsgfSwgRmxvYXRSZWN0OjppbmZpbml0ZVJlY3QoKSB9KTsKIH0KQEAgLTE1NCwx
MCArMTUzLDYgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjp1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXAKICAgICB9CiB9CiAKLXZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQotewotfQotCiB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQogewogICAgIHN0cnVj
dCBTZXRMaW5lQ2FwIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8TGlu
ZUNhcD4gewpAQCAtMjUwLDcgKzI0NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJl
Y3QsIENhaXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkp
OwogfQogCkBAIC0yNzAsNyArMjY1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwg
Y29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOwor
ICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVudCYgZ3JhZGllbnQpCkBAIC0y
OTIsNyArMjg3LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxS
ZWN0PihyZWN0LCBncmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0pKSk7CiB9CiAKQEAgLTMxNiw3ICszMTEsNyBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBjb21wb3NpdGVP
cGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpLCBzdGF0ZS5jb21w
b3NpdGVPcGVyYXRvcikpOwogfQogCkBAIC0zNDYsNyArMzQxLDcgQEAgdm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91
bmRlZFJlY3QKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSb3VuZGVkUmVjdD4ocm91bmRlZFJlY3QsIGNvbG9y
LCBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlLCBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpKSk7CiB9CiAKQEAgLTM2Nyw3ICszNjIsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
cwogICAgIH07CiAKICAgICBVTlVTRURfUEFSQU0oY29sb3IpOwotICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9sZVJlY3QsIENh
aXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSkpOworICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlPihyZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSkpOwogfQogCiB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zODYsNyArMzgx
LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aChjb25zdCBQYXRoJiBw
YXRoKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250
ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFBhdGg+KHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC00MDgsNyArNDAzLDcgQEAg
dm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQyOCw3ICs0MjMs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0
byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxTdHJva2VSZWN0PihyZWN0
LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQ0OCw3ICs0NDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9r
ZVBhdGg+KHBhdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQ3MCw3ICs0NjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICB9
CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
KyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1h
bmQ8U3Ryb2tlRWxsaXBzZT4ocmVjdCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNTIzLDcgKzUxOCw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdHbHlwaHM+KENhaXJvOjpGaWxsU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCiAgICAgICAgIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSksIHBvaW50LAogICAgICAgICBSZWZQdHI8Y2Fpcm9fc2NhbGVkX2ZvbnRf
dD4oZm9udC5wbGF0Zm9ybURhdGEoKS5zY2FsZWRGb250KCkpLApAQCAtNTUzLDcgKzU0OCw3IEBA
IHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdl
JiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShpbWFn
ZVNpemUpOwotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAg
ICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8
RHJhd05hdGl2ZUltYWdlPihuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCksIGRlc3RSZWN0LCBz
cmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhvcHRpb25zLCBzdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KSwgc3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsK
IH0KIApAQCAtNTkzLDcgKzU4OCw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJh
d1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxEcmF3UmVjdD4ocmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcikpOwogfQogCkBAIC02MTMsMTEgKzYw
OCwxMSBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludAogICAgICAgICB9CiAgICAgfTsKIAotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmU+KHBv
aW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRl
LnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKSk7CiB9CiAKLXZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmlu
dGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzKQordm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVu
ZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewogICAgIHN0cnVjdCBEcmF3TGluZXNGb3JUZXh0IGZp
bmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8RmxvYXRQb2ludCwgZmxvYXQs
IERhc2hBcnJheSwgYm9vbCwgYm9vbCwgQ29sb3I+IHsKICAgICAgICAgdmlydHVhbCB+RHJhd0xp
bmVzRm9yVGV4dCgpID0gZGVmYXVsdDsKQEAgLTYzMyw3ICs2MjgsNyBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0xpbmVzRm9yVGV4dD4ocG9pbnQsIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ryb2tlQ29sb3Ip
KTsKIH0KIApAQCAtNjcyLDE0ICs2NjcsMTAgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9Owog
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3RWxs
aXBzZT4ocmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ry
b2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcykpOwogfQogCi12b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCiB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIHN0cnVjdCBEcmF3
Rm9jdXNSaW5nIGZpbmFsIDogUGFpbnRpbmdPcGVyYXRpb24sIE9wZXJhdGlvbkRhdGE8UGF0aCwg
ZmxvYXQsIENvbG9yPiB7CkBAIC05MDMsNyArODk0LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgc3Rh
dGUuY3RtSW52ZXJzZSA9IGludmVyc2UudmFsdWUoKTsKIH0KIAotQWZmaW5lVHJhbnNmb3JtIENh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpnZXRDVE0o
R3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fc3RhdGVTdGFjay5sYXN0KCkuY3RtOwogfQpAQCAtMTAzMiw3ICsxMDIzLDcgQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKICAgICB9CiB9CiAKLUludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xpcEJvdW5kcygpCitJbnRSZWN0IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBCb3VuZHMo
KSBjb25zdAogewogICAgIGF1dG8mIHN0YXRlID0gbV9zdGF0ZVN0YWNrLmxhc3QoKTsKICAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChzdGF0ZS5jdG1JbnZlcnNlLm1hcFJlY3Qoc3RhdGUuY2xp
cEJvdW5kcykpOwpAQCAtMTA3NiwxNSArMTA2NywxNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVj
b3JkZXI6OmFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8UGFpbnRpbmdPcGVyYXRpb24+JiYgY29tbWFu
ZAogICAgIG1fY29tbWFuZExpc3QuYXBwZW5kKFdURk1vdmUoY29tbWFuZCkpOwogfQogCi12b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBo
aWNzQ29udGV4dCYpPiYmKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNS
ZXN1bHQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQo
R3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7CiAgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4K
KyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCiAj
aWYgRU5BQkxFKFZJREVPKQotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1l
Rm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVz
dGluYXRpb24pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAppbmRleCAzMDhmMWZmNjM2NTZhZGE0MDlmMGQ1ZjUw
MzZiYzkxZTI1ZDdiNmQyLi43N2FlNTBkZjA0OTJkM2FiZjg4ZmRmN2M1YzMzOTk3Mjc3YmJjNWJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2Nh
aXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlci5oCkBAIC0yOCwyMSArMjgsMjAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiTmljb3NpYVBhaW50aW5nT3BlcmF0aW9uLmgiCiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsK
IAotY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRJbXBsIHsKK2NsYXNzIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIgZmluYWwg
OiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IHsKIHB1YmxpYzoKLSAgICBDYWlyb09w
ZXJhdGlvblJlY29yZGVyKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIFBhaW50aW5nT3BlcmF0
aW9ucyYpOworICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJik7
CiAKIHByaXZhdGU6CiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9y
bUNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKICAgICB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlJiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TGluZUNhcChXZWJD
b3JlOjpMaW5lQ2FwKSBvdmVycmlkZTsKICAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IFdlYkNv
cmU6OkRhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKQEAgLTUzLDYgKzUyLDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdl
YkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmLCBXZWJDb3JlOjpHcmFkaWVudCYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImLCBX
ZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKSBvdmVycmlkZTsK
KyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgV2ViQ29yZTo6RmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGUgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgfQogICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYsIFdlYkNvcmU6OkJsZW5kTW9kZSkgb3Zl
cnJpZGU7CiAgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBXZWJDb3JlOjpG
bG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29y
ZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFdlYkNvcmU6OlBh
dGgmKSBvdmVycmlkZTsKQEAgLTcwLDEwICs3MCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRy
YXdSZWN0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpG
bG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IFdl
YkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNvcmU6OkRhc2hB
cnJheSYsIGJvb2wsIGJvb2wpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBXZWJDb3Jl
OjpEYXNoQXJyYXkmLCBib29sLCBib29sLCBXZWJDb3JlOjpTdHJva2VTdHlsZSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKICAgICB2
b2lkIGRyYXdFbGxpcHNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd1BhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFdlYkNvcmU6OlBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0
IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYpIG92ZXJyaWRlOwpAQCAtODYsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
c2NhbGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRDVE0oY29uc3QgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAg
V2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNm
b3JtIGdldENUTShXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQp
IG92ZXJyaWRlOwogICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKQEAg
LTk1LDEyICs5NCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3Jl
OjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBPdXQoY29uc3QgV2ViQ29yZTo6
UGF0aCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgV2ViQ29yZTo6UGF0aCYs
IFdlYkNvcmU6OldpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBC
b3VuZHMoKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6OkltYWdlQnVm
ZmVyJiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlw
VG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwg
Y29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CisgICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgY2xpcFRvRHJhd2luZ0NvbW1h
bmRzKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IFdlYkNvcmU6
OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Jik+JiYpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShWSURFTykKICAgICB2b2lkIHBhaW50
RnJhbWVGb3JNZWRpYShXZWJDb3JlOjpNZWRpYVBsYXllciYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0
UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1l
ZGlhKGNvbnN0IFdlYkNvcmU6Ok1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KICNlbmRpZgogCiAgICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0
KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYVBhaW50aW5nQ29u
dGV4dENhaXJvLmNwcAppbmRleCAwMDExMDBmNzc3ODFlNGNmNWI4YzFkODdhMmM2YzM3Y2NlOGFh
ZjU0Li40OWFiY2FhNDUyNTMxNDUzODRiMzU1ODg0Njg2N2UwY2ZiZDA2YWQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQ
YWludGluZ0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCkBAIC0z
Miw3ICszMiw3IEBACiAjaWYgVVNFKENBSVJPKQogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJOaWNvc2lhQnVmZmVyLmgiCiAjaW5jbHVk
ZSAiTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFp
bnRpbmdPcGVyYXRpb25SZXBsYXlDYWlyby5oIgpAQCAtNzEsNyArNzEsNyBAQCBQYWludGluZ0Nv
bnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OkZvclBhaW50aW5nKEJ1ZmZlciYgYnVmZmVyKQogCiAg
ICAgbV9jYWlyby5jb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY2Fpcm8uc3VyZmFj
ZS5nZXQoKSkpOwogICAgIG1fcGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpQ
bGF0Zm9ybUNvbnRleHRDYWlybz4obV9jYWlyby5jb250ZXh0LmdldCgpKTsKLSAgICBtX2dyYXBo
aWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PihXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoKm1fcGxhdGZvcm1Db250
ZXh0KSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENhaXJvPigqbV9wbGF0Zm9ybUNvbnRleHQpOwogfQogCiBQYWludGluZ0NvbnRl
eHRDYWlybzo6Rm9yUGFpbnRpbmc6On5Gb3JQYWludGluZygpCkBAIC0xMDQsMTEgKzEwNCw3IEBA
IHZvaWQgUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpyZXBsYXkoY29uc3QgUGFp
bnRpbmdPcGVyYXRpb25zJiBwYWludGluCiAKIFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JSZWNv
cmRpbmc6OkZvclJlY29yZGluZyhQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW5nT3BlcmF0aW9u
cykKIHsKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0PigKLSAgICAgICAgWyZwYWludGluZ09wZXJhdGlvbnNdKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4oY29udGV4dCwgcGFpbnRpbmdPcGVyYXRpb25z
KTsKLSAgICAgICAgfSk7CisgICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI+KHBhaW50aW5nT3BlcmF0aW9ucyk7CiB9CiAKIFBhaW50aW5nQ29u
dGV4dENhaXJvOjpGb3JSZWNvcmRpbmc6On5Gb3JSZWNvcmRpbmcoKSA9IGRlZmF1bHQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dENHV2luLmNwcAppbmRleCA4MzBhZWQwODIyZjU3NWQ1MmM4YmRiZDFjZTI4MmI4
ZWJhN2Q1MGJiLi5kOTc5ZjNkZjA0YjlkZWM1OTRmZTU5M2VjMTYxNzgyYTNiYTgwNTc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250
ZXh0Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBVU0UoQ0cpCiAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJ
bXBsLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKQEAgLTY3LDMy
ICs2NywxOSBAQCBzdGF0aWMgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gQ0dDb250ZXh0V2l0aEhE
QyhIREMgaGRjLCBib29sIGhhc0FscGhhKQogICAgIHJldHVybiBjb250ZXh0OwogfQogCi1HcmFw
aGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3Jh
cGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
CisgICAgOiBHcmFwaGljc0NvbnRleHRDRyhDR0NvbnRleHRXaXRoSERDKGhkYywgaGFzQWxwaGEp
LmdldCgpKQogewotICAgIHBsYXRmb3JtSW5pdChoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQotewot
ICAgIGlmICghaGRjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBoYSkp
OwogICAgIG1fZGF0YS0+bV9oZGMgPSBoZGM7Ci0gICAgaWYgKG1fZGF0YS0+bV9jZ0NvbnRleHQp
IHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGgg
b3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0g
ICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQogfQog
CiAvLyBGSVhNRTogSXMgaXQgcG9zc2libGUgdG8gbWVyZ2UgZ2V0V2luZG93c0NvbnRleHQgYW5k
IGNyZWF0ZVdpbmRvd3NCaXRtYXAgaW50byBhIHNpbmdsZSBBUEkKIC8vIHN1aXRhYmxlIGZvciBh
bGwgY2xpZW50cz8KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQo
SERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkK
IHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwg
aXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJl
Y2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsK
ICAgICBpZiAoIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAgICAgbV9kYXRhLT5yZXN0b3JlKCk7Cisg
ICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5yZXN0b3JlKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTExMCw3ICs5Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN1cHBvcnRBbHBoYUJsZW5kID8ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCA6IGtD
R0ltYWdlQWxwaGFOb25lU2tpcEZpcnN0KSkpOwogCiAgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSkpOwotICAgIENH
Q29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFn
ZS5nZXQoKSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpLT5tX2NnQ29udGV4dC5nZXQoKSwgZHN0UmVjdCwgaW1hZ2UuZ2V0KCkpOwogICAgIAogICAg
IC8vIERlbGV0ZSBhbGwgb3VyIGp1bmsuCiAgICAgOjpEZWxldGVEQyhoZGMpOwpAQCAtMTI0LDIx
ICsxMTEsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKFdpbmRv
d3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG8KICAgICBSZXRhaW5QdHI8Q0dEYXRh
UHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoQ0ZEYXRhKGltYWdlRGF0YS5nZXQoKSkpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBj
Z0ltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGltYWdlLT5zaXplKCkud2lkdGgoKSwgaW1h
Z2UtPnNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIGltYWdlLT5ieXRlc1BlclJvdygpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhh
Rmlyc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShtX2RhdGEtPm1fY2dDb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCks
IGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKKyAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKHBvaW50LngoKSwgcG9pbnQueSgpLCBpbWFnZS0+c2l6ZSgpLndpZHRoKCks
IGltYWdlLT5zaXplKCkuaGVpZ2h0KCkpLCBjZ0ltYWdlLmdldCgpKTsgICAKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgLy8gRklYTUU6IGltcGxlbWVudAog
fQogCiAvLyBGSVhNRTogVGhpcyBpcyBuZWFybHkgaWRlbnRpY2FsIHRvIHRoZSBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcgZnVuY3Rpb24gaW4gR3JhcGhpY3NDb250ZXh0TWFjLm1tLgog
Ly8gVGhlIGNvZGUgY291bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHRDRy5jcHAgYW5kIGJlIHNo
YXJlZC4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENv
bG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBmbG9hdCByYWRpdXMgPSAod2lkdGggLSAxKSAvIDIuMGY7CiAgICAgb2Zmc2V0
ICs9IHJhZGl1czsKICAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxpZCgpID8g
Y2FjaGVkQ0dDb2xvcihjb2xvcikgOiBudWxscHRyOwpAQCAtMTY0LDExICsxNDgsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYg
cmVjdHMsIGZsb2F0IHdpZHRoLAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0eWxlLm1vZGUg
IT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OlNwZWxsaW5nICYmIHN0eWxlLm1vZGUg
IT0gRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGU6Ok1vZGU6OkdyYW1tYXIpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjQ0LDUgKzIyNSwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6Zmx1c2goKQogICAgIENHQ29udGV4dEZsdXNoKG1fY2dDb250ZXh0LmdldCgpKTsKIH0K
IAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDRzo6ZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhOworfQor
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCmluZGV4IGYxNDQyNTcy
Y2M2ZDFkNTRiYmVlNThiZGJjMzZlZGY3NzRhYWJiNjQuLmYzYzhmMWRkMTE0NWIyMWVjNTYxZGFm
OTBhMTNlMzZjZjM3ZDRiN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcApAQCAt
MjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAi
RElCUGl4ZWxEYXRhLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogCiAjaW5jbHVk
ZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTY2LDI4ICs2Niw5IEBAIHN0YXRpYyBjYWlyb190KiBjcmVh
dGVDYWlyb0NvbnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJu
IGNvbnRleHQ7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYywg
Ym9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWly
byhIREMgZGMsIGJvb2wgaGFzQWxwaGEpCisgICAgOiBHcmFwaGljc0NvbnRleHRDYWlybyhjcmVh
dGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBoYXNBbHBoYSkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0
KGRjLCBoYXNBbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQo
SERDIGRjLCBib29sIGhhc0FscGhhKQotewotICAgIGlmICghZGMpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNhaXJvX3QqIGNyID0gY3JlYXRlQ2Fpcm9Db250ZXh0V2l0aEhEQyhkYywgaGFzQWxw
aGEpOwotCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSht
YWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjcikpOwotICAgIG1fZGF0YS0+cGxhdGZv
cm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsKLSAgICBtX2RhdGEt
Pm1faGRjID0gZGM7Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT5jcigpKSB7Ci0gICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBzdGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4K
LSAgICAgICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkpOwotICAgICAgICBzZXRQ
bGF0Zm9ybVN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwotICAgIH0KLSAgICBpZiAoY3IpCi0g
ICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwogfQogI2VuZGlmCiAKQEAgLTEyNyw5ICsxMDgsOSBA
QCBzdGF0aWMgdm9pZCBkcmF3Qml0bWFwVG9Db250ZXh0KFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIGNvbnN0IERJQgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFz
ZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3Vw
cG9ydEFscGhhQmxlbmQpCiB7Ci0gICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFt
X2RhdGEtPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgY3JlYXRl
ZEJpdG1hcCA9ICFkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGMgfHwgaXNJblRyYW5z
cGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFoZGMgfHwgIWNyZWF0ZWRCaXRtYXApIHsKLSAgICAg
ICAgbV9kYXRhLT5yZXN0b3JlKCk7CisgICAgICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
LT5yZXN0b3JlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3OCw0ICsxNTksOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Zmx1c2goKQogfQogI2VuZGlm
CiAKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS5nZXQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKaW5kZXggMjlh
ODJhODk3ODIyOWIwZjU4NzNhYmRmODJiZmFmODA2Y2YxNjU5OC4uNjVlOTdmOTczNDY5MjI4MmQy
N2ZjMWVkNzg0ODhkMTgxNzNjMTYxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
CkBAIC00NywxNyArNDcsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1HcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKEhEQyBoZGMsIGJvb2wgaGFz
QWxwaGEpCiB7CiAgICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwogfQogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0Kiog
cmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgSUQyRDFEQ1JlbmRlclRh
cmdldCoqIHJlbmRlclRhcmdldCwgUkVDVCByZWN0LCBib29sIGhhc0FscGhhKQogewogICAgIC8v
IENyZWF0ZSBhIERDIHJlbmRlciB0YXJnZXQuCiAgICAgYXV0byB0YXJnZXRQcm9wZXJ0aWVzID0g
RGlyZWN0MkQ6OnJlbmRlclRhcmdldFByb3BlcnRpZXMoKTsKIAotICAgIEhSRVNVTFQgaHIgPSBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQoJnRh
cmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CisgICAgSFJFU1VMVCBociA9IEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KCktPkNyZWF0ZURDUmVuZGVyVGFyZ2V0KCZ0
YXJnZXRQcm9wZXJ0aWVzLCByZW5kZXJUYXJnZXQpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NF
RURFRChocikpOwogCiAgICAgKCpyZW5kZXJUYXJnZXQpLT5CaW5kREMoaGRjLCAmcmVjdCk7CkBA
IC02NywxMiArNjcsMTIgQEAgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGhk
YywgSUQyRDFEQ1JlbmRlclRhcmdldCoqIHJlbmRlclRhcmdldCwgUkUKICAgICBtX2RhdGEtPm1f
aGRjID0gaGRjOwogfQogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIEJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpHcmFw
aGljc0NvbnRleHREaXJlY3QyRChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1HcmFw
aGljc0NvbnRleHQsIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmVyVHlwZSkKIHsK
ICAgICBwbGF0Zm9ybUluaXQocGxhdGZvcm1HcmFwaGljc0NvbnRleHQsIHJlbmRlcmVyVHlwZSk7
CiB9CiAKLUlEMkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkKK0lE
MkQxRmFjdG9yeSogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKQogewog
ICAgIHN0YXRpYyBJRDJEMUZhY3RvcnkqIGRpcmVjdDJERmFjdG9yeSA9IG51bGxwdHI7CiAgICAg
aWYgKCFkaXJlY3QyREZhY3RvcnkpIHsKQEAgLTg5LDcgKzg5LDcgQEAgSUQyRDFGYWN0b3J5KiBH
cmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKQogICAgIHJldHVybiBkaXJlY3QyREZhY3Rv
cnk7CiB9CiAKLUlEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5k
ZXJUYXJnZXQoKQorSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
ZWZhdWx0UmVuZGVyVGFyZ2V0KCkKIHsKICAgICBzdGF0aWMgSUQyRDFSZW5kZXJUYXJnZXQqIGRl
ZmF1bHRSZW5kZXJUYXJnZXQgPSBudWxscHRyOwogICAgIGlmICghZGVmYXVsdFJlbmRlclRhcmdl
dCkgewpAQCAtMTA0LDcgKzEwNCw3IEBAIElEMkQxUmVuZGVyVGFyZ2V0KiBHcmFwaGljc0NvbnRl
eHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogICAgIHJldHVybiBkZWZhdWx0UmVuZGVyVGFyZ2V0
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wg
aGFzQWxwaGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQoSERD
IGhkYywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBpZiAoIWhkYykKICAgICAgICAgcmV0dXJuOwpA
QCAtMTM2LDEyICsxMzYsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChI
REMgaGRjLCBib29sIGhhc0FscGhhKQogICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkgPSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0
SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZv
cm1Db250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQpCiB7CiAgICAgcGxhdGZvcm1J
bml0KHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9y
eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUg
cmVuZGVyaW5nVHlwZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5p
dChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogewogICAgIGlmICghcGxhdGZvcm1Db250ZXh0
KQogICAgICAgICByZXR1cm47CkBAIC0xNTUsMTYgKzE1NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRl
eHQsIEJpdAogICAgIC8vIEZJWE1FOiBtX3N0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
PSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dDb250ZXh0R2V0SW50ZXJwb2xhdGlvblF1
YWxpdHkocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6fkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEKCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1QbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUNvbnRl
eHQoKSBjb25zdAogewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBs
YXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsKICAgICBy
ZXR1cm4gJm1fZGF0YS0+cGxhdGZvcm1Db250ZXh0KCk7CiB9CiAKQEAgLTE5NSwzMyArMTkyLDI4
IEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6Y3VycmVudEdsb2JhbEFs
cGhhKCkgY29uc3QKICAgICByZXR1cm4gbV9hbHBoYTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNh
dmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3ND
b250ZXh0OjpzYXZlKCk7CiAgICAgRGlyZWN0MkQ6OnNhdmUoKnBsYXRmb3JtQ29udGV4dCgpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAgICAgRGly
ZWN0MkQ6OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IENPTVB0cjxJRDJEMUJpdG1hcD4mIGltYWdl
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRp
dmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpkcmF3TmF0aXZl
SW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOworICAgIERpcmVjdDJEOjpkcmF3TmF0aXZlSW1hZ2UoKnBsYXRmb3JtQ29udGV4dCgp
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChI
REMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBo
ZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpCiB7Ci0g
ICAgYm9vbCBjcmVhdGVkQml0bWFwID0gbV9pbXBsIHx8ICFtX2RhdGEtPm1faGRjIHx8IGlzSW5U
cmFuc3BhcmVuY3lMYXllcigpOworICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9ICFtX2RhdGEtPm1f
aGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkg
ewotICAgICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgICAgICBEaXJlY3Qy
RDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjYyLDM0ICsyNTQsMzUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dz
Q29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib28KICAgICA6OkRlbGV0
ZURDKGhkYyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcChX
aW5kb3dzQml0bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2Us
IGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9m
ZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBE
b2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKKyAgICBEaXJlY3QyRDo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwogfQogCi1H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0Nv
bnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCitHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6
IG1fcGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVyZXJUeXBl
KHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBp
ZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCi1H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYgb3duZWRQbGF0
Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUg
cmVuZGVyaW5nVHlwZSkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRD4mJiBvd25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiAgICAgOiBtX293bmVkUGxh
dGZvcm1Db250ZXh0KFdURk1vdmUob3duZWRQbGF0Zm9ybUNvbnRleHQpKQogICAgICwgbV9wbGF0
Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRleHQpCiAgICAgLCBtX3JlbmRlcmVyVHlw
ZShyZW5kZXJpbmdUeXBlKQpAQCAtMjk3LDcgKzI5MCw3IEBAIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0
cjxQCiAgICAgaWYgKCFtX3BsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKG1fcmVuZGVyZXJUeXBlID09IEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKKyAgICBpZiAobV9yZW5kZXJlclR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBl
OjpHUFVNZW1vcnkpCiAgICAgICAgIGJlZ2luRHJhdygpOwogfQogCkBAIC0zMTAsOSArMzAzLDgg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKCkKICAgICAgICAgZW5kRHJhdygpOwogfQogCi1JRDJEMVNvbGlkQ29sb3JCcnVz
aCogR3JhcGhpY3NDb250ZXh0OjpicnVzaFdpdGhDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCitJ
RDJEMVNvbGlkQ29sb3JCcnVzaCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIHJldHVybiBwbGF0Zm9ybUNvbnRleHQoKS0+YnJ1c2hXaXRoQ29sb3IoY29sb3JX
aXRoR2xvYmFsQWxwaGEoY29sb3IpKS5nZXQoKTsKIH0KIApAQCAtMzcyLDczICszNjQsNjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnJvdGF0ZShmbG9hdCBhbmdsZSkK
IHsKIH0KIAotRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xvYmFsQWxw
aGEoY29uc3QgQ29sb3ImIGNvbG9yKSBjb25zdAorRDJEMV9DT0xPUl9GIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpjb2xvcldpdGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0
CiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSBjb2xvci50b1NSR0JBTG9zc3k8ZmxvYXQ+KCk7
CiAgICAgcmV0dXJuIEQyRDE6OkNvbG9yRihyLCBnLCBiLCBhICogbV9kYXRhLT5jdXJyZW50R2xv
YmFsQWxwaGEoKSk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6c29saWRTdHJv
a2VCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29s
aWRTdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5t
X3NvbGlkU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4
dDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnNvbGlkRmlsbEJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250
ZXh0KCktPm1fc29saWRGaWxsQnJ1c2guZ2V0KCk7CiB9CiAKLUlEMkQxQnJ1c2gqIEdyYXBoaWNz
Q29udGV4dDo6cGF0dGVyblN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAogewogICAgIHJldHVy
biBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuU3Ryb2tlQnJ1c2guZ2V0KCk7CiB9CiAKLUlE
MkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0CitJRDJE
MUJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0dGVybkZpbGxCcnVzaCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1c2guZ2V0
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpbkRyYXcoKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5iZWdpbkRyYXcoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmVuZERyYXcoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZW5kRHJhdygpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+ZW5kRHJhdygpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Zmx1c2goKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Zmx1c2goKQogewogICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmZsdXNoKCpwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFwYXR0
ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5p
c0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvIHRpbGVJbWFnZSA9IGltYWdlOwogICAgIERpcmVjdDJEOjpk
cmF3UGF0dGVybigqcGxhdGZvcm1Db250ZXh0KCksIFdURk1vdmUodGlsZUltYWdlKSwgSW50U2l6
ZShpbWFnZS5zaXplKCkpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkpOwog
fQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxv
YXQgYm9yZGVyVGhpY2tuZXNzKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdSZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgpKTsKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBEaXJlY3QyRDo6ZHJhd1JlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0
YXRlLnN0cm9rZUNvbG9yKTsKIH0KQEAgLTQ5MCw1MiArNDY5LDI5IEBAIEQyRDFfU1RST0tFX1NU
WUxFX1BST1BFUlRJRVMgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpzdHJva2VTdHls
ZVByb3BlcnRpCiAgICAgcmV0dXJuIEQyRDE6OlN0cm9rZVN0eWxlUHJvcGVydGllcyhtX3BsYXRm
b3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0
Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVKb2luLCBtX3Bs
YXRmb3JtQ29udGV4dC5tX21pdGVyTGltaXQsIEQyRDFfREFTSF9TVFlMRV9TT0xJRCwgMC4wZik7
CiB9CiAKLUlEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VT
dHlsZSgpIGNvbnN0CitJRDJEMVN0cm9rZVN0eWxlKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c3Ryb2tlU3R5bGUoKSBjb25zdAogewogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5zdHJva2VTdHlsZSgpOwogfQogCiAvLyBU
aGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9
PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0
KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3Is
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpmaWxs
RWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUu
c3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYXV0byBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE07IC8v
IEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2luZG93cwogCkBAIC01NDMsMTEg
KzQ5OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaCA9IGFkb3B0Q09NKG1fc3Rh
dGUuc3Ryb2tlUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0aGlzLCBwYXR0ZXJuQWxw
aGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5Rmls
bFBhdHRlcm4oKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlGaWxsUGF0dGVy
bigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IHVzZXJUb0Jhc2VDVE07IC8vIEZJWE1FOiBUaGlzIGlzbid0IHJlYWxseSBuZWVkZWQgb24gV2lu
ZG93cwogCkBAIC01NTUsMTc5ICs1MDgsMTA0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKCkKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9wYXR0ZXJuRmlsbEJydXNo
ID0gYWRvcHRDT00obV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKCp0
aGlzLCBwYXR0ZXJuQWxwaGEsIHVzZXJUb0Jhc2VDVE0pKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRv
JiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpkcmF3UGF0aChj
b250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZp
bGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8
fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQg
PSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnRleHQsIHBh
dGgsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25z
dCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxh
dGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29udGV4dCwgcGF0aCwg
RGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJl
Y3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRv
JiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdChj
b250ZXh0LCByZWN0LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJl
Y3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
KGNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQm
IGdyYWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgYXV0byBicnVz
aCA9IGdyYWRpZW50LmNyZWF0ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KTsKKyAgICBpZiAoIWJydXNoKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1w
bCk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aEdyYWRpZW50KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LCBicnVzaC5nZXQoKSk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQoreworICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09w
ZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7CisKKyAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0
b3IsIGJsZW5kTW9kZSk7CisgICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0
LCByZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0
MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZp
b3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRl
ZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3Vu
ZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUocmVjdCwgcm91bmRlZEhvbGVSZWN0LCBjb2xv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250
ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwogICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3QsIERpcmVjdDJEOjpGaWxsU291
cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNs
aXAoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQo
cGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0
aCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRo
LCBXaW5kUnVsZSBjbGlwUnVsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5jbGlwUGF0aChwYXRoLCBjbGlwUnVsZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJE
OjpjbGlwUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIGNsaXBSdWxlKTsKIH0KIAotSW50
UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwp
Ci0gICAgICAgIHJldHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q2xpcEJv
dW5kcygqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCkBAIC03MzUsMTggKzYxMywxMyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihm
bG9hdCBvcGFjaXR5KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFtX2lt
cGwpOwotCisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNp
dHkpOwogICAgIHNhdmUoKTsKIAogICAgIG1fc3RhdGUuYWxwaGEgPSBvcGFjaXR5OwogCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCksIG9wYWNpdHkpOwogfQogCkBAIC03NTQsMTE5
ICs2MjcsMTEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9y
bVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBEaXJlY3QyRDo6ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIAotICAgIEFTU0VSVCghbV9pbXBs
KTsKLQogICAgIG1fc3RhdGUuYWxwaGEgPSBtX2RhdGEtPmN1cnJlbnRHbG9iYWxBbHBoYSgpOwog
CiAgICAgcmVzdG9yZSgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFu
c3BhcmVuY3lMYXllcnMoKQorYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3VwcG9ydHNU
cmFuc3BhcmVuY3lMYXllcnMoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjp1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgICh2b2lkKW9m
ZnNldDsKLSAgICAodm9pZClibHVyOwotICAgICh2b2lkKWNvbG9yOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRo
aWNrbmVzc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25l
c3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCisg
ICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250
ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKKyAgICAgICAg
ICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUg
b3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Cisg
ICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAg
ICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgo
KSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OworICAgICAgICB9CisgICAgfQogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9r
ZVN0eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3R5bGUpOwotfQorICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCisgICAgICAgIERp
cmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBz
dGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbGltaXQpCi17Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29u
dGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91bGRBbnRp
YWxpYXMpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3Vs
ZCBiZSBwYXJ0IG9mIHRoZSBzdGF0ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxp
bWl0KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRl
LnN0cm9rZUNvbG9yID09IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29s
aWRTdHJva2VCcnVzaCA9IGJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOyAgICAKKyAgICB9
CisgICAgCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxs
Q29sb3JDaGFuZ2UpKSB7CisgICAgICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xv
cik7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hX
aXRoQ29sb3IoZmlsbENvbG9yKCkpOwogICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgp
LCBsaW1pdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKSkgeworICAgICAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0g
ZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9B
TlRJQUxJQVNfTU9ERV9BTElBU0VEOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVy
VGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICB9
CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwot
ICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpBbHBoYUNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuYWxwaGEgPT0gYWxw
aGEpOworICAgICAgICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKICAgICB9CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpjbGVhclJlY3QoKnBsYXRm
b3JtQ29udGV4dCgpLCByZWN0KTsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpKSB7CisgICAgICAgIEQy
RDFfSU5URVJQT0xBVElPTl9NT0RFIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9O
RUFSRVNUX05FSUdIQk9SOworCisgICAgICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQy
RDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToK
KyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05F
SUdIQk9SOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6OkxvdzoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9E
RV9MSU5FQVI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6TWVkaXVtOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElP
Tl9NT0RFX0NVQklDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwb2xh
dGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfSElHSF9RVUFMSVRZX0NVQklDOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgLy8gRklYTUU6IFNldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29u
dGV4dCgpLCBxdWFsaXR5KTsKKyAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgRGlyZWN0MkQ6OnNl
dE1pdGVyTGltaXQoKnBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBEaXJlY3QyRDo6Y2xlYXJSZWN0KCpw
bGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Cit9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAg
ICBEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb250ZXh0LCByZWN0LCBsaW5lV2lkdGgsIERpcmVjdDJE
OjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChjYXApOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6c2V0TGluZUNhcCgqcGxhdGZvcm1Db250ZXh0KCksIGNhcCk7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQg
ZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0
IGxlbmd0aCA9IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUo
KTsgKytpKQpAQCAtODc1LDM0MSArNzQyLDE3MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAg
ICAgICAgICBkYXNoT2Zmc2V0ID0gZm1vZChkYXNoT2Zmc2V0LCBsZW5ndGgpICsgbGVuZ3RoOwog
ICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6
OnNldExpbmVEYXNoKCpwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCit2b2lk
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lSm9pbihqb2luKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OnNldExpbmVKb2luKCpwbGF0Zm9ybUNvbnRleHQoKSwgam9pbik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZp
bGxSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2NhbGUoY29uc3QgRmxvYXRT
aXplJiBzaXplKQogewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpzY2FsZSgq
cGxhdGZvcm1Db250ZXh0KCksIHNpemUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnJvdGF0ZShmbG9hdCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
cm90YXRlKGFuZ2xlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnJvdGF0ZSgqcGxhdGZvcm1Db250ZXh0
KCksIGFuZ2xlKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9y
bUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT50cmFuc2xhdGUoeCwgeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjp0cmFuc2xhdGUoKnBsYXRmb3Jt
Q29udGV4dCgpLCB4LCB5KTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRy
YW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zv
cm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Y29uY2F0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJh
bnNmb3JtKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENUTSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAg
Ly8gRklYTUU6IG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0
eSA9IGZhbHNlOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0o
SW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKK0FmZmluZVRyYW5zZm9ybSBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRl
U2NhbGUpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJu
IG1faW1wbC0+Z2V0Q1RNKGluY2x1ZGVTY2FsZSk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTSgqcGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNl
UGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkK
K0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cm91bmRUb0RldmljZVBpeGVscyhj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAo
bV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3Qs
IHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50
aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsKLSAgICBE
YXNoQXJyYXkgd2lkdGhzOwotICAgIHdpZHRocy5hcHBlbmQoMCk7Ci0gICAgd2lkdGhzLmFwcGVu
ZChyZWN0LndpZHRoKCkpOwotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCBy
ZWN0LmhlaWdodCgpLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcywgc3Ryb2tlU3R5bGUp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VT
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3
aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhp
Y2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGly
ZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBtX3N0YXRlLnN0cm9rZUNv
bG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJM
JiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29u
dGV4dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGlu
ZyBjb250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0
cy4KLSAgICB9Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25R
dWFsaXR5IG1vZGUpCi17Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwotCi0gICAg
RDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RF
X05FQVJFU1RfTkVJR0hCT1I7Ci0KLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVy
cG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0OgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRlcnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkxvdzoKLSAgICAgICAgcXVhbGl0eSA9
IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0gRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkhpZ2g6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9MQVRJ
T05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAv
LyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250ZXh0KCksIHF1YWxp
dHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29s
IGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxh
eWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVkZWQuCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29u
dGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmFseSBub3QgbmVlZGVk
LgogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVk
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
Ym9vbCBpc0FjY2VsZXJhdGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKK2Jvb2wgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAoIWhhc1BsYXRmb3Jt
Q29udGV4dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gRGlyZWN0MkQ6
OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MgbW9kZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCiB7Ci0gICAgKHZvaWQpbW9k
ZTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1f
c3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaCA9IGJydXNo
V2l0aENvbG9yKHN0cm9rZUNvbG9yKCkpOworICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgRGly
ZWN0MkQuCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNr
bmVzcyhmbG9hdCB0aGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgQVNTRVJUKG1fc3RhdGUu
c3Ryb2tlVGhpY2tuZXNzID09IHRoaWNrbmVzcyk7Ci0gICAgbV9kYXRhLT5zZXRTdHJva2VUaGlj
a25lc3ModGhpY2tuZXNzKTsKLX0KKyAgICBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9z
dGF0ZS5maWxsUGF0dGVybikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUg
dG8gZmlsbCBlbGxpcHNlcyB3aXRoIHBhdHRlcm4vZ3JhZGllbnQgYnJ1c2hlcyBpbiBEMkQuCisg
ICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIEFTU0VSVChtX3N0YXRlLmZpbGxDb2xvciA9PSBjb2xvcik7Ci0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
bV9zb2xpZEZpbGxCcnVzaCA9IGJydXNoV2l0aENvbG9yKGZpbGxDb2xvcigpKTsKKyAgICBEaXJl
Y3QyRDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLmZp
bGxDb2xvciwgbV9zdGF0ZS5zdHJva2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0
ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KKyAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKICAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIEFTU0VSVCghbV9pbXBsKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKCpwbGF0
Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKKyAgICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRm
b3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9r
ZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wgZW5hYmxlKQordm9pZCBHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhp
bmcpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBVTlVTRURfUEFSQU0oZm9u
dFNtb290aGluZyk7CisgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGF1dG8geE9mZnNldCA9IHBv
aW50LngoKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1HbHlwaHMpOwor
ICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7CisgICAgVmVj
dG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMpOwogCi0gICAg
YXV0byBmb250U21vb3RoaW5nTW9kZSA9IGVuYWJsZSA/IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9E
RV9DTEVBUlRZUEUgOiBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQUxJQVNFRDsKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlNldFRleHRBbnRpYWxpYXNNb2RlKGZvbnRT
bW9vdGhpbmdNb2RlKTsKLX0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhz
OyArK2kpIHsKKyAgICAgICAgaWYgKGkgKyBmcm9tID49IGdseXBoQnVmZmVyLmFkdmFuY2VzQ291
bnQoKSkKKyAgICAgICAgICAgIGJyZWFrOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1BbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFu
Y2VzKGkgKyBmcm9tKTsKKyAgICAgICAgaWYgKCFhZHZhbmNlKQorICAgICAgICAgICAgY29udGlu
dWU7CiAKLSAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBhbHBoYSk7Ci0gICAgbV9kYXRhLT5z
ZXRBbHBoYShhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNv
bXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZy
b20pOworICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwor
ICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7
CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdo
dCgpOworICAgIH0KIAotICAgIEFTU0VSVCghbV9pbXBsKTsKKyAgICBkb3VibGUgc3ludGhldGlj
Qm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOwogCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbigqcGxhdGZvcm1Db250ZXh0KCksIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUp
OworICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBEaXJl
Y3QyRDo6ZHJhd0dseXBocyhtX3BsYXRmb3JtQ29udGV4dCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uo
c3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwg
Z3JhcGhpY3NDb250ZXh0KCkpLAorICAgICAgICBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUp
LCBwb2ludCwgZm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgZ2x5cGhzLCBob3Jpem9udGFsQWR2
YW5jZXMsIGdseXBoT2Zmc2V0cywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERyYXdpbmdN
b2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hh
ZG93Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmlj
ZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQorR3JhcGhpY3NDb250ZXh0OjpD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBU
b0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQogewotICAgIC8vIFRo
aXMgaXMgYSBuby1vcCBmb3IgRGlyZWN0MkQuCisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRl
ZC4KKyAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZp
bGxQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBmaWxs
IGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4KLSAgICAgICAg
ZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1
ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwotICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2Us
IG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNv
bG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CisgICAgYXV0byogY29udGV4dCA9ICZncmFw
aGljc0NvbnRleHQoKTsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKGNvbnRleHQpKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3Qm
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVCghbV9pbXBsKTsKLQotICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50IHx8IG1f
c3RhdGUuc3Ryb2tlUGF0dGVybikgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFi
bGUgdG8gc3Ryb2tlIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQy
RC4KLSAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0
MkQ6OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBzZSwgbV9zdGF0ZS5zdHJv
a2VTdHlsZSwgbV9zdGF0ZS5zdHJva2VDb2xvciwgbV9zdGF0ZS5zdHJva2VUaGlja25lc3MpOwor
ICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCiB9CisjZW5kaWYKKwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAyYjcwYzNjMTczYzkxYTc2YmViZDJlOGU2ZGYyMTU1ZjFhMTU0YWMxLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRC5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiRGly
ZWN0MkRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1
ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVj
dDJELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0j
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhp
Y3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjcmVhdGVG
YWN0b3J5KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpCi17Ci0gICAg
cmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAg
ICAgIFsmcGxhdGZvcm1Db250ZXh0XShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRD4oY29udGV4dCwgcGxhdGZvcm1Db250ZXh0KTsKLSAgICAgICAgfSk7Ci19Ci0KLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
Ci17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3Rv
cnkoCi0gICAgICAgIFtyZW5kZXJUYXJnZXRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEPihjb250ZXh0LCByZW5kZXJUYXJnZXQpOwotICAgICAgICB9KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1D
b250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9wbGF0
Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5n
ZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4ocmVuZGVy
VGFyZ2V0KSkKLSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0
KQotICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlPihtX3BsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZTo6R1BVTWVtb3J5KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5zeW5j
Q29udGV4dChtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6fkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpCi17Ci0gICAgbV9wbGF0Zm9ybUNv
bnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKLX0KLQotYm9vbCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICZtX3BsYXRmb3JtQ29udGV4dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYgKGZsYWdz
ICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAgICAgICAg
RGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCi0gICAgICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ry
b2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlm
IChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAg
aWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFu
aW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5j
ZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBh
dXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9jYXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0gICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQg
PSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zm
c2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9Owot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRD
b21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJh
dG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlh
cyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGVhclNoYWRvdygp
Ci17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5lQ2FwKExp
bmVDYXAgbGluZUNhcCkKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUNhcChtX3BsYXRmb3JtQ29u
dGV4dCwgbGluZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKLXsK
LSAgICBEaXJlY3QyRDo6c2V0TGluZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRhc2hlcywgZGFz
aE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRMaW5l
Sm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4obV9w
bGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBEaXJlY3Qy
RDo6c2V0TWl0ZXJMaW1pdChtX3BsYXRmb3JtQ29udGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgRGlyZWN0MkQ6
OkZpbGxTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0
YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBE
aXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCi17Ci0gICAgYXV0byBicnVzaCA9IGdyYWRpZW50LmNyZWF0
ZUJydXNoKG1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKLSAgICBpZiAoIWJydXNo
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQo
bV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRl
LmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUp
OwotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3Is
IERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBC
bGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRv
ciwgYmxlbmRNb2RlKTsKLQotICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShz
dGF0ZSk7Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCi0gICAgICAgIERpcmVjdDJEOjpmaWxs
Um91bmRlZFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7
Ci0gICAgZWxzZQotICAgICAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQs
IHJlY3QucmVjdCgpLCBjb2xvciwgc2hhZG93U3RhdGUpOwotCi0gICAgRGlyZWN0MkQ6OlN0YXRl
OjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0
b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAg
RGlyZWN0MkQ6OkZpbGxTb3VyY2UgZmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkp
OwotICAgIGZpbGxTb3VyY2UuYnJ1c2ggPSBtX3BsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xv
cihjb2xvcik7Ci0KLSAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgZmlsbFNvdXJjZSwgRGlyZWN0MkQ6
OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJE
OjpmaWxsUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uo
c3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsRWxsaXBzZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBz
ZShyZWN0KTsKLSAgICBmaWxsUGF0aChwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5l
V2lkdGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBsaW5lV2lk
dGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJEOjpzdHJva2VQYXRo
KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCBn
cmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRoOwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0
KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3Qy
RDo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdHbHlwaHMoY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3Ro
aW5nKQotewotICAgIFVOVVNFRF9QQVJBTShmb250U21vb3RoaW5nKTsKLSAgICBpZiAoIWZvbnQu
cGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHhPZmZz
ZXQgPSBwb2ludC54KCk7Ci0gICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0PiBnbHlwaHMobnVtR2x5
cGhzKTsKLSAgICBWZWN0b3I8ZmxvYXQ+IGhvcml6b250YWxBZHZhbmNlcyhudW1HbHlwaHMpOwot
ICAgIFZlY3RvcjxEV1JJVEVfR0xZUEhfT0ZGU0VUPiBnbHlwaE9mZnNldHMobnVtR2x5cGhzKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAg
ICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXNDb3VudCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZXMo
aSArIGZyb20pOwotICAgICAgICBpZiAoIWFkdmFuY2UpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBnbHlwaHNbaV0gPSBnbHlwaEJ1ZmZlci5nbHlwaEF0KGkgKyBmcm9tKTsKLSAg
ICAgICAgaG9yaXpvbnRhbEFkdmFuY2VzW2ldID0gYWR2YW5jZS0+d2lkdGgoKTsKLSAgICAgICAg
Z2x5cGhPZmZzZXRzW2ldLmFkdmFuY2VPZmZzZXQgPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAg
ICBnbHlwaE9mZnNldHNbaV0uYXNjZW5kZXJPZmZzZXQgPSBhZHZhbmNlLT5oZWlnaHQoKTsKLSAg
ICB9Ci0KLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9s
ZE9mZnNldCgpOwotCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OwotICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6
RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291
cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCi0gICAgICAgIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhv
cml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAotICAgICAgICBzdGF0ZS50
ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVj
dDJEOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBhdXRv
JiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdO
YXRpdmVJbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpkcmF3UGF0dGVybigoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNp
emUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLnBsYXRm
b3JtSW1hZ2UoKSkKLSAgICAgICAgRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250
ZXh0LCBXVEZNb3ZlKHN1cmZhY2UpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3Io
KSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlj
a25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6
ZHJhd0xpbmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VT
dHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRy
YXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJs
aW5lcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9r
ZUNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxp
bmVTdHlsZSBzdHlsZSkKLXsKLSAgICBEaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3Qy
RDo6ZmlsbEVsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3Is
IHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tu
ZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXRoKGNv
bnN0IFBhdGgmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRy
YXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwg
ZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG9m
ZnNldCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnNhdmUoKQotewotICAgIERpcmVjdDJEOjpzYXZlKG1fcGxhdGZvcm1Db250
ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnJlc3RvcmUoKQot
ewotICAgIERpcmVjdDJEOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQot
ewotICAgIERpcmVjdDJEOjp0cmFuc2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5S
YWRpYW5zKQotewotICAgIERpcmVjdDJEOjpyb3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xl
SW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBEaXJlY3QyRDo6c2NhbGUobV9wbGF0Zm9y
bUNvbnRleHQsIHNpemUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQotewotICAgIERpcmVj
dDJEOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0pCi17Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkK
LXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNvbnRleHQp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIERpcmVjdDJEOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBEaXJlY3Qy
RDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgRGlyZWN0MkQ6OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcE91dChjb25zdCBQYXRo
JiBwYXRoKQotewotICAgIERpcmVjdDJEOjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRo
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQotewotICAgIERpcmVjdDJEOjpjbGlwUGF0
aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgY2xpcFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcEJvdW5kcygpCi17Ci0gICAgcmV0dXJuIERpcmVj
dDJEOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBidWZmZXIuY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBjb250ZXh0ID0gJmdyYXBo
aWNzQ29udGV4dCgpOwotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoY29udGV4dCkpCi0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0KQotewotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpy
b3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhcGhpY3NDb250ZXh0
OjpSb3VuZGluZ01vZGUpCi17Ci0gICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6cm91bmRUb0Rl
dmljZVBpeGVscyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0
JiwgRGVzdGluYXRpb25Db2xvclNwYWNlLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYp
PiYmKQotewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUo
VklERU8pCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGFpbnRGcmFtZUZvck1l
ZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90
IGltcGxlbWVudGVkLgotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ViMDQ1MDUzMTcwM2ZiOTBlZWE3YjQyZjI0
NzRmNTkzNmJkM2JhMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
SW1wbERpcmVjdDJELmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lm
IFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotY2xh
c3MgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29u
dGV4dEltcGwgewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KElEMkQxUmVuZGVy
VGFyZ2V0Kik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250
ZXh0JiwgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmKTsKLSAgICBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiwgSUQyRDFSZW5kZXJUYXJnZXQqKTsKLSAgICB2aXJ0
dWFsIH5HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQoKTsKLQotICAgIGJvb2wgaGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCB1cGRhdGVTdGF0
ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2hhZG93KCkgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRM
aW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxs
Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRN
b2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmls
bEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXImLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3Ro
aW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNl
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIGJvb2wgZHJhd05h
dGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKChOYXRp
dmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERv
Y3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXN0b3JlKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0
U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIG92
ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxh
eWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCkgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYpIG92ZXJyaWRlOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1l
ZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAg
IAotICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAg
ICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGlj
c0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBtX293bmVkUGxhdGZvcm1Db250ZXh0
OwotICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShESVJFQ1Qy
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggMWQ4MDQyMGNmN2VjNmNkNzc1YTYyYmFlYTIy
Zjk5MDYwN2ViNGNiZC4uNzdkYWZlMzIwYmIwNzMwODkwMTAwZDdjNGFmMTA0MTYzNjllNzIzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKQEAgLTU2LDEyICs1NiwxMiBAQCBzdGF0aWMgdm9pZCBm
aWxsV2l0aENsZWFyQ29sb3IoSEJJVE1BUCBiaXRtYXApCiAjaWYgUExBVEZPUk0oV0lOKQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MoYm9vbCBpbmNs
dWRlKQogewotICAgIG1fZGF0YS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzID0gaW5jbHVk
ZTsKKyAgICBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRX
aW5kb3dzID0gaW5jbHVkZTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQ6OnNob3VsZEluY2x1
ZGVDaGlsZFdpbmRvd3MoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPm1fc2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93czsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkt
Pm1fc2hvdWxkSW5jbHVkZUNoaWxkV2luZG93czsKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpXaW5k
b3dzQml0bWFwOjpXaW5kb3dzQml0bWFwKEhEQyBoZGMsIGNvbnN0IEludFNpemUmIHNpemUpCkBA
IC05NSwxNSArOTUsMTMgQEAgR3JhcGhpY3NDb250ZXh0OjpXaW5kb3dzQml0bWFwOjp+V2luZG93
c0JpdG1hcCgpCiAKIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRt
YXA+IEdyYXBoaWNzQ29udGV4dDo6Y3JlYXRlV2luZG93c0JpdG1hcChjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KG1fZGF0YS0+bV9o
ZGMsIHNpemUpOworICAgIHJldHVybiBtYWtlVW5pcXVlPFdpbmRvd3NCaXRtYXA+KGRlcHJlY2F0
ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYywgc2l6ZSk7CiB9CiAjZW5kaWYKIAogSERDIEdyYXBo
aWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9v
bCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBIREMgaGRjID0gbnVsbHB0cjsKLSAgICBpZiAo
IW1faW1wbCkKLSAgICAgICAgaGRjID0gbV9kYXRhLT5tX2hkYzsKKyAgICBIREMgaGRjID0gZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjOwogICAgIC8vIEZJWE1FOiBTaG91bGQgYSBi
aXRtYXAgYmUgY3JlYXRlZCBhbHNvIHdoZW4gYSBzaGFkb3cgaXMgc2V0PwogICAgIGlmICghaGRj
IHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigpKSB7CiAgICAgICAgIGlmIChkc3RSZWN0LmlzRW1w
dHkoKSkKQEAgLTEzNSwxNyArMTMzLDE3IEBAIEhEQyBHcmFwaGljc0NvbnRleHQ6OmdldFdpbmRv
d3NDb250ZXh0KGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhCiAgICAg
ICAgIHJldHVybiBiaXRtYXBEQy5sZWFrKCk7CiAgICAgfQogCi0gICAgbV9kYXRhLT5mbHVzaCgp
OwotICAgIG1fZGF0YS0+c2F2ZSgpOwotICAgIHJldHVybiBtX2RhdGEtPm1faGRjOworICAgIGRl
cHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5mbHVzaCgpOworICAgIGRlcHJlY2F0ZWRQcml2YXRl
Q29udGV4dCgpLT5zYXZlKCk7CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgp
LT5tX2hkYzsKIH0KIAogSERDIEdyYXBoaWNzQ29udGV4dDo6aGRjKCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fZGF0YSkKKyAgICBpZiAoIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBtX2RhdGEtPm1faGRjOworICAgIHJldHVy
biBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiB9CiAKICNpZiBQTEFURk9STShX
SU4pICYmICFVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU5OWFm
OTNmNDE5YjE5NGM3NzZiOTFhMGEzYzc5YzBjYmMwYzQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApA
QCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0Q0cK
KworI2VsaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQuaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
CisKKyNlbGlmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgi
CisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHRDYWlybworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCmluZGV4IGE4ZWUzNWM1Mjc3
ODEyNzNmNDdmYjVkMmY0YmNkZjg4YzQ0ZTA4YzQuLmFkOTU1NGMwNTBhZWUyZTEwZWMxNTM1OWVi
OGI0ODVkMzUwY2RhNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApA
QCAtNzgsNyArNzgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoYwogICAgIGlmICghcGxhdGZv
cm1Db250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAg
YXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4ocGxhdGZv
cm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlOjpHUFVNZW1vcnkpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUNHV2luLmNwcAppbmRleCBmOGExMGQ1YzQzNmU3MDYwODk4NzA3YmE4YjY1NDY0MWNlMmJkZjU0
Li41MzM4ZmZjYzdiNTY1ZjQ4N2Q5ZTdjZmI4ZjI2NGY3ZWExMjk2OWVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwCkBAIC03
Myw3ICs3Myw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCBi
bXAsIGNvbnN0IEludFNpemUqIHNpemUpCiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZShibXBJbmZvLmJtQml0cywgYm1wSW5mby5ibVdpZHRoLCBibXBJ
bmZvLmJtSGVpZ2h0LAogICAgICAgICA4LCBibXBJbmZvLmJtV2lkdGhCeXRlcywgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0KSk7CiAgIAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhjZ0NvbnRleHQu
Z2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdjKGNnQ29udGV4dC5nZXQoKSk7CiAKICAg
ICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUNhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUNhaXJvV2luLmNwcAppbmRleCAyY2VjOTlkYzcyOWZlNjVlMDg1NGVlZTcyZGZjNGVkN2FmMDk1
MjNjLi5jOWViMDBjNDgyNDFmNWJjYmY1YzVlMmQ4M2I5NDdjYjdjOTQ5NzRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQ2Fpcm9XaW4u
Y3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1h
Z2UuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVk
ZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNsdWRlIDxjYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLXdp
bjMyLmg+CkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmdldEhCSVRNQVBPZlNp
emUoSEJJVE1BUCBibXAsIGNvbnN0IEludFNpemUqIHNpemUpCiAgICAgY2Fpcm9fdCogdGFyZ2V0
UmVmID0gY2Fpcm9fY3JlYXRlKGltYWdlKTsKICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1h
Z2UpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeSh0YXJnZXRSZWYpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyh0
YXJnZXRSZWYpOwogCiAgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IEJpdG1hcEltYWdlOjpzaXpl
KCk7CiAgICAgaWYgKHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCmluZGV4IGQ5NjIwMzAwYWJjZWJhNDk0Y2E2NjE1
MWQwMDFlNTJmMWM3ODk0NGIuLjkxMjlhMTdiNzc4YTI0ODBjZGYzYzBlYmZhMmQ2ZTcyNzFhNjA3
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
YXRoRGlyZWN0MkQuY3BwCkBAIC0yMzIsNyArMjMyLDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250
YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGlj
c0MKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQg
c2NyYXRjaENvbnRleHREMkQoc2NyYXRjaFJlbmRlclRhcmdldCgpKTsKLSAgICBHcmFwaGljc0Nv
bnRleHQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6
OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEIHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICAgICBzdHJv
a2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAg
LTM0Miw3ICszNDIsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KGNvbnN0
IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawogICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBzY3JhdGNoQ29udGV4
dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBzY3JhdGNo
Q29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQg
c2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGljc0NvbnRleHQ6OkJpdG1h
cFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogCiAgICAgaWYgKHN0cm9rZVN0eWxl
QXBwbGllcikKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKHNjcmF0Y2hDb250ZXh0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCmluZGV4IDczNTkzM2Yx
NzIwODViOWU2NjkzYWQ0NGIyYWYxNjBiMzQwYzRmOTkuLjM2MTYwMmU1N2IyNGZiMTZjYmUyYTdh
OTlmNmU1YzgwYTMzOWZhYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9EcmFnSW1hZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJ
bWFnZUlPUy5tbQpAQCAtOTQsNyArOTQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdl
RnJvbUltYWdlKEltYWdlKiBpbWFnZSwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbgogCiAg
ICAgUmV0YWluUHRyPFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyPiByZW5kZXIgPSBhZG9wdE5TKFtQ
QUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTpp
bWFnZVNpemVdKTsKICAgICBVSUltYWdlICppbWFnZUNvcHkgPSBbcmVuZGVyLmdldCgpIGltYWdl
V2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29u
dGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQu
Q0dDb250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNv
bnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgaW1hZ2VTaXpl
LmhlaWdodCk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyBhZGp1c3RlZEltYWdlU2NhbGUsIC1h
ZGp1c3RlZEltYWdlU2NhbGUgfSk7CiAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwg
RmxvYXRQb2ludCgpLCB7IG9yaWVudGF0aW9uIH0pOwpAQCAtMTM2LDcgKzEzNiw3IEBAIERyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGxpbmtFbGVtZW50LCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nCiAKICAgICBhdXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjph
bGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VS
ZWN0LnNpemVdKTsKICAgICBhdXRvIGltYWdlID0gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6
XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdl
UmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRl
eHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoaW1hZ2VSZWN0LCBGbG9hdFJvdW5k
ZWRSZWN0OjpSYWRpaSg0KSksIENvbG9yOjp3aGl0ZSk7CkBAIC0yMDQsNyArMjA0LDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIFRleHRJ
bmRpY2F0b3JEYXRhJiBpbmRpY2EKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6
OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFn
ZVJlY3Quc2l6ZSgpXSk7CiAgICAgcmV0dXJuIFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4o
VUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4
dCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29udGV4dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBi
ZSBuZWNlc3NhcnksIGFuZCBzdWdnZXN0cyB0aGF0IHNvbWV3aGVyZSBlbHNlIGluIHRoZSByZWd1
bGFyCiAgICAgICAgIC8vIGRyYWcgaW5pdGlhdGlvbiBmbG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZs
aXAgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGlt
YWdlUmVjdC5oZWlnaHQoKSk7CkBAIC0yMzgsNyArMjM4LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBib28KICAgICBhdXRvJiBpbWFnZSA9ICp0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKTsK
ICAgICBhdXRvIHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5k
ZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlLnNpemUoKV0pOwogICAgIFVJSW1hZ2Ug
KmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6WyZpbWFnZV0oVUlH
cmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7
CiAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCBGbG9hdFBvaW50KCkpOwogICAgIH1d
OwogCkBAIC0yNTIsNyArMjUyLDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckNv
bG9yKGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgRmxvYXRSZWN0JiBlbGVtZW4KIAogICAgIGF1
dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5z
dGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemUoKV0pOwogICAgIFVJSW1hZ2UgKmlt
YWdlID0gW3JlbmRlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJD
b250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQgeyByZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dENHIGNvbnRleHQgeyByZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0IH07CiAgICAgICAgIGNvbnRl
eHQudHJhbnNsYXRlKDAsIENHUmVjdEdldEhlaWdodChpbWFnZVJlY3QpKTsKICAgICAgICAgY29u
dGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBjb250ZXh0LmZpbGxSb3VuZGVkUmVjdChz
d2F0Y2gsIGNvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29jb2EuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRy
YWNrUmVuZGVyZXJDb2NvYS5jcHAKaW5kZXggMDlmYWVlZWU5ZWFjYjUwMzJmMWE3OWQ3M2JhMDE4
YTliNjU1YmQyYi4uNWVjMzhlNjQxYmQ2ZWQwM2FkMDUyNTYxZDA0YzljZGFmZGZiNDEyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YS5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBdWRpb1NhbXBsZURhdGFTb3VyY2Uu
aCIKICNpbmNsdWRlICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJMaWJX
ZWJSVENBdWRpb01vZHVsZS5oIgorI2luY2x1ZGUgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0Ry
YWdJbWFnZVdpbi5jcHAKaW5kZXggZDAyMmU3ZTE5MWRhYzgxNjM2ZDUyOTUxZDQwZDUzYjg4NzNm
NTUwOS4uYWM2ZTI0NGQwNDFlOWZlNmJmNjJmMWU2MTVhZjk5ZTZjZjI1MDJlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3Iu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRXaW4uaCIKICNpbmNsdWRlICJIV25kREMuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIlN0cmluZ1RydW5jYXRvci5oIgpAQCAtMTg2LDcgKzE4Nyw3IEBAIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBp
bkxhYmVsLCBUCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKICAgICA6OlNlbGVjdE9iamVj
dCh3b3JraW5nREMuZ2V0KCksIGltYWdlLmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dChjb250ZXh0UmVmKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gY29udGV4dChjb250ZXh0
UmVmKTsKICAgICAvLyBPbiBNYWMgYWxwaGEgaXMgezAuNywgMC43LCAwLjcsIDAuOH0sIGhvd2V2
ZXIgd2UgY2FuJ3QgY29udHJvbCBhbHBoYQogICAgIC8vIGZvciBkcmFnIGltYWdlcyBvbiB3aW4s
IHNvIHdlIHVzZSAxCiAgICAgY29uc3RleHByIGF1dG8gYmFja2dyb3VuZENvbG9yID0gU1JHQkE8
dWludDhfdD4geyAxNDAsIDE0MCwgMTQwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwCmluZGV4IDkzOWE3OWFlZjNiYmY4MjA3NjZiOWZlZjdhYjZiMTNh
ZjgzNDcyZTcuLjI0OGUzZGMxZTM4MjEyODNhZTAzZGIyZTMyMmNmMTVmNmNmYmFiM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
V2luLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFduZERDLmgiCiAjaW5j
bHVkZSAiSG9zdFdpbmRvdy5oIgpAQCAtNjA5LDcgKzYxMCw3IEBAIHZvaWQgUG9wdXBNZW51V2lu
OjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNl
bGVjdE9iamVjdChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNv
bnRleHQobV9EQy5nZXQoKSk7CiAKICAgICAvLyBsaXN0UmVjdCBpcyB0aGUgZGFtYWdlUmVjdCB0
cmFuc2xhdGVkIGludG8gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBlbnRpcmUgbWVudSBsaXN0ICh3
aGljaCBpcyBsaXN0U2l6ZSAqIG1faXRlbUhlaWdodCBwaXhlbHMgdGFsbCkKICAgICBJbnRSZWN0
IGxpc3RSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Db250ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAppbmRleCBkYTk1MmJmNmIzY2ZhMmZiNmMwOWFm
MGQyZDY5ZjQ2M2Q3NmFlYzI2Li4xYjE4MmExZDM2YjdjZmFhYTBiMTY5ZDBkOGM4NTQzNWY0M2I3
NjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50
Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWlu
dENoZWNrZXIuY3BwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOCw3ICszOSw3IEBAIGJvb2wgQ29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9y
Q29udGVudGZ1bFBhaW50KEZyYW1lVmlldyYgZnJhbWVWaWV3KQogICAgIGZyYW1lVmlldy5zZXRQ
YWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OkZsYXR0ZW5Db21wb3NpdGluZ0xheWVycyk7CiAg
ICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKHRydWUpOwogCi0gICAgR3JhcGhp
Y3NDb250ZXh0IGNoZWNrZXJDb250ZXh0KEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY2hlY2tlckNvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQpOwogICAgIGZyYW1lVmlldy5wYWlu
dChjaGVja2VyQ29udGV4dCwgZnJhbWVWaWV3LnJlbmRlclZpZXcoKS0+ZG9jdW1lbnRSZWN0KCkp
OwogCiAgICAgZnJhbWVWaWV3LnNldFBhaW50c0VudGlyZUNvbnRlbnRzKG9sZEVudGlyZUNvbnRl
bnRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmpl
Y3QuY3BwCmluZGV4IDAyNTQyMjViYjMxMzhjMzgyYzM2OGIwOTQ4ZDY1YWU2ZmIwYjdjMGIuLjE0
M2EzNTljYmFlODhlM2UzYzZiM2M2YTdjNzM1YmNmZmM1NWU0ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtNjkwLDEwICs2
OTAsNyBAQCBzdGF0aWMgdm9pZCBhcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBSZW5kZXJTdAogICAgICAgICBib3hTaGFkb3cgPSBib3hT
aGFkb3ctPm5leHQoKTsKIAogICAgIEZsb2F0U2l6ZSBzaGFkb3dPZmZzZXQoYm94U2hhZG93LT54
KCksIGJveFNoYWRvdy0+eSgpKTsKLSAgICBpZiAoIWJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFk
b3coKSkKLSAgICAgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ct
PnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNv
bG9yKCkpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KHNoYWRv
d09mZnNldCwgYm94U2hhZG93LT5yYWRpdXMoKSwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JG
aWx0ZXIoYm94U2hhZG93LT5jb2xvcigpKSk7CisgICAgY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xvckZp
bHRlcihib3hTaGFkb3ctPmNvbG9yKCkpLCBib3hTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkg
PyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsK
IH0KIAogSW50ZXJwb2xhdGlvblF1YWxpdHkgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNob29zZUlu
dGVycG9sYXRpb25RdWFsaXR5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgSW1hZ2UmIGltYWdl
LCBjb25zdCB2b2lkKiBsYXllciwgY29uc3QgTGF5b3V0U2l6ZSYgc2l6ZSkKQEAgLTI0MzksMTAg
KzI0MzYsNyBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhjb25z
dCBQYWludEluZm8mIGluZm8sIGNvbnN0IExheW91dFJlYwogICAgICAgICAgICAgRmxvYXRQb2lu
dCBzbmFwcGVkU2hhZG93T3JpZ2luID0gRmxvYXRQb2ludChyb3VuZFRvRGV2aWNlUGl4ZWwoc2hh
ZG93UmVjdE9yaWdpbi54KCksIGRldmljZVNjYWxlRmFjdG9yKSwgcm91bmRUb0RldmljZVBpeGVs
KHNoYWRvd1JlY3RPcmlnaW4ueSgpLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAgICAgICAgICAg
RmxvYXRTaXplIHNuYXBwZWRTaGFkb3dPZmZzZXQgPSBzbmFwcGVkU2hhZG93T3JpZ2luIC0gcGl4
ZWxTbmFwcGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgICAgIGlmIChz
aGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRM
ZWdhY3lTaGFkb3coc25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
cik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRTaGFkb3co
c25hcHBlZFNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7CisgICAgICAg
ICAgICBjb250ZXh0LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yLCBzaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNN
b2RlOjpMZWdhY3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKIAogICAgICAgICAgICAg
aWYgKGhhc0JvcmRlclJhZGl1cykgewogICAgICAgICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMg
b3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBjbGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcg
c28gc2F2ZXMgdGltZQpAQCAtMjU0MywxMSArMjUzNyw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0
UmVjCiAgICAgICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShleHRyYU9mZnNldCk7CiAgICAgICAg
ICAgICBzaGFkb3dPZmZzZXQgLT0gZXh0cmFPZmZzZXQ7CiAKLSAgICAgICAgICAgIGlmIChzaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5zZXRMZWdh
Y3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZz
ZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotCisgICAgICAgICAgICBjb250ZXh0LnNl
dFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShwaXhlbFNuYXBwZWRPdXRlclJlY3QsIHBpeGVsU25hcHBlZEhvbGVSZWN0LCBmaWxs
Q29sb3IpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0OWI3MmQxNGMzYmQ2NjI2MjFlNzZkNjdjYzY2
ZWU1YTI1Yzc0ZGZlLi4yOWFhMTkwNmNhZDJmZTliNDhmZmUyOWI0MjhiZjEzY2M2MDU3YzZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApA
QCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIkxheWVyQW5jZXN0b3JDbGlwcGluZ1N0YWNrLmgi
CiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1vZGVsLmgiCisjaW5jbHVkZSAiTnVs
bEdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQZXJmb3Jt
YW5jZUxvZ2dpbmdDbGllbnQuaCIKICNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgpAQCAtMTc4
OSw3ICsxNzkwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9u
KCkKICAgICB9OwogCiAgICAgYXV0byB1cGRhdGVFdmVudFJlZ2lvbkZvckxheWVyID0gWyZdKEdy
YXBoaWNzTGF5ZXImIGdyYXBoaWNzTGF5ZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IG51
bGxDb250ZXh0KG51bGxwdHIpOworICAgICAgICBOdWxsR3JhcGhpY3NDb250ZXh0IG51bGxDb250
ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7
CiAgICAgICAgIEV2ZW50UmVnaW9uIGV2ZW50UmVnaW9uOwogI2lmIEVOQUJMRShFRElUQUJMRV9S
RUdJT04pCiAgICAgICAgIGlmIChyZW5kZXJlcigpLnBhZ2UoKS5zaG91bGRCdWlsZEVkaXRhYmxl
UmVnaW9uKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFi
bGVCaXRtYXBDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVC
aXRtYXBDYWlyby5jcHAKaW5kZXggOWNlYTVmYTM0YzRhNmMwODdmZGUyOGMyNTJhMzFmMTU1OGRl
NjFmZi4uMTYxNzdjMDAwNzFlZTgyNmU4MDk2ZjNlZGY5YjgyYmI4Yzg1MGZmOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcApA
QCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW1hZ2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0NhaXJvT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9V
dGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBs
ZW1lbnRlZC5oPgogCkBAIC02MCw3ICs2MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZSA9IGNyZWF0ZUNhaXJvU3VyZmFjZSgpOwogICAg
IFJlZlB0cjxjYWlyb190PiBiaXRtYXBDb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGlt
YWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoYml0bWFwQ29udGV4dC5nZXQoKSkp
OworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENhaXJvPihiaXRtYXBDb250
ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0
bWFwQ0cuY3BwIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3Bw
CmluZGV4IDM2ZGMyNGI4MmZkZWVjMTU1NTEwNDc2OTk0ZTg3ZGIxZDc2NjJkYTcuLjFkMDZmNDZj
MmYzNDZiOTFjNDgxNzJhMTI2ZTc2OTlmOWViNDE0ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNz
Q29udGV4dCgpCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGJpdG1hcENvbnRleHQuZ2V0KCks
IDAsIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oYml0bWFwQ29udGV4
dC5nZXQoKSwgMSwgLTEpOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
PihiaXRtYXBDb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHRDRz4oYml0bWFwQ29udGV4dC5nZXQoKSk7CiB9CiAKIHZvaWQgU2hhcmVhYmxlQml0bWFw
OjpwYWludChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcCBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKaW5kZXggMDhmNmZi
NTJjODBjMzdjZWRkMTZmZTA3MDJhNTRiYmI1ODhkN2VmMy4uY2QxNThmMGNiNjQ3NmJkMjQ4Zjk3
YzAwNjk2NTliNGYxYmY2NGUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvd2lu
L1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93
aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9ESUJQaXhlbERhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpcmVjdDJET3Bl
cmF0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
PgogI2luY2x1ZGUgPGQyZDFfMS5oPgpAQCAtMTA0LDcgKzEwNCw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
KCkKICAgICBpZiAoIXN1cmZhY2VDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjcmVhdGVGYWN0b3J5KHN1cmZhY2VDb250ZXh0LmdldCgpKSk7CisgICAgcmV0
dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ+KHN1cmZhY2VDb250ZXh0Lmdl
dCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRtYXA6OnBhaW50KEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgSW50UG9pbnQmIGRzdFBvaW50LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwCmluZGV4IGRjMGE3MGI4ODI0YWZkYzdlYzNkZDFmNjlmNGQ5YjUxOTQyOTI0ZjYuLjRm
NzhiNWViNWNkYjUxZjJlYmZjYWZmNjRlY2QxOWIxZTYzMGFkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Jh
Y2tpbmdTdG9yZUJhY2tlbmRDYWlyb0ltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRp
bGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fp
cm8uaD4KICNpbmNsdWRlIDxjYWlyby5oPgpAQCAtODQsNyArODQsNyBAQCB2b2lkIEJhY2tpbmdT
dG9yZTo6aW5jb3Jwb3JhdGVVcGRhdGUoU2hhcmVhYmxlQml0bWFwKiBiaXRtYXAsIGNvbnN0IFVw
ZGF0ZUluZm8mCiAgICAgLy8gUGFpbnQgYWxsIHVwZGF0ZSByZWN0cy4KICAgICBJbnRQb2ludCB1
cGRhdGVSZWN0TG9jYXRpb24gPSB1cGRhdGVJbmZvLnVwZGF0ZVJlY3RCb3VuZHMubG9jYXRpb24o
KTsKICAgICBSZWZQdHI8Y2Fpcm9fdD4gY2Fpcm9Db250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG1fYmFja2VuZC0+c3VyZmFjZSgpKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNz
Q29udGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9Db250
ZXh0LmdldCgpKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fpcm8gZ3JhcGhpY3NDb250ZXh0KGNh
aXJvQ29udGV4dC5nZXQoKSk7CiAKICAgICAvLyBXaGVuIG1fd2ViUGFnZVByb3h5LmRyYXdzQmFj
a2dyb3VuZCgpIGlzIGZhbHNlLCBiaXRtYXAgY29udGFpbnMgdHJhbnNwYXJlbnQgcGFydHMgYXMg
YSBiYWNrZ3JvdW5kIG9mIHRoZSB3ZWJwYWdlLgogICAgIC8vIEZvciBzdWNoIGNhc2UsIGJpdG1h
cCBtdXN0IGJlIGRyYXduIHVzaW5nIENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5IHRvIG92ZXJ3cml0
ZSB0aGUgZXhpc3Rpbmcgc3VyZmFjZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9X
S1ByaW50aW5nVmlldy5tbQppbmRleCBmMThiYThmMDFiMjZkZTNmZDNjZGZiMDI4MTI4NWNmMGQ0
YTY2NjlmLi5kMDNlNjQzNGIxYWIyZmJkNWU1NTQzMjk2OGIzZTlmNTY1OTJiYWM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCkBAIC0zMCwxNSAr
MzAsMTYgQEAKIAogI2ltcG9ydCAiQVBJRGF0YS5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgotI2lt
cG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlByaW50SW5mby5oIgogI2ltcG9ydCAi
U2hhcmVhYmxlQml0bWFwLmgiCiAjaW1wb3J0ICJXZWJQYWdlUHJveHkuaCIKICNpbXBvcnQgPFF1
YXJ0ei9RdWFydHouaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvY2Fs
RGVmYXVsdFN5c3RlbUFwcGVhcmFuY2UuaD4KICNpbXBvcnQgPHd0Zi9SdW5Mb29wLmg+CiAKKyNp
bXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKIE5TU3RyaW5nICogY29uc3QgV2ViS2l0T3JpZ2lu
YWxUb3BQcmludGluZ01hcmdpbktleSA9IEAiV2ViS2l0T3JpZ2luYWxUb3BNYXJnaW4iOwogTlNT
dHJpbmcgKiBjb25zdCBXZWJLaXRPcmlnaW5hbEJvdHRvbVByaW50aW5nTWFyZ2luS2V5ID0gQCJX
ZWJLaXRPcmlnaW5hbEJvdHRvbU1hcmdpbiI7CiAKQEAgLTU1NSw3ICs1NTYsNyBAQCAtICh2b2lk
KV9kcmF3UHJldmlldzooTlNSZWN0KW5zUmVjdAogCiAgICAgUmVmUHRyPFdlYktpdDo6U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBwYWdlUHJldmlld0l0ZXJhdG9yLT52YWx1ZTsKIAotICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIENHQ29udGV4dF0pOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHIGNv
bnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAg
ICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQp
OwogCiAgICAgYml0bWFwLT5wYWludChjb250ZXh0LCBfd2ViRnJhbWUtPnBhZ2UoKS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKSwgV2ViQ29yZTo6SW50UG9pbnQobnNSZWN0Lm9yaWdpbiksIGJpdG1hcC0+
Ym91bmRzKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5n
U3RvcmVEaXJlY3QyRC5jcHAKaW5kZXggYWJkYWE2ZWIyYzU3ZGUzZWU2NmMyYzNmZjE2NGEzMzRi
MTI0MTVkOS4uOTBiNDI0YWNlMjk4MzdkMDViOTcwNmQwMDQ4NWQ5NWY3ZTFlMmQwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQu
Y3BwCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CYWNraW5nU3RvcmVCYWNr
ZW5kRGlyZWN0MkRJbXBsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DT01QdHIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0RpcmVjdDJEVXRpbGl0aWVzLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5o
PgogI2luY2x1ZGUgPGQyZDEuaD4KICNpbmNsdWRlIDxkM2QxMV8xLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAppbmRleCAz
Y2FjYjlhZWM2NGM4OWE1MTIwODcwMDBkMjZhNTdlMDZlMTgxZTM0Li5lNGMxMWYzZWIwODYyOWY2
MTNkMzFiODQ3Mzk5MzNlMjkyMzFiMWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNp
bmNsdWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbmZvLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HRElVdGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGJhclRo
ZW1lLmg+CkBAIC04NTIsNyArODUzLDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFp
bnQoY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgSERDIGhkYykKICAgICAgICAgOjpTZWxlY3RP
YmplY3QobV9EQy5nZXQoKSwgbV9ibXAuZ2V0KCkpOwogICAgIH0KIAotICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KG1fREMuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0
KG1fREMuZ2V0KCkpOwogI2Vsc2UKICAgICBDT01QdHI8SUQzRDExVGV4dHVyZTJEPiBiYWNrQnVm
ZmVyOyAKICAgICBIUkVTVUxUIGhyID0gbV9zd2FwQ2hhaW4tPkdldEJ1ZmZlcigwLCBfX3V1aWRv
ZihJRDNEMTFUZXh0dXJlMkQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmJhY2tCdWZmZXIp
KTsgCkBAIC04NjcsNyArODY4LDcgQEAgdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQo
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgSERDIGhkYykKIAogICAgIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEIHBsYXRmb3JtQ29udGV4dChyZW5kZXJUYXJnZXQuZ2V0KCkpOwogICAgIHBsYXRm
b3JtQ29udGV4dC5zZXREM0REZXZpY2UobV9kM2REZXZpY2UuZ2V0KCkpOwotICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KCZwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFw
UmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2lu
IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKICNlbmRpZgogCiAgICAgSW50UmVjdCB0cmFuc2xh
dGVkRGFtYWdlUmVjdCA9IGRhbWFnZVJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbQppbmRleCAwNGE0MGRmMDJlNDc0NDhmNWI5OGM4
OWRmNDg1YjcwNmYwYmUwMzdjLi5lNDdhNDRjYzQ3ZTk5MWRlZTk4ZjliNGEzNmM1YTJjZGY2ZjBk
MDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERG
UGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQ
bHVnaW4ubW0KQEAgLTM1LDcgKzM1LDYgQEAKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
IlBERkFubm90YXRpb25UZXh0V2lkZ2V0RGV0YWlscy5oIgogI2ltcG9ydCAiUERGQ29udGV4dE1l
bnUuaCIKLSNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCiAjaW1wb3J0ICJQREZMYXllckNvbnRy
b2xsZXJTUEkuaCIKICNpbXBvcnQgIlBERlBsdWdpbkFubm90YXRpb24uaCIKICNpbXBvcnQgIlBE
RlBsdWdpblBhc3N3b3JkRmllbGQuaCIKQEAgLTcyLDcgKzcxLDcgQEAKICNpbXBvcnQgPFdlYkNv
cmUvRnJhbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVWaWV3Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9I
VE1MQm9keUVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTEVsZW1lbnQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSFRNTEZvcm1FbGVtZW50Lmg+CkBAIC0xMDYsNiArMTA1LDggQEAKICNpbXBv
cnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCisjaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgorCiAjaWYgSEFWRShJTkNSRU1FTlRB
TF9QREZfQVBJUykKIEBpbnRlcmZhY2UgUERGRG9jdW1lbnQgKCkKIC0oaW5zdGFuY2V0eXBlKWlu
aXRXaXRoUHJvdmlkZXI6KENHRGF0YVByb3ZpZGVyUmVmKWRhdGFQcm92aWRlcjsKQEAgLTE5NDQs
NyArMTk0NSw3IEBAIHZvaWQgUERGUGx1Z2luOjpwYWludENvbnRyb2xGb3JMYXllckluQ29udGV4
dChDQUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRlCiAgICAgTG9jYWxEZWZhdWx0U3lz
dGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVhcmFuY2UocGFnZS0+dXNlRGFya0FwcGVhcmFuY2UoKSk7
CiAjZW5kaWYKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCiAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0K
aW5kZXggMTYyNTNjODg3MDczMDc3ODAwMGQ4NTNkNGRkZmQzMjI3OWQ4MTg5ZS4uZjdiZGI5NTcw
NGRjNDU2MDIzNTkyNjM4MWRmNjA0ZjAyODBkMDEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtNDIsNiAr
NDIsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9FdmVudE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ZvY3VzQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTENv
bnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MT0xpc3RFbGVtZW50Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hUTUxVTGlzdEVsZW1lbnQuaD4KQEAgLTMxNyw3ICszMTgsNyBAQCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBXZWJQYWdlOjpwZGZTbmFwc2hvdEF0U2l6ZShJbnRSZWN0IHJlY3QsIElu
dFNpemUgYml0bWFwU2l6ZQogCiAgICAgICAgIENHUERGQ29udGV4dEJlZ2luUGFnZShwZGZDb250
ZXh0LmdldCgpLCBkaWN0aW9uYXJ5KTsKIAotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0IHsgcGRmQ29udGV4dC5nZXQoKSB9OworICAgICAgICBHcmFwaGljc0NvbnRleHRD
RyBncmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CiAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC5zY2FsZSh7IDEsIC0xIH0pOwogICAgICAgICBncmFwaGljc0NvbnRleHQudHJhbnNs
YXRlKDAsIC1iaXRtYXBTaXplLmhlaWdodCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3Jk
aW5hdGVkR3JhcGhpY3MuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCmluZGV4
IDg3MTZkZjQ5YmQxOTJkMDEwNTExNmI2YmRiMGFiNjk2MzE4NzdiYjguLmU5OTQ1N2M3NDIzMjFi
NTNlMWY2ZWE1ZGM5MGRkZWE4NjUyM2ViODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRl
ZEdyYXBoaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKQEAgLTQz
LDcgKzQzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1NldHRpbmdzLmg+CiAKICNpZiBVU0UoRElS
RUNUMkQpCi0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPGQyZDEuaD4KICNp
bmNsdWRlIDxkM2QxMV8xLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCmluZGV4IDBhNzZlNzI5ZmUwMzdiNTFhNzM1YTZkMjc3ZTZhNjM1MTc0MWM1YzMu
Ljk2ODJmMDkzYWUwZDQ0Y2RlYzg2OTkxY2QwNDlmNzJmYmVlNzE3OGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNzIsNiArMzcyLDExIEBA
CiAjaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzSU9TLmgiCiAjZW5kaWYKIAor
I2lmIFVTRShDRykKKy8vIEZJWE1FOiBNb3ZlIHRoZSBDRy1zcGVjaWZpYyBQREYgcGFpbnRpbmcg
Y29kZSBvdXQgb2YgV2ViUGFnZS5jcHAuCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHRDRy5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNTM3NSw3ICs1MzgwLDcgQEAgdm9pZCBX
ZWJQYWdlOjpkcmF3UGFnZXNUb1BERkltcGwoRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQsIGNvbnN0
IFByaW50SW5mbyYgcHJpbnQKICAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBwYWdlSW5mbyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlTXV0YWJsZSgwLCAwLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7CiAgICAgICAgICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKGNvbnRleHQu
Z2V0KCksIHBhZ2VJbmZvLmdldCgpKTsKIAotICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBjdHgoY29udGV4dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y3R4KGNvbnRleHQuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGN0eC5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKDAsIC1tX3ByaW50Q29udGV4
dC0+cGFnZVJlY3QocGFnZSkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIG1fcHJpbnRDb250
ZXh0LT5zcG9vbFBhZ2UoY3R4LCBwYWdlLCBtX3ByaW50Q29udGV4dC0+cGFnZVJlY3QocGFnZSku
d2lkdGgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCBkZTFmMDZkZDhhZGE4ZmRm
ZmM1YTA5ODczOWM0YWVhYjliYjMzYTg1Li4zOTliMWU4MGEzZDg0ZDFkMGQzMDA5NmFjNDQ2NTBh
Yzk4ZjU4MTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9n
dGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVMb2FkZXIuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNv
bnRleHRDYWlyby5oPgpAQCAtNjc2LDcgKzY3Niw3IEBAIHZvaWQgV2ViUHJpbnRPcGVyYXRpb25H
dGs6OnJlbmRlclBhZ2UoaW50IHBhZ2VOdW1iZXIpCiAgICAgcHJlcGFyZUNvbnRleHRUb0RyYXco
KTsKIAogICAgIGRvdWJsZSBwYWdlV2lkdGggPSBndGtfcGFnZV9zZXR1cF9nZXRfcGFnZV93aWR0
aChtX3BhZ2VTZXR1cC5nZXQoKSwgR1RLX1VOSVRfSU5DSCkgKiBtX3hEUEk7Ci0gICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9jYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQobV9jYWlyb0NvbnRl
eHQuZ2V0KCkpOwogICAgIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoZ3JhcGhpY3NDb250ZXh0
LCBwYWdlTnVtYmVyLCBwYWdlV2lkdGggLyBtX3NjYWxlKTsKIAogICAgIGNhaXJvX3Jlc3RvcmUo
bV9jYWlyb0NvbnRleHQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01p
c2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggZDU0MWM0YzA0ZjJkNzVkMDZiZWUwODBlYmNm
ZTY2YjBhNDVmYmVmNi4uOTI4YWU3ZDUxZTNmMGI3ZDkxMDIwYzdkYTI4OGVkZTI0NWMzODU5NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tCkBAIC0zOSw3ICszOSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0dDQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9HbHlwaFBhZ2UuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2luZG93Lmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1BhZ2VDb25zb2xlQ2xpZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1ByaW50
Q29udGV4dC5oPgpAQCAtMzA1LDcgKzMwNSw3IEBAIC0gKHZvaWQpcHJpbnRUb0NHQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNnQ29udGV4dCBwYWdlV2lkdGg6KGZsb2F0KXBhZ2VXaWR0aEluUGl4CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoY2dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFw
aGljc0NvbnRleHQoY2dDb250ZXh0KTsKICAgICBQcmludENvbnRleHQ6OnNwb29sQWxsUGFnZXNX
aXRoQm91bmRhcmllcygqY29yZUZyYW1lLCBncmFwaGljc0NvbnRleHQsIEZsb2F0U2l6ZShwYWdl
V2lkdGhJblBpeGVscywgcGFnZUhlaWdodEluUGl4ZWxzKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCmluZGV4IDJi
YTAwNmRkM2U3YjJhZmM1MGVmZjI4NDUzMjBkOTY1MDViYTcxYmEuLjc4MzI1NjE5YzFhYzc3NDRl
ODhmZDQ5MjUzNmM5NTdhMDQyNDRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQpAQCAtMzAsNyArMzAsNyBAQAogCiAj
aW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYXNjYWRl
Lmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9Mb2FkZXJOU1VSTEV4dHJh
cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+CiAjaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgpAQCAtNzgsNyArNzgsNyBAQCAtICh2b2lkKV93ZWJfZHJhd0F0UG9p
bnQ6KE5TUG9pbnQpcG9pbnQgZm9udDooTlNGb250ICopZm9udCB0ZXh0Q29sb3I6KE5TQ29sb3Ig
KgogCiAgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0NvbnRleHQgPSBbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdOwogICAgICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
W25zQ29udGV4dCBDR0NvbnRleHRdOwotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0IHsgY2dDb250ZXh0IH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNz
Q29udGV4dCB7IGNnQ29udGV4dCB9OwogCiAgICAgICAgIC8vIFdlYkNvcmUgcmVxdWlyZXMgYSBm
bGlwcGVkIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGJvb2wgZmxpcHBlZCA9IFtuc0NvbnRl
eHQgaXNGbGlwcGVkXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYklu
c3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQppbmRleCBkMzk3M2UyOTQ0NTll
Y2YxZGJkZWY0NDllZjJjZmQyY2FjYjhlZDM1Li45NTBhZThlMDBkMzBhNDUyMDlmOWFkZGEzYzJi
MzNmMTMxMDAyMmMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCkBAIC0yOSw3ICsyOSw3IEBA
CiAjaW1wb3J0ICJXZWJOb2RlSGlnaGxpZ2h0Vmlldy5oIgogI2ltcG9ydCAiV2ViTm9kZUhpZ2hs
aWdodC5oIgogCi0jaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnNwZWN0b3JD
b250cm9sbGVyLmg+CiAjaW1wb3J0IDx3dGYvQXNzZXJ0aW9ucy5oPgogCkBAIC05OCw3ICs5OCw3
IEBAIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiAKICAgICAgICAgQVNTRVJUKFtbTlNH
cmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwogCi0gICAgICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
IENHQ29udGV4dF0pOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtbTlNHcmFw
aGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIENHQ29udGV4dF0pOwogICAgICAgICBbX3dlYk5v
ZGVIaWdobGlnaHQgaW5zcGVjdG9yQ29udHJvbGxlcl0tPmRyYXdIaWdobGlnaHQoY29udGV4dCk7
CiAgICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggZjM1
ZDdiZDVhMjM1MWIyYjAxYjY4YmIxZTIxNmY3NDU3ZTQxOGE3MS4uOTViZGEzOTBjYTY5YmE2Yjk2
MjBmNTFiZWU2OTZiMjEyMzlhYjE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCkBAIC04MSw3ICs4MSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
TG9hZGVyU3RhdGVNYWNoaW5lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVHJlZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hU
TUxOYW1lcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IaXN0b3J5SXRlbS5oPgpAQCAtNjEzLDcgKzYx
Myw3IEBAIC0gKHZvaWQpX2RyYXdSZWN0OihOU1JlY3QpcmVjdCBjb250ZW50c09ubHk6KEJPT0wp
Y29udGVudHNPbmx5CiAjZWxzZQogICAgIENHQ29udGV4dFJlZiBjdHggPSBXS0dldEN1cnJlbnRH
cmFwaGljc0NvbnRleHQoKTsKICNlbmRpZgotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KGN0eCk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChjdHgp
OwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUg
PSBjb3JlKHNlbGYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyLmNwcAppbmRleCA1MTlhNTczNmQyYTM1MGQ3Mjc4Njc2NWZiMThm
Y2YzMzljNWVjNjhlLi5hZDY2MDdlNDUxMGU1OWY1MThmZWVmMWQ4Y2M2MzY1NmE4NGVkNDQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRm9udENhc2Nh
ZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ZvbnRTZWxlY3Rvci5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRX
aW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dFJ1bi5oPgpAQCAtNDkwLDcgKzQ5MSw3IEBAIHZv
aWQgRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6ZHJhdygpCiAgICAgYXV0byBiaXRtYXBEQyA9
IGFkb3B0R0RJT2JqZWN0KDo6Q3JlYXRlQ29tcGF0aWJsZURDKEhXbmREQyhtX2h1ZFdpbmRvdykp
KTsKICAgICBIR0RJT0JKIG9sZEJpdG1hcCA9IFNlbGVjdE9iamVjdChiaXRtYXBEQy5nZXQoKSwg
bV9iaXRtYXAuZ2V0KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoYml0bWFwREMu
Z2V0KCksIHRydWUpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGJpdG1hcERDLmdl
dCgpLCB0cnVlKTsKIAogICAgIGNvbnRleHQuc2F2ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJGcmFtZS5jcHAKaW5kZXggMmY1MTEwMzEzNjE5NDU3Y2RhYzNiMzFjYTViZDUzNzZhYmNiMjE3
Ny4uOGRhOTE5NDgzYjBkYWE3MTBkNjIzNjJlOWIzYTA0NjlkNTAyYmRjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYkZyYW1lLmNwcApAQCAtNzQsNiArNzQsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvRnJhbWVXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dESU9iamVjdENvdW50ZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oPgpAQCAtMzIxLDcgKzMyMiw3IEBAIEhSRVNV
TFQgV2ViRnJhbWU6OnBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KFJFQ1QgcmVjdCwgX0luXyBI
REMgZGV2aWNlQ29udGV4dCkKICAgICAvLyBXZSBjYW4ndCBwYWludCB3aXRoIGEgbGF5b3V0IHN0
aWxsIHBlbmRpbmcuCiAgICAgdmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vy
c2l2ZSgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGRldmljZUNvbnRleHQpOworICAgIEdy
YXBoaWNzQ29udGV4dFdpbiBnYyhkZXZpY2VDb250ZXh0KTsKICAgICBnYy5zZXRTaG91bGRJbmNs
dWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogICAgIGdjLnNhdmUoKTsKICAgICBMT05HIHdpZHRoID0g
cmVjdC5yaWdodCAtIHJlY3QubGVmdDsKQEAgLTM1Miw3ICszNTMsNyBAQCBIUkVTVUxUIFdlYkZy
YW1lOjpwYWludFNjcm9sbFZpZXdSZWN0VG9Db250ZXh0QXRQb2ludChSRUNUIHJlY3QsIFBPSU5U
IHB0LCBfSW5fCiAgICAgLy8gV2UgY2FuJ3QgcGFpbnQgd2l0aCBhIGxheW91dCBzdGlsbCBwZW5k
aW5nLgogICAgIHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhkZXZpY2VDb250ZXh0KTsKKyAgICBHcmFwaGljc0Nv
bnRleHRXaW4gZ2MoZGV2aWNlQ29udGV4dCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5jbHVkZUNoaWxk
V2luZG93cyh0cnVlKTsKICAgICBnYy5zYXZlKCk7CiAgICAgSW50UmVjdCBkaXJ0eVJlY3QocmVj
dCk7CkBAIC0xODA4LDcgKzE4MDksNyBAQCBIUkVTVUxUIFdlYkZyYW1lOjpzcG9vbFBhZ2VzKEhE
QyBwcmludERDLCBVSU5UIHN0YXJ0UGFnZSwgVUlOVCBlbmRQYWdlLCB2b2lkKiBjdAogICAgIGZs
b2F0IGhlYWRlckhlaWdodCA9IDAsIGZvb3RlckhlaWdodCA9IDA7CiAgICAgaGVhZGVyQW5kRm9v
dGVySGVpZ2h0cygmaGVhZGVySGVpZ2h0LCAmZm9vdGVySGVpZ2h0KTsKICNpZiBVU0UoQ0cpIHx8
IFVTRShDQUlSTykKLSAgICBHcmFwaGljc0NvbnRleHQgc3Bvb2xDdHgocGN0eCk7CisgICAgR3Jh
cGhpY3NDb250ZXh0V2luIHNwb29sQ3R4KHBjdHgpOwogICAgIHNwb29sQ3R4LnNldFNob3VsZElu
Y2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAKICAgICBmb3IgKFVJTlQgaWkgPSBzdGFydFBhZ2U7
IGlpIDwgZW5kUGFnZTsgaWkrKykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYk5vZGVIaWdobGlnaHQuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViTm9kZUhp
Z2hsaWdodC5jcHAKaW5kZXggMDdhMmY2MDRmMzk3YTJhNThiMmQ3NzUxYzQ0ZWE5MjE5NDMxODcz
MC4uNDhlOWQxYThkNzY2NzI1YjU3OWMzNDExYzNlY2Q0NWI2ZGJmNGNmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnNwZWN0b3JDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYWdlLmg+CkBAIC0xNTcsNyArMTU4LDcgQEAgdm9pZCBXZWJOb2RlSGlnaGxpZ2h0Ojp1cGRh
dGUoKQogCiAgICAgOjpTZWxlY3RPYmplY3QoaGRjLmdldCgpLCBoYm1wLmdldCgpKTsKIAotICAg
IEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGhkYy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
V2luIGNvbnRleHQoaGRjLmdldCgpKTsKICAgICBjb250ZXh0LnNjYWxlKG1faW5zcGVjdGVkV2Vi
Vmlldy0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBtX2luc3BlY3RlZFdlYlZp
ZXctPnBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRyYXdIaWdobGlnaHQoY29udGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYzExYWM5ZDk3ZGJhZmUyYTNm
Mjg0NzdjY2UwNDQxZDliOTc3MDM2MC4uN2UxN2Y3MWQxNDJjMTZkYTUzZmU3MjY2ZjQ0Yzg4OWNk
NDM4MmUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTExNiw2ICsxMTYs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvR2VvbG9jYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkVycm9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGlj
c0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dFdpbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MVmlkZW9F
bGVtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KQEAgLTEyNTAsNyArMTI1MSw3
IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRXaXRoRGlyZWN0MkQoKQogCiAgICAgUkVDVCBjbGllbnRS
ZWN0ID0ge307CiAgICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KG1f
cmVuZGVyVGFyZ2V0LmdldCgpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoJnBsYXRmb3JtQ29u
dGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKIAogICAg
IHsKICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlNldFRhZ3MoV0VCS0lUX0RSQVdJTkcsIF9fTElO
RV9fKTsKQEAgLTE0MDcsNyArMTQwOCw3IEBAIHZvaWQgV2ViVmlldzo6cGFpbnRJbnRvQmFja2lu
Z1N0b3JlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBIREMgYml0bWFwREMsIGNvbnN0IEluCiAgICAg
bV9iYWNraW5nU3RvcmVSZW5kZXJUYXJnZXQgPSBudWxscHRyOwogI2VuZGlmCiAKLSAgICBHcmFw
aGljc0NvbnRleHQgZ2MoYml0bWFwREMsIG1fdHJhbnNwYXJlbnQpOworICAgIEdyYXBoaWNzQ29u
dGV4dFdpbiBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CiAgICAgZ2Muc2V0U2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93cyh3aW5kb3dzVG9QYWludCA9PSBQYWludFdlYlZpZXdBbmRDaGlsZHJl
bik7CiAgICAgZ2Muc2F2ZSgpOwogICAgIGlmIChtX3RyYW5zcGFyZW50KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNhMDhhNDQ0YzE4ODcxMzdh
MDhmY2E3NTFlYTJjZDZkOWM1MTc4ZTkuLjQyMWRhOWY1MzI4MWVlMmVhZGQyOTI2OTc3MzMyMGVi
YTZhYzU1MjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wNS0yNSAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdyYXBoaWNzQ29udGV4dAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MTcwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcDoKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0
aW9uYWwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9E
aXNwbGF5TGlzdFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKaW5kZXggODdhMzZhY2ZlNmExMDBjYzMyM2UyNDg5
N2ZjZTM4MDNmMjM0YTc3OC4uYTU5OGQ1NGEyNzUyOTU4YzQyZTRlMmI3OWU1MzM3YzU3YjE3NGI0
NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2NnL0Rpc3Bs
YXlMaXN0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
UmVwbGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYWRpZW50Lmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ5LDcgKzUwLDcgQEAgVEVTVChEaXNwbGF5TGlz
dFRlc3RzLCBSZXBsYXlXaXRoTWlzc2luZ1Jlc291cmNlKQogCiAgICAgYXV0byBjb2xvclNwYWNl
ID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UucGxhdGZvcm1Db2xvclNw
YWNlKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0byBpbWFnZUJ1ZmZlcklkZW50
aWZpZXIgPSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CiAKQEAgLTEx
Myw3ICsxMTQsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIE91dE9mTGluZUl0ZW1EZWNvZGlu
Z0ZhaWx1cmUpCiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNy
ZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lkdGgsIGNvbnRl
eHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0IHsg
Y2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IGNnQ29u
dGV4dC5nZXQoKSB9OwogCiAgICAgRGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0OwogICAgIFdyaXRp
bmdDbGllbnQgd3JpdGVyOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0
cywgSW5saW5lSXRlbVZhbGlkYXRpb25GYWlsdXJlKQogCiAgICAgYXV0byBjb2xvclNwYWNlID0g
YWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNlU1JHQikpOwog
ICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobnVsbHB0
ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdpZHRoLCBjb2xv
clNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdyYXBoaWNzQ29u
dGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8gcnVuVGVzdFdp
dGhJbnZhbGlkSWRlbnRpZmllciA9IFsmXShGbHVzaElkZW50aWZpZXIgaWRlbnRpZmllcikgewog
ICAgICAgICBFWFBFQ1RfRkFMU0UoaWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429684</attachid>
            <date>2021-05-25 13:03:09 -0700</date>
            <delta_ts>2021-05-25 15:17:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525130308.patch</filename>
            <type>text/plain</type>
            <size>427660</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmNDJkMWM1OWUwNWM4
MmEzYWIxNGZkZDBlOGQ3M2Y0OWFhMzVkNS4uZDk0YjNiYTMwMzJmYzAwNjEyMzcxOThiYmFkODI1
OThmOTIzMjFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxNSBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBqdXN0IGEgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgSW4g
cHJlcGFyYXRpb24gZm9yIGZ1dHVyZSBwYXRjaGVzIHdoaWNoIGludHJvZHVjZSBuZXcga2luZHMg
b2YgR3JhcGhpY3NDb250ZXh0cywKKyAgICAgICAgdmlydHVhbGl6ZSBHcmFwaGljc0NvbnRleHQs
IG1vdmluZyBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgaW50byBzdWJjbGFzc2VzCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dHtDRyxDYWlybyxEaXJlY3QyRH0sIE51bGxHcmFwaGljc0NvbnRleHQs
IERpc3BsYXlMaXN0OjpSZWNvcmRlciwKKyAgICAgICAgYW5kIE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXIuCisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0SW1wbCBkaXNzb2x2ZXMgYXdh
eTsgcGxhdGZvcm0gY29udGV4dHMgdGhhdCB3ZXJlCisgICAgICAgIHVubmVjZXNzYXJpbHkgaW1w
bGVtZW50ZWQgYm90aCBhcyBgR3JhcGhpY3NDb250ZXh0YCBhbmQgYXMgYSBzdWJjbGFzcworICAg
ICAgICBvZiBHcmFwaGljc0NvbnRleHRJbXBsIChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8gYW5k
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCkKKyAgICAgICAgYXJlIGZvbGRlZCBpbnRvIHRo
ZWlyIEdyYXBoaWNzQ29udGV4dCBzdWJjbGFzcy4KKworICAgICAgICBgcGFpbnRpbmdEaXNhYmxl
ZCgpYCBpcyBubyBsb25nZXIgcmVsZXZhbnQgaW4gR3JhcGhpY3NDb250ZXh0IGltcGxlbWVudGF0
aW9ucywKKyAgICAgICAgc28gd2Ugbm8gbG9uZ2VyIGhhdmUgdG8gY2hlY2sgaXQgZXZlcnl3aGVy
ZTsgTnVsbEdyYXBoaWNzQ29udGV4dCBvdmVycmlkZXMKKyAgICAgICAgZXZlcnl0aGluZyB3aXRo
IGFuIGVtcHR5IGltcGxlbWVudGF0aW9uLiBXZSBrZWVwIGBwYWludGluZ0Rpc2FibGVkKClgIGZv
cgorICAgICAgICB1c2UgaW4gY29kZSBvdXRzaWRlIG9mIEdyYXBoaWNzQ29udGV4dCwgd2hlcmUg
aXQganVzdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4KKyAgICAgICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBhbmQgdGhlIG90aGVycy4KKworICAgICAgICBBbHNvLCBhIGZldyBiaXRzIG9mIGNsZWFudXAg
dG8gbWFrZSB0aGlzIGVhc2llcjoKKworICAgICAgICAtIExlZ2FjeSBzaGFkb3cgcmFkaXVzIGJl
aGF2aW9yIGJlY29tZXMgYSBwYXJhbWV0ZXIgdG8gc2V0U2hhZG93IGluc3RlYWQgb2YgYSBzZXBh
cmF0ZSBtZXRob2QuCisgICAgICAgIC0gY2FudmFzQ2xpcCgpLCB3aGljaCBoYXNuJ3QgZG9uZSBh
bnl0aGluZyBkaWZmZXJlbnQgdGhhbiBjbGlwKCkgc2luY2UgU2tpYSwgaXMgcmVtb3ZlZC4KKyAg
ICAgICAgLSBHcmFwaGljc0NvbnRleHQgZ2FpbnMgcmVuZGVyaW5nTW9kZSgpIGluIHBsYWNlIG9m
IGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkuCisgICAgICAgIC0gU3ViY2xhc3NlcyBvdmVycmlkZSB1
cGRhdGVTdGF0ZSgpIHRvIHJlc3BvbmQgdG8gR3JhcGhpY3NDb250ZXh0IHN0YXRlIGNoYW5nZXMs
CisgICAgICAgICAgYXMgd2FzIGFscmVhZHkgZG9uZSBmb3IgR3JhcGhpY3NDb250ZXh0SW1wbCwg
dG8ga2VlcCBzdWJjbGFzc2luZyBzaW1wbGUuCisgICAgICAgIC0gYnVpbGRlclN0YXRlKCksIHdo
aWNoIHdhcyB1bnVzZWQsIGlzIHJlbW92ZWQuCisgICAgICAgIC0gZHJhd1BhdGgoKSBpcyBpbnRy
b2R1Y2VkIG9uIGFsbCBwbGF0Zm9ybXMsIHdpdGggYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRo
YXQganVzdCBmaWxscyBhbmQgc3Ryb2tlcy4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6Cisg
ICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9u
UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFp
bnRlcjo6cGFpbnRCb3hTaGFkb3cgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6aXNBY2NlbGVyYXRlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmFwcGx5U2hhZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6ZHJhd1RleHRVbmNoZWNrZWQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVk
KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICAqIHBhZ2Uvd2luL0ZyYW1l
Q0dXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVjdCk6CisgICAgICAgICog
cGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6aW1hZ2VGcm9tUmVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0v
U291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2Nv
YS5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRTdGF0ZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjpkdW1wIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JhaXNlZEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyU2hh
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlUGF0dGVybik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3RW1waGFzaXNNYXJrcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1
bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dFJvdW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
RHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok51bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1BsYXRm
b3JtQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFN0cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGVnYWN5U2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRBbnRp
YWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRT
aG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVs
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdOYXRp
dmVJbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0VGV4dERyYXdpbmdNb2RlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBlYXJhbmNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZVN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmlj
ZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0lu
dGVybmFsTGlua3MgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYWludGluZ0Rpc2FibGVkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGVyZm9ybWluZ1BhaW50SW52YWxp
ZGF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aW52YWxp
ZGF0aW5nQ29udHJvbFRpbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6aW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRldGVjdGluZ0NvbnRlbnRmdWxQYWludCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVRoaWNrbmVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU21vb3RoRm9udHMp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1
YW50aXplRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6YWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
b21wb3NpdGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpibGVuZE1vZGVPcGVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMdW1pbmFuY2VNYXNrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6dGV4dERyYXdpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzVmlzaWJsZVNoYWRvdyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc1NoYWRvdyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6Omhhc0JsdXJyZWRTaGFkb3cgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnVzZURhcmtBcHBlYXJhbmNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3RhdGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1RpbGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzSW5U
cmFuc3BhcmVuY3lMYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVS
TEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXREZXN0aW5h
dGlvbkZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGREZXN0
aW5hdGlvbkF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBw
b3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxh
eWVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmltcGwpOiBE
ZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1RpbGVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHA6Cisg
ICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5Q2FsbGJh
Y2spOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRyYXdSZXBhaW50Q291
bnRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tp
bmdMYXllcldpbi5jcHA6CisgICAgICAgIChXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxh
eUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm8pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86On5HcmFwaGljc0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2F2ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDYWlybzo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDYWlybzo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q2Fpcm86OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0xpbmVzRm9y
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0RvdHNG
b3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDYWlybzo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fp
cm86OnN0cm9rZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnNldExpbmVDYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNl
dExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lSm9pbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0
ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cm90YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzY2FsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJvdW5kZWRSZWN0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2Rl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3R2x5
cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0
cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RN
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0Zv
clRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRmb3JtVHJhbnNw
YXJlbmN5TGF5ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0ZXJu
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaG91bGRBbnRpYWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
c3Ryb2tlQm91bmRpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0cm9r
ZUNvbnRhaW5zIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb3JlSW50ZXJwb2xhdGlvblF1YWxp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6Y2dJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAg
IChXZWJDb3JlOjpjZ1RleHREcmF3aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6On5HcmFwaGljc0NvbnRleHRDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3UGF0dGVybkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxsUm91
bmRlZFJlY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpmaWxs
UmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6Y2xpcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmVuZFRyYW5zcGFyZW5jeUxheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldENHU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dENHOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRM
aW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFz
aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNjYWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm91bmRUb0Rldmlj
ZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVz
Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0VVJMRm9y
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0SXNDQUxheWVy
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6aXNDQUxheWVy
Q29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0
SXNBY2NlbGVyYXRlZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q0c6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENHOjpzdHJva2VFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YWRkRGVzdGluYXRpb25BdFBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENHU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydEludGVycG9sYXRpb25RdWFsaXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdQbGF0Zm9ybUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJl
bmN5TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2gpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzY2FsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldENUTSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldElzQ0FMYXllckNvbnRleHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0NBTGF5ZXJDb250ZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpp
c0FjY2VsZXJhdGVkQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3Ro
Rm9udHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUFscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxF
bGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1TdHJva2VFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBv
aW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpw
YXR0ZXJuQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhp
Y3NDb250ZXh0Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpkcmF3Rm9jdXNSaW5nVG9Db250ZXh0
QXRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3RG90c0Zv
ckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFj
ZTo6ZW5zdXJlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3Jk
ZXJDb3JlVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd0dseXBo
c1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbENvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3Jk
RHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlY29yZGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZWNv
cmRlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdQYXRoOjph
cHBseSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpTZXRTdGF0
ZTo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVj
b3JkZXI6OlJlY29yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRl
cjo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
UmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OlJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xlYXJTaGFkb3cp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpnZXRD
VE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpj
bGlwQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNv
cmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjphcHBlbmQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIubW06CisgICAgICAgICgtW1dlYkxheWVyIGRyYXdJbkNvbnRleHQ6XSk6Cisg
ICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmZpbGxSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29y
ZGVyOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpmaWxsUGF0aCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpzdHJva2VSZWN0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OnN0cm9rZVBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3TGluZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmdldENUTSBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09w
ZXJhdGlvblJlY29yZGVyOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAgKE5pY29zaWE6OkNh
aXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChO
aWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVkaWEpOgorICAg
ICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xlYXJTaGFkb3cpOiBEZWxl
dGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgp
OiBEZWxldGVkLgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0
Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmNsaXBCb3VuZHMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5j
cHA6CisgICAgICAgIChOaWNvc2lhOjpQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6
OkZvclBhaW50aW5nKToKKyAgICAgICAgKE5pY29zaWE6OlBhaW50aW5nQ29udGV4dENhaXJvOjpG
b3JSZWNvcmRpbmc6OkZvclJlY29yZGluZyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpHcmFwaGljc0NvbnRleHRDRyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENHOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENhaXJvOjpHcmFwaGljc0NvbnRleHRDYWlybyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzeXN0ZW1GYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpkZWZhdWx0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6On5HcmFwaGljc0NvbnRleHREaXJlY3QyRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzYXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnJlbGVhc2VX
aW5kb3dzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd1dpbmRvd3NCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJy
dXNoV2l0aENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJE
Ojpjb2xvcldpdGhHbG9iYWxBbHBoYSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c29saWRTdHJva2VCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2ggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVz
aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGF0
dGVybkZpbGxCcnVzaCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6YmVnaW5EcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjplbmREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpmbHVzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
dHJva2VTdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZHJhd0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjphcHBseVN0cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmFwcGx5RmlsbFBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwT3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN1cHBv
cnRzVHJhbnNwYXJlbmN5TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjp1cGRhdGVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpyb3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpzZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6cm91bmRUb0RldmljZVBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c2V0VVJMRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNDQUxheWVyQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6Omlz
QWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwVG9JbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGFpbnRGcmFt
ZUZvck1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3ND
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3lz
dGVtRmFjdG9yeSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUluaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bs
YXRmb3JtSW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YnJ1c2hXaXRoQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhH
bG9iYWxBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNvbGlkU3Ryb2tlQnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpzb2xpZEZpbGxCcnVzaCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5TdHJva2VCcnVzaCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhdHRlcm5GaWxs
QnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpiZWdpbkRyYXcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjplbmREcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Zmx1c2gpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
UGxhdGZvcm1QYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybVN0cm9rZVN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwQm91bmRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJh
bnNwYXJlbmN5TGF5ZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4p
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4
ZWxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xp
bmVGb3JUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVzRm9yVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFVSTEZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5n
TW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlQ29sb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRp
YWxpYXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURl
dmljZVNjYWxlRmFjdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNyZWF0ZVdpbmRvd3NCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmhkYyBjb25zdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpnZXRIQklUTUFQT2ZTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bh
dGhEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VDb250YWlucyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QgY29uc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW06CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JT
ZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2NvY29hL0F1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyQ29j
b2EuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yTGluayk6CisgICAgICAgICogcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnBh
aW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvQ29udGVudGZ1bFBhaW50Q2hlY2tlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNGb3JDb250
ZW50ZnVsUGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphcHBseUJveFNoYWRvd0ZvckJhY2tncm91bmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdpb24pOgorCiAyMDIxLTA1LTI0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2ggZnJvbSBX
VEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYzExOWRjYmUyMzI2MWUx
NGQyZjA4ZmJlMjA4ZmJlMjcwNDgzYzUxNC4uYjYzYWU1YjI2YTk4MTM2ZGJkNzEzZjZkOGMxY2Ux
NWMyMTliZTRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMS0wNS0yNSAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdy
YXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwOgorICAgICAgICAo
V2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAg
ICogU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcDoKKyAgICAgICAgKFdlYktpdDo6U2hh
cmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIFNoYXJlZC93
aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL2Nh
aXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QmFja2luZ1N0b3Jl
OjppbmNvcnBvcmF0ZVVwZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9XS1ByaW50aW5n
Vmlldy5tbToKKyAgICAgICAgKC1bV0tQcmludGluZ1ZpZXcgX2RyYXdQcmV2aWV3Ol0pOgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwOgorICAgICAgICAq
IFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6cGFpbnQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvUGx1
Z2lucy9QREYvUERGUGx1Z2luLm1tOgorICAgICAgICAoV2ViS2l0OjpQREZQbHVnaW46OnBhaW50
Q29udHJvbEZvckxheWVySW5Db250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZGZTbmFw
c2hvdEF0U2l6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRy
YXdQYWdlc1RvUERGSW1wbCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
cmludE9wZXJhdGlvbkd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByaW50T3BlcmF0aW9u
R3RrOjpyZW5kZXJQYWdlKToKKwogMjAyMS0wNS0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU3dpdGNoIGZyb20gV1RGOjpPcHRpb25hbCB0byBzdGQ6Om9wdGlv
bmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZmQ2MDkyNTQ0YmIyNTVhMTQwMGU5
ZDliNDVhZWEwYTlhZjQ4NzYzZC4uMjljZDRlNDQ2YjBiOThmMzA2NTNkYWIxNjZmYTEzYWVlNDk2
MDc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIx
LTA1LTI1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAg
IFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAg
ICgtW1dlYkZyYW1lIHByaW50VG9DR0NvbnRleHQ6cGFnZVdpZHRoOnBhZ2VIZWlnaHQ6XSk6Cisg
ICAgICAgICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbToKKyAgICAgICAgKC1bTlNTdHJp
bmcgX3dlYl9kcmF3QXRQb2ludDpmb250OnRleHRDb2xvcjpdKToKKyAgICAgICAgKiBXZWJJbnNw
ZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW06CisgICAgICAgICgtW1dlYk5vZGVIaWdobGln
aHRWaWV3IGRyYXdSZWN0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIF9kcmF3UmVjdDpjb250ZW50c09ubHk6XSk6CisKIDIwMjEtMDUtMjQg
IFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGlu
YXRpb25Db2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3Jt
IGNvbG9yIHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDQ1MDIyMzkzMDE4NmZmNTkyMzMzZGQ3ZDgyM2E2YTFm
ZDA5MDI2NjIuLmExM2NiMDY1YTkzNGIwMjUzZjlhN2MwODA4YWVhZDgzMTgyZmVkZmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKEZ1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXI6OmRyYXcpOgorICAgICAgICAqIFdlYkZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkZyYW1lOjpwYWludERvY3VtZW50UmVjdFRvQ29udGV4dCk6CisgICAgICAgIChX
ZWJGcmFtZTo6cGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQpOgorICAgICAgICAo
V2ViRnJhbWU6OnNwb29sUGFnZXMpOgorICAgICAgICAqIFdlYk5vZGVIaWdobGlnaHQuY3BwOgor
ICAgICAgICAoV2ViTm9kZUhpZ2hsaWdodDo6dXBkYXRlKToKKyAgICAgICAgKiBXZWJWaWV3LmNw
cDoKKyAgICAgICAgKFdlYlZpZXc6OnBhaW50V2l0aERpcmVjdDJEKToKKyAgICAgICAgKFdlYlZp
ZXc6OnBhaW50SW50b0JhY2tpbmdTdG9yZSk6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTdHJpbmdCdWlsZGVyOjphcHBlbmRM
aXRlcmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBlZjg1NmJjYTkxNGJhODRmMmI0NjZhNGQ3ODk2
ZjU3MjA5Y2JmMzljLi5jZWNmYjU1OGMyNmY0MjhhYjI1MWJjOGJjMGY4YTgyYWYwNjBmOWJiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0hlYWRlcnMuY21ha2UKQEAgLTEyMzksNyArMTIzOSw2IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJGYWN0b3J5LmgKQEAgLTEyODYs
NiArMTI4NSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL01lZGlhVXNhZ2VJbmZvLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9OYXRpdmVJ
bWFnZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvT3BlbkdMRVNTaGltcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
T3BlbkdMU2hpbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUZUVy5jbWFrZQppbmRleCA0Y2MzOTE5OTMxNTQ3M2Q5YWQzMTcyYjZhYWMxYjU5YmE4YmYxOTFj
Li44NjdkMjUzNjEzMDdmYzllZDAxMTZjN2MxMWE3ODBlNDc2ZjdkZThmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZQpAQCAtNDMsNyArNDMsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBwbGF0Zm9ybS9nZW5lcmljL0tleWVkRW5jb2RlckdlbmVyaWMuY3BwCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HTENvbnRleHQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0SW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9lZ2wvR0xDb250ZXh0RUdMLmNwcApAQCAt
NzEsNyArNzAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0R0xEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29u
V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5jcHAKQEAgLTE4OSw3ICsxODcsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0V3JpdGVV
dGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxl
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlCmluZGV4IGQwODMwOTk4NGZhZjE1ZWFjNjY5NGVjNjA0ZjNlNDU5ZmVmOTc1MjQu
LmIyMjBhZjIwYmQzYjk1YTRlNzlmMTEzZjI4ZDZkMDgwZDBlMGNiNzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV2luLmNtYWtlCkBAIC0xMTQsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29u
dHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVy
Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3QuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCBhNWM3NWRmNzkxZDcxYmQ2NzM3NDRmYjNmMDQ4MzZiNzcyYWM5OWQ5Li5lYWFmYjllMGIz
NmJkMzBmN2Q4MTc4OTYyZWY1ZjMwMDdkM2M0Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTk4Myw3
ICsxOTgzLDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEdMLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4
dHJhY3Rvci5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEltcGwuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllclRyYW5zZm9ybS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJV
cGRhdGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDdmMGZkZjQyOTI4NzU0YTlmNGYyN2FiNzNlOGNhYWNiZDU4MzhlZmQu
LjUxYmViMDczZTEyNWZlNWY4MDQwNzQ1NmU5ZDc0ZDFlMzVmN2MxYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg2MSw3ICs4
NjEsNyBAQAogCQkyRDlCRjc0NjFEQkZEQzQ3MDA3QTdEOTkgLyogTWVkaWFLZXlzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOUJGNzMzMURCRkRD
MEYwMDdBN0Q5OSAvKiBNZWRpYUtleXMuY3BwICovOyB9OwogCQkyRDlCRjc0NzFEQkZEQzQ5MDA3
QTdEOTkgLyogTWVkaWFLZXlNZXNzYWdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5QkY3MkYxREJGREMwRjAwN0E3RDk5IC8qIE1lZGlh
S2V5TWVzc2FnZUV2ZW50LmNwcCAqLzsgfTsKIAkJMkQ5RjBFMTMxNEZGMUNCRjAwQkEwRkY3IC8q
IGxpbmVhclNSR0IuaWNjIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcgLyogbGluZWFyU1JHQi5pY2MgKi87IH07
Ci0JCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAwMTIzRjFGQUQ4
N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAv
KiBOdWxsR3JhcGhpY3NDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyREEzOTdFMzI2NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdFMEYx
MDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREM4RDM5ODI1RjJG
RTk3MDBDRkNCQUIgLyogTW9kZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEQzhEMzk3MjVGMkZFOTQwMENGQ0JBQiAvKiBNb2RlbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJERDVBNzI3MUVCRUU0
N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRENUE3MjYxRUJFRTQ3RDAwOUJBNTk3IC8qIENv
bXBvc2l0aW9uVW5kZXJsaW5lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTYwODgsOCArNjA4OCw2IEBACiAJCTBDNDUzNDI2MTBDREJCRkEwMDg2
OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEU3MDU4RUQxQkM1QkMxOTAwNDVBNTA3IC8qIFNlYXJjaFBvcHVwTWVudUNvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2VhcmNoUG9wdXBN
ZW51Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBFNzA1OEYzMUJDNUND
RDcwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFy
Y2hQb3B1cE1lbnVDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTIz
RjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MDAxMjQwMUZBRDg4MTAwMDUzMUQ3NiAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjAzQzA3MzE4ODQ2OTVFMDBBNUY4Q0EgLyogU3lzdGVtTWVtb3J5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5c3RlbU1lbW9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjA5OUQwNjE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5
cGVkQXJyYXlDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMDk5RDA3MTdCOTY4QTEwMEZGODRCOSAvKiBXZWJDb3JlVHlwZWRBcnJheUNv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZVR5cGVk
QXJyYXlDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MzI5LDYg
KzczMjcsNyBAQAogCQkyRDlCRjc0MDFEQkZEQzBGMDA3QTdEOTkgLyogTmF2aWdhdG9yRU1FLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5hdmlnYXRvckVNRS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUJGNzQxMURCRkRDMEYwMDdBN0Q5OSAv
KiBOYXZpZ2F0b3JFTUUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmF2aWdh
dG9yRU1FLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOUYwRTEyMTRGRjFDQkYw
MEJBMEZGNyAvKiBsaW5lYXJTUkdCLmljYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IGZpbGU7IHBhdGggPSBsaW5lYXJTUkdCLmljYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkRBMzk3RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFw
aGljc0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTnVsbEdyYXBo
aWNzQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREFBRTMyQzE5RENB
RjYwMDBFMDAyRDIgLyogTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUFFMzJEMTlEQ0FGNjAwMEUwMDJEMiAvKiBNb2NrUGFn
ZU92ZXJsYXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1Bh
Z2VPdmVybGF5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEQUYzNDNB
MUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnN0YW50UHJvcGVydHlNYXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjcwMTUsOCArMjcwMTQsNiBAQAogCQkJCTdDMzMwQTAx
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLywKIAkJ
CQk3QkIzNEE0NzI1Mzc3NkM3MDAwMjlEMDggLyogR3JhcGhpY3NDb250ZXh0R0xJbWFnZUV4dHJh
Y3Rvci5jcHAgKi8sCiAJCQkJN0JCMzRBNDUyNTM3NzZDNjAwMDI5RDA4IC8qIEdyYXBoaWNzQ29u
dGV4dEdMSW1hZ2VFeHRyYWN0b3IuaCAqLywKLQkJCQkwRjAwMTI0MDFGQUQ4ODEwMDA1MzFENzYg
LyogR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgKi8sCi0JCQkJMEYwMDEyM0YxRkFEODdENjAwNTMx
RDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLywKIAkJCQkwRjU4MEIwOTBGMTJBMjY5MDA1
MUQ2ODkgLyogR3JhcGhpY3NMYXllci5jcHAgKi8sCiAJCQkJMEY1ODBCMEEwRjEyQTI2OTAwNTFE
Njg5IC8qIEdyYXBoaWNzTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEIwQjBGMTJBMjY5MDA1MUQ2ODkg
LyogR3JhcGhpY3NMYXllckNsaWVudC5oICovLApAQCAtMjcwOTcsNiArMjcwOTQsNyBAQAogCQkJ
CTMxNEJFM0E1MUIzMTAzRkIwMDE0MTk4MiAvKiBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2UuaCAq
LywKIAkJCQk3MjUyMzk2QjI1NENBREMyMDBGNUZCMTUgLyogTmF0aXZlSW1hZ2UuY3BwICovLAog
CQkJCTU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAorCQkJCTJE
QTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJ
QjI3NTM1NTIwQjA1MzgxNDAwMkNFNjRGIC8qIFBhdGguY3BwICovLAogCQkJCUIyNzUzNTUzMEIw
NTM4MTQwMDJDRTY0RiAvKiBQYXRoLmggKi8sCiAJCQkJQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkw
IC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgKi8sCkBAIC0zMjMwMCw3ICszMjI5OCw2IEBACiAJ
CQkJMUNFOEQxMjcyNjE4NUMwRTAwRkMzQUVGIC8qIERpc3BsYXlMaXN0SXRlbUJ1ZmZlcklkZW50
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNDM3N0Q1NzI1NTFDOUM2MDA4
MEFCRkUgLyogRGlzcGxheUxpc3RJdGVtVHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMzRTYy
NDMyNjU5NzkxODAwNTQ4QUNEIC8qIFBsYXRmb3JtQ29sb3JTcGFjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUNFOEQxMkUyNjE4NjFDNDAwRkMzQUVGIC8qIERpc3BsYXlMaXN0SXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlz
dFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjcwNSw3ICszMjcw
Miw2IEBACiAJCQkJN0I2REM4MTkyNTcxMkU5MjAwMzgwQzcwIC8qIEdyYXBoaWNzQ29udGV4dEdM
SU9TdXJmYWNlU3dhcENoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlGQzEwNDJEMzY1
MDAwOUQ0NDcgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTMxOUE3Mjg4MjNDMjY3RkUwMDg1MzUzQyAvKiBHcmFwaGljc0NvbnRleHRHTE9wZW5HTE1hbmFn
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4NSAvKiBHcmFw
aGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBENjcwODBFOUU5REVCMDBF
NDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNTgwQjBEMEYxMkEyNjkwMDUxRDY4OSAvKiBHcmFwaGljc0xheWVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNB
LmggaW4gSGVhZGVycyAqLywKQEAgLTM0MzY2LDYgKzM0MzYyLDcgQEAKIAkJCQkxQTU2OUQxMTBE
N0UyQjgyMDA3QzM5ODMgLyogbnBydW50aW1lX3ByaXYuaCBpbiBIZWFkZXJzICovLAogCQkJCTFB
OTI3RkQ0MTQxNkExNUIwMDNBODNDOCAvKiBucHR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzUwMEYzMjEzRkRFM0JFMDA5OUVDMjQgLyogTlNTY3JvbGxlckltcERldGFpbHMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTJEQTM5N0U1MjY1QzczNzUwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDODEyNTFGMTJEMDAzRUYyNjkgLyogTnVt
YmVySW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU2OUQxMjBEN0UyQjgyMDA3QzM5
ODMgLyogb2JqY19jbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTQwRDdFMkI4MjAw
N0MzOTgzIC8qIG9iamNfaGVhZGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTM0NTM4LDYgKzM0NTM1
LDcgQEAKIAkJCQk0OTlCM0VDNTEyOENDQzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OTNFNUUwOTEyRDY0MjA1MDAwMjAwODEgLyogUGxhdGZvcm1D
QUxheWVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDcwQkExMzE4MDc0RERGMDAwMTkw
OEEgLyogUGxhdGZvcm1DQUxheWVyQ29jb2EuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDM0U2MjQz
MjY1OTc5MTgwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUExNDk3ODcxMUFCQUYzQTUwMENFRjdFNCAvKiBQbGF0Zm9ybUNvbnRlbnRGaWx0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDNUM3NjJCMTQ5N0ZFMTQwMEJDNDc3NSAvKiBQbGF0Zm9ybUV2
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjYwMUVCRjE0QjNCOUFEMDAxMkMwRkUgLyogUGxh
dGZvcm1FdmVudEZhY3RvcnlJT1MuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAK
aW5kZXggMDA5NzlkMDA5Yjg1NTYzZTUyN2Y4MjgxZmU3MmE5ZDE3OTkzMGFlMy4uZDQ2OGZiYzBm
NzZhYjBiMmRiMjIyYWQ2MGFjY2RlNGM2NjVkZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBA
IC0xMjk4LDEwICsxMjk4LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hT
aGFkb3coUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgYXV0
byBzaGFkb3dSZWN0T3JpZ2luID0gZmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCkgKyBzaGFkb3dP
ZmZzZXQ7CiAgICAgICAgIGF1dG8gYWRqdXN0ZWRTaGFkb3dPZmZzZXQgPSBzaGFkb3dSZWN0T3Jp
Z2luIC0gYWRqdXN0ZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICBpZiAo
c2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRMZWdhY3lTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTaGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93LmNvbG9yKCkpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRT
aGFkb3coYWRqdXN0ZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCks
IHNoYWRvdy5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDog
U2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAKICAgICAgICAgaWYgKGhhc0JvcmRlclJhZGl1
cykgewogICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNz
YXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0xNDEy
LDExICsxNDA5LDcgQEAgdm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCb3hTaGFkb3co
UGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIFNoYWQKICAgICAgICAgcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAgICAgc2hhZG93T2Zm
c2V0IC09IGV4dHJhT2Zmc2V0OwogCi0gICAgICAgIGlmIChzaGFkb3cuaXNXZWJraXRCb3hTaGFk
b3coKSkKLSAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldExlZ2FjeVNoYWRv
dyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93LmNvbG9yKCkpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLQorICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNo
YWRvdy5jb2xvcigpLCBzaGFkb3cuaXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01v
ZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShzaGFkb3dDYXN0aW5nUmVj
dCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsQ29sb3IpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKaW5kZXggNGY0NmY2NTkwOTU5YTFlNGNkZGNkY2MzNzUyODA1MTZkNDJjYTFkMS4uZTdj
MDI4NWY3NTU0NTQ4MDNiMTQwYzkyMGJkNGIyYWZkZmU2MWY0ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKQEAgLTI1Miw3ICsyNTIsNyBAQCBib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCiAgICAgYXV0byogY29udGV4dCA9IGNhbnZhc0Jhc2UoKS5leGlzdGluZ0Ry
YXdpbmdDb250ZXh0KCk7Ci0gICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+aXNBY2NlbGVy
YXRlZENvbnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5yZW5kZXJpbmdN
b2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQogICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZgpAQCAtMTEyMCw3ICsxMTIwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpjbGlwSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgQ2FudmFzRmlsbFJ1
bGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgYy0+Y2FudmFz
Q2xpcChwYXRoLCB0b1dpbmRSdWxlKHdpbmRpbmdSdWxlKSk7CisgICAgYy0+Y2xpcFBhdGgocGF0
aCwgdG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmJlZ2luQ29tcG9zaXRlTGF5ZXIoKQpAQCAtMTIxMiw3ICsxMjEyLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjbGVhclJlY3QoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgd2lkdGgsIGZsb2EKICAgICBpZiAoc2hvdWxkRHJhd1NoYWRvd3MoKSkgewog
ICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgIHNhdmVkID0gdHJ1ZTsKLSAgICAgICAg
Y29udGV4dC0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7CisgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2ssIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfQog
ICAgIGlmIChzdGF0ZSgpLmdsb2JhbEFscGhhICE9IDEpIHsKICAgICAgICAgaWYgKCFzYXZlZCkg
ewpAQCAtMTM3OSw5ICsxMzc5LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjphcHBseVNoYWRvdygpCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAg
ZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwogICAgICAgICBmbG9h
dCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICAgICAgYy0+c2V0
TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRlKCkuc2hhZG93Qmx1
ciwgc3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgIGMtPnNldFNoYWRvdyhGbG9hdFNpemUo
d2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRlKCkuc2hhZG93Q29sb3Is
IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGMtPnNldExl
Z2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAg
ICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
LCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogfQogCiBib29sIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKQEAgLTIwMzAsNyArMjAzMCw3
IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFz
UGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUobmF0aXZlSW1hZ2UucmVsZWFzZU5vbk51
bGwoKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1
dG8gcmVuZGVyaW5nTW9kZSA9ICFkcmF3aW5nQ29udGV4dCgpIHx8IGRyYXdpbmdDb250ZXh0KCkt
PmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisgICAgYXV0byByZW5kZXJpbmdNb2RlID0gZHJh
d2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IHZpZGVvRWxl
bWVudC5jcmVhdGVCdWZmZXJGb3JQYWludGluZyhzaXplKHZpZGVvRWxlbWVudCksIHJlbmRlcmlu
Z01vZGUsIGNvbG9yU3BhY2UoKSwgcGl4ZWxGb3JtYXQoKSk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yNDczLDcgKzI0NzMsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdUZXh0VW5jaGVja2VkKGNvbnN0IFRleHRS
dW4mIHRleHRSdW4sIGZsbwogCiAgICAgICAgICAgICBzaGFkb3dPZmZzZXQgKz0gb2Zmc2V0Owog
Ci0gICAgICAgICAgICBjLT5zZXRMZWdhY3lTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRp
dXMsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgIGMtPnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7CiAK
ICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIGMtPnNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2spOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDNmZjNjNjk5ZmVm
M2Y0NmNlNGZjN2U5NTZlMzNhZDM2MGFmYTczZWMuLmQzYzllZDMyYzc3ZjUwNWIwYzhlYmQzMjUz
ZTZkMDQzNTlkNjYxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTY5LDYgKzY5
LDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJM
b2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJOdWxsR3JhcGhp
Y3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiT3ZlcmZsb3dFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlT3ZlcmxheUNvbnRyb2xsZXIuaCIKQEAgLTQxODQsMTIgKzQxODUs
MTIgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUNvbnRyb2xUaW50cygpCiAgICAgICAgIHBhZ2Ut
PnNldElzQ291bnRpbmdSZWxldmFudFJlcGFpbnRlZE9iamVjdHMoaXNDdXJyZW50bHlDb3VudGlu
Z1JlbGV2YW50UmVwYWludGVkT2JqZWN0KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJl
YXNvbnMgcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKQordm9pZCBGcmFtZVZpZXc6OnRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zIHBhaW50SW52YWxpZGF0aW9uUmVhc29ucykKIHsKICAgICBpZiAobmVlZHNMYXlv
dXQoKSkKICAgICAgICAgbGF5b3V0Q29udGV4dCgpLmxheW91dCgpOwogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBOdWxsR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQocGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKICAgICBpZiAocGxh
dGZvcm1XaWRnZXQoKSkgewogICAgICAgICAvLyBGSVhNRTogY29uc3VsdCBwYWludHNFbnRpcmVD
b250ZW50cygpLgogICAgICAgICBwYWludENvbnRlbnRzKGNvbnRleHQsIHZpc2libGVDb250ZW50
UmVjdChMZWdhY3lJT1NEb2N1bWVudFZpc2libGVSZWN0KSk7CkBAIC00NzM5LDcgKzQ3NDAsNyBA
QCB2b2lkIEZyYW1lVmlldzo6YWRqdXN0UGFnZUhlaWdodERlcHJlY2F0ZWQoZmxvYXQgKm5ld0Jv
dHRvbSwgZmxvYXQgb2xkVG9wLCBmbG9hdAogCiAgICAgfQogICAgIC8vIFVzZSBhIGNvbnRleHQg
d2l0aCBwYWludGluZyBkaXNhYmxlZC4KLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChHcmFw
aGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSk7CisgICAgTnVsbEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0KE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6Tm9uZSk7CiAgICAgcmVuZGVyVmlldy0+c2V0VHJ1bmNhdGVkQXQoc3RhdGlj
X2Nhc3Q8aW50PihmbG9vcmYob2xkQm90dG9tKSkpOwogICAgIEludFJlY3QgZGlydHlSZWN0KDAs
IHN0YXRpY19jYXN0PGludD4oZmxvb3JmKG9sZFRvcCkpLCByZW5kZXJWaWV3LT5sYXlvdXRPdmVy
Zmxvd1JlY3QoKS5tYXhYKCksIHN0YXRpY19jYXN0PGludD4oY2VpbGYob2xkQm90dG9tIC0gb2xk
VG9wKSkpOwogICAgIHJlbmRlclZpZXctPnNldFByaW50UmVjdChkaXJ0eVJlY3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmgKaW5kZXggOWVkMWM3MjNlOTljMmEyY2E2MTljYzg4NWVlMmFjYTU2NjZm
OWEwZi4uZjhlMDIxMTcwMDdjYzlmMDZlZGVjZTUxZmY3OWY1ODA0ODVhMTdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiTGF5b3V0TWlsZXN0b25lLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVj
dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYWdpbmF0
aW9uLmgiCiAjaW5jbHVkZSAiUGFpbnRQaGFzZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQu
aCIKQEAgLTY2Niw5ICs2NjcsOSBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBGcmFt
ZUZsYXR0ZW5pbmcgZWZmZWN0aXZlRnJhbWVGbGF0dGVuaW5nKCkgY29uc3Q7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250
ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnMpOwotICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRy
b2xUaW50cygpIHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihHcmFwaGljc0NvbnRleHQ6
OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsgfQot
ICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNlRm9y
UGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMpOyB9CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udHJv
bFRpbnRzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRl
eHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKTsg
fQorICAgIHZvaWQgaW52YWxpZGF0ZUltYWdlc1dpdGhBc3luY0RlY29kZXMoKSB7IHRyYXZlcnNl
Rm9yUGFpbnRJbnZhbGlkYXRpb24oTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRp
b25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQogCiAgICAg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyc0ZvckFsbFNjcm9sbGFibGVBcmVhcygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCmluZGV4IDczZDhiNDljZWE3Y2E2NThkNTU0
NmQzZWIxNTIyYWQzNGMwYWVjMWMuLmExOGZlNWJiYWI3ZTM2NDk5MzI5ZjJhY2Y3Y2Y2ZjAzYWQy
NmI2YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lQ0dXaW4uY3BwCkBAIC03Miw3ICs3
Miw3IEBAIEdESU9iamVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KGNvbnN0IEZyYW1lKiBmcmFt
ZSwgSW50UmVjdCYgaXIpCiAgICAgICAgIDgsIHcgKiBzaXplb2YoUkdCUVVBRCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCkpOwogICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dC5nZXQo
KSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoY29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0Q0cgZ2MoY29udGV4dC5nZXQoKSk7CiAKICAgICBkcmF3UmVjdEludG9Db250ZXh0
KGlyLCBmcmFtZS0+dmlldygpLCBnYyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvd2luL0ZyYW1lR2RpV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2luL0ZyYW1lR2Rp
V2luLmNwcAppbmRleCAxNjFiNGU5MzI2ZjViMmIwMTY5MGFlMTQ5MTk3ZWJmZTgzMGZlYjk3Li5i
NzlmZWJmNjM4YTZhYjljNDJmM2YyNDZlYzQxZDJjNTJhZWVlZWE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUdkaVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlIDx3dGYvd2luL0dE
SU9iamVjdC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01OSw3ICs2MCw3IEBAIEdESU9i
amVjdDxIQklUTUFQPiBpbWFnZUZyb21SZWN0KEZyYW1lKiBmcmFtZSwgSW50UmVjdCYgaXIpCiAg
ICAgSEdESU9CSiBoYm1wT2xkID0gOjpTZWxlY3RPYmplY3QoYm1wREMuZ2V0KCksIGhCbXAuZ2V0
KCkpOwogCiAgICAgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoYm1wREMuZ2V0KCkpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHRXaW4gZ2MoYm1wREMuZ2V0KCkpOwogICAgICAgICB2aWV3
LT5wYWludCgmZ2MsIGlyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
aW5kZXggYzFiNTM2MDU3MTM3NzRkYzAwNmQwMjhlZGE3YzZhODIxM2Q2Y2NhMS4uMjM3ZWJmYmI4
MDMzOGQzMTNkMmE1MWE3N2UyODMwOWQ3MDVmYmY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKQEAgLTEyLDcgKzEyLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3Jl
QmFja2VuZENhaXJvWDExLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA1ZjAxNDk0
ZjNjYTFlMzFkNzQ3YmY3YzdhZmI3NmFkMGNkN2Y2NzBiLi4xOTdlMzNjZGMzNzUzOGFjOTAwYzg3
ZDU0ZDljNmMzZjM1NjlmNWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTI5LDcgKzI5LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJbWFnZUNvY29hLm1tCmluZGV4IDZkODExODg4ODQ2NGQ4
MTU1ZDlkNTA4MzJjY2JhNjQzYjE4N2RhZDguLmEwN2Q2NDZhMmU4MGMxZmUzZTUxNTRhZDdlOGY2
ZTAxNDg5ZWI5ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0Ry
YWdJbWFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL0RyYWdJ
bWFnZUNvY29hLm1tCkBAIC0zNSw3ICszNSw3IEBACiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgog
I2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJGb250U2VsZWN0b3IuaCIKLSNp
bXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
ICNpbXBvcnQgIkltYWdlLmgiCiAjaW1wb3J0ICJMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNl
LmgiCiAjaW1wb3J0ICJQYWdlLmgiCkBAIC0zMDAsNyArMzAwLDcgQEAgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgZWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGkKICAgICBSZXRhaW5QdHI8TlNJbWFnZT4gZHJhZ0ltYWdlID0gYWRvcHROUyhbW05T
SW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTppbWFnZVNpemVdKTsKICAgICBbZHJhZ0ltYWdlIF93
ZWJfbG9ja0ZvY3VzV2l0aERldmljZVNjYWxlRmFjdG9yOmRldmljZVNjYWxlRmFjdG9yXTsKIAot
ICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0uQ0dDb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0uQ0dDb250ZXh0KTsKIAogICAgIGNvbnRleHQuZmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QobGF5b3V0LmJvdW5kaW5nUmVjdCwgRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkobGlua0ltYWdlQ29ybmVyUmFkaXVzKSksIGNvbG9yRnJvbU5TQ29s
b3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGUuY3BwCmluZGV4IDg3YTQ0YTUzNDdh
Yjg2YmE4ZTE5MzBmMDQyMGU2NDUwOTU2MGI4MWQuLjk2YzlmMGU2OGQxYjlmNGExYTg4NWMwMGEw
M2YzYjFmNWYzNDk3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYXNjYWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FzY2FkZS5jcHAKQEAgLTIyOSw5ICsyMjksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8RGlz
cGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IEZvbnRDYXNjYWRlOjpkaXNwbGF5TGlzdEZv
clRleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGlzcGxheUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+IGRpc3BsYXlMaXN0ID0gbWFrZVVuaXF1
ZTxEaXNwbGF5TGlzdDo6SW5NZW1vcnlEaXNwbGF5TGlzdD4oKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQgcmVjb3JkaW5nQ29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRl
eHQpIHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsICpkaXNwbGF5TGlzdCwgY29udGV4dC5zdGF0ZSgpLCBGbG9hdFJl
Y3QoKSwgQWZmaW5lVHJhbnNmb3JtKCksIG51bGxwdHIsIERpc3BsYXlMaXN0OjpEcmF3R2x5cGhz
UmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RG9udERlY29uc3RydWN0KTsKLSAg
ICB9KTsKKyAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgcmVjb3JkaW5nQ29udGV4dCgqZGlzcGxh
eUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFmZmluZVRyYW5zZm9ybSgpLCBu
dWxscHRyLCBEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25z
dHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCk7CiAgICAgCiAgICAgRmxvYXRQb2ludCBzdGFydFBv
aW50ID0gdG9GbG9hdFBvaW50KFdlYkNvcmU6OnNpemUoZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFu
Y2UoKSkpOwogICAgIGRyYXdHbHlwaEJ1ZmZlcihyZWNvcmRpbmdDb250ZXh0LCBnbHlwaEJ1ZmZl
ciwgc3RhcnRQb2ludCwgY3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDk5
MzZiNzc1M2JlZjllNTEzMTE5ZjI5MDYzZmMzNWFlZWRhNjkzMmUuLjk3MGMzNzVjYmQ1ODE5YTIw
MGIyMGI2NzEzMjg3MGFkNWQ5MTdhOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtMzAsMTEgKzMwLDExIEBACiAj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhZGllbnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TWVkaWFQbGF5ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllclByaXZhdGUuaCIKKyNpbmNsdWRl
ICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUm91bmRlZFJlY3QuaCIKICNpbmNs
dWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtODIs
MTEgKzgyLDYgQEAgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKCkK
ICAgICAsIHNob3VsZFNtb290aEZvbnRzKHRydWUpCiAgICAgLCBzaG91bGRTdWJwaXhlbFF1YW50
aXplRm9udHModHJ1ZSkKICAgICAsIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQotI2lm
IFVTRShDRykKLSAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29ycmVjdGx5IHJlbmRlcnMgc2hhZG93
cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVtLzgxMDM0NDI+KSwKLSAgICAvLyBi
dXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJlaGF2aW9yIGZvciBjYW52YXMgYW5k
IC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAsIHNoYWRvd3NVc2VMZWdhY3lSYWRpdXMoZmFsc2Up
Ci0jZW5kaWYKICAgICAsIGRyYXdMdW1pbmFuY2VNYXNrKGZhbHNlKQogewogfQpAQCAtMTYwLDEw
ICsxNTUsMTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YWNjdW11bGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEcKICAgICB9CiAKICAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IERlYWwgd2l0aCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzLgogICAg
ICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAg
bV9zdGF0ZS5zaGFkb3dCbHVyID0gc3RhdGUuc2hhZG93Qmx1cjsKICAgICAgICAgbV9zdGF0ZS5z
aGFkb3dDb2xvciA9IHN0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICBtX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSBzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlOwogICAgIH0KIAogICAgIGlmIChmbGFn
cy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkK
QEAgLTIyOSwxNCArMjI0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6YXBw
bHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogICAgIGlmIChtX2NoYW5nZUZsYWdz
LmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dzSWdub3JlVHJhbnNmb3Jtc0No
YW5nZSkpCiAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiAKLSAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250
YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkgewotI2lmIFVTRShDRykK
LSAgICAgICAgaWYgKG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykKLSAgICAgICAgICAg
IGNvbnRleHQuc2V0TGVnYWN5U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNo
YWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAg
ICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRl
LnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwotICAgIH0KKyAgICBpZiAobV9jaGFu
Z2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKSkKKyAg
ICAgICAgY29udGV4dC5zZXRTaGFkb3cobV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlKTsK
IAogICAgIGlmIChtX2NoYW5nZUZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpT
dHJva2VUaGlja25lc3NDaGFuZ2UpKQogICAgICAgICBjb250ZXh0LnNldFN0cm9rZVRoaWNrbmVz
cyhtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CkBAIC0zMDIsOSArMjkxLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hh
bmdlKSkgewogICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvdy1ibHVyIiwgbV9zdGF0ZS5z
aGFkb3dCbHVyKTsKICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctb2Zmc2V0IiwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQpOwotI2lmIFVTRShDRykKLSAgICAgICAgdHMuZHVtcFByb3BlcnR5
KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVzIiwgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFk
aXVzKTsKLSNlbmRpZgorICAgICAgICB0cy5kdW1wUHJvcGVydHkoInNoYWRvd3MtdXNlLWxlZ2Fj
eS1yYWRpdXMiLCBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPT0gU2hhZG93UmFkaXVzTW9kZTo6
TGVnYWN5KTsKICAgICB9CiAKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTM2MSw1NSArMzQ4LDE5
IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlQ2hhbmdlJiBzdGF0ZUNoCiAgICAgcmV0dXJuIHRzOwogfQogCi1HcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMgcGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zKQotICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zKQotewotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1HcmFwaGljc0NvbnRleHQp
Ci17Ci0gICAgcGxhdGZvcm1Jbml0KHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZh
Y3RvcnkmIGZhY3RvcnlGdW5jdGlvbikKLSAgICA6IG1faW1wbChmYWN0b3J5RnVuY3Rpb24oKnRo
aXMpKQotewotfQotCiBHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQoKQogewogICAg
IEFTU0VSVChtX3N0YWNrLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKCFtX3RyYW5zcGFyZW5jeUNv
dW50KTsKLSAgICBwbGF0Zm9ybURlc3Ryb3koKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQ6
Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAg
cmV0dXJuIG1faW1wbC0+aGFzUGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgcmV0dXJuICEhbV9kYXRh
OworICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lMYXllckNvdW50KTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNhdmUoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIG1fc3RhY2suYXBwZW5kKG1fc3RhdGUpOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnNhdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICAgICBpZiAobV9zdGFjay5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJFUlJP
UiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpIHN0YWNrIGlzIGVtcHR5Iik7CiAgICAg
ICAgIHJldHVybjsKQEAgLTQyMiwyMCArMzczLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCkKICAgICAvLyBDYW52YXMgZWxlbWVudHMgd2lsbCBpbW1lZGlhdGVseSBzYXZlKCkg
YWdhaW4sIGJ1dCB0aGF0IGdvZXMgaW50byBpbmxpbmUgY2FwYWNpdHkuCiAgICAgaWYgKG1fc3Rh
Y2suaXNFbXB0eSgpKQogICAgICAgICBtX3N0YWNrLmNsZWFyKCk7Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+cmVzdG9yZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSYWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGVs
bGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIHNhdmUoKTsKIAogICAgIHNldFN0
cm9rZUNvbG9yKHNoYWRvd0NvbG9yKTsKQEAgLTQ1MSw2NyArMzkyLDIxIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0
IENvbG9yJiBlbGxpCiAgICAgcmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAgICBtX3N0YXRlLnN0cm9r
ZVRoaWNrbmVzcyA9IHRoaWNrbmVzczsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNr
bmVzc0NoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybVN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3R5bGUpCi17Ci0gICAgbV9zdGF0ZS5zdHJva2VTdHls
ZSA9IHN0eWxlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoc3R5bGUpOwot
fQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogewogICAgIG1fc3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxs
cHRyOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQgPSBvZmZzZXQ7Ci0gICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBtX3N0YXRl
LnNoYWRvd0NvbG9yID0gY29sb3I7Ci0jaWYgVVNFKENHKQotICAgIG1fc3RhdGUuc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cyA9IGZhbHNlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFk
b3dDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93
KG9mZnNldCwgYmx1ciwgY29sb3IpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMZWdhY3lTaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3coY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgU2hh
ZG93UmFkaXVzTW9kZSByYWRpdXNNb2RlKQogewogICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0g
b2Zmc2V0OwogICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7CiAgICAgbV9zdGF0ZS5zaGFk
b3dDb2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMgPSB0cnVlOwotI2VuZGlmCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFu
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNldFBsYXRmb3JtU2hhZG93KG9mZnNl
dCwgYmx1ciwgY29sb3IpOworICAgIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IHJhZGl1c01v
ZGU7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRv
d0NoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCkBAIC01
MTksMTUgKzQxNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRvdygpCiAgICAg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoKTsKICAgICBtX3N0YXRlLnNoYWRvd0Js
dXIgPSAwOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3IgPSBDb2xvcigpOwotI2lmIFVTRShDRykK
LSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsZWFyU2hhZG93KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOworICAgIG1fc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQ7CisgICAgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSk7CiB9CiAK
IGJvb2wgR3JhcGhpY3NDb250ZXh0OjpnZXRTaGFkb3coRmxvYXRTaXplJiBvZmZzZXQsIGZsb2F0
JiBibHVyLCBDb2xvciYgY29sb3IpIGNvbnN0CkBAIC01NDQsNjYgKzQzMiw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fc3Rh
dGUuZmlsbENvbG9yID0gY29sb3I7CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRy
OwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0
UGxhdGZvcm1GaWxsQ29sb3IoY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKLXsK
LSAgICBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hv
dWxkQW50aWFsaWFzKQotewotICAgIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50
aWFsaWFzOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRl
KG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMo
c2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNt
b290aEZvbnRzKGJvb2wgc2hvdWxkU21vb3RoRm9udHMpCi17Ci0gICAgbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250cyA9IHNob3VsZFNtb290aEZvbnRzOwotICAgIAotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc2hvdWxkU21vb3RoRm9udHMpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKQotewotICAgIG1fc3RhdGUuc2hvdWxk
U3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzOwotICAg
IGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpCi17Ci0gICAgbV9zdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsK
LQotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02
MTEsOCArNDQwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUmVm
PFBhdHRlcm4+JiYgcGF0dGVybikKICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0geyB9OwogICAg
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgPSBudWxscHRyOwogICAgIG1fc3RhdGUuc3Ryb2tlUGF0
dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlUGF0dGVy
bkNoYW5nZSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVBhdHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikKQEAgLTYyMCw4ICs0NDgsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYgcGF0dGVybikK
ICAgICBtX3N0YXRlLmZpbGxDb2xvciA9IHsgfTsKICAgICBtX3N0YXRlLmZpbGxHcmFkaWVudCA9
IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5maWxsUGF0dGVybiA9IFdURk1vdmUocGF0dGVybik7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUGF0dGVybkNoYW5nZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+JiYgZ3Jh
ZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9y
bSkKQEAgLTYzMCwxNSArNDU3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdy
YWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHIKICAgICBtX3N0
YXRlLnN0cm9rZUdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudFNwYWNlVHJhbnNmb3JtID0gc3Ryb2tlR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsK
ICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZp
bGxSdWxlKFdpbmRSdWxlIGZpbGxSdWxlKQotewotICAgIG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxs
UnVsZTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsUnVsZUNoYW5nZSk7CisgICAgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUdyYWRpZW50Q2hhbmdlKTsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgZmlsbEdyYWRpZW50U3BhY2VUcmFu
c2Zvcm0pCkBAIC02NDcsNjQgKzQ2NiwzOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Rmls
bEdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiBncmFkaWVudCwgY29uc3QgQWZmaW5lVHJhbgogICAg
IG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gV1RGTW92ZShncmFkaWVudCk7CiAgICAgbV9zdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSA9IGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtOwog
ICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBudWxscHRyOwotICAgIGlmIChtX2ltcGwpCi0gICAg
ICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxHcmFkaWVudENoYW5nZSk7IC8vIEZJWE1FOiBhbHNvIGZpbGwgcGF0dGVybj8KKyAgICB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbEdyYWRpZW50Q2hhbmdl
KTsKKyAgICAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCkKIHsKLSAgICBpZiAobV9p
bXBsKQotICAgICAgICBtX2ltcGwtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7Ci0g
ICAgZWxzZQotICAgICAgICBiZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
Ci0gICAgKyttX3RyYW5zcGFyZW5jeUNvdW50OworICAgICsrbV90cmFuc3BhcmVuY3lMYXllckNv
dW50OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQog
ewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBlbHNlCi0gICAgICAgIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAg
ICBBU1NFUlQobV90cmFuc3BhcmVuY3lDb3VudCA+IDApOwotICAgIC0tbV90cmFuc3BhcmVuY3lD
b3VudDsKKyAgICBBU1NFUlQobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCk7CisgICAgLS1t
X3RyYW5zcGFyZW5jeUxheWVyQ291bnQ7CiB9CiAKIEZsb2F0U2l6ZSBHcmFwaGljc0NvbnRleHQ6
OmRyYXdUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4g
dG8pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0
U2l6ZSgpOwotCiAgICAgLy8gRGlzcGxheSBsaXN0IHJlY29yZGluZyBmb3IgdGV4dCBjb250ZW50
IGlzIGRvbmUgYXQgZ2x5cGhzIGxldmVsLiBTZWUgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhz
LgogICAgIHJldHVybiBmb250LmRyYXdUZXh0KCp0aGlzLCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNl
KiBhZHZhbmNlcywgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
Rm9udFNtb290aGluZ01vZGUgZm9udFNtb290aGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmRyYXdHbHlwaHMoZm9udCwgZ2x5cGhzLCBhZHZhbmNlcywgbnVtR2x5cGhzLCBw
b2ludCwgZm9udFNtb290aGluZ01vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
Rm9udENhc2NhZGU6OmRyYXdHbHlwaHMoKnRoaXMsIGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51
bUdseXBocywgcG9pbnQsIGZvbnRTbW9vdGhpbmdNb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCB1bnNpZ25lZCBmcm9tLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8pCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgZm9udC5kcmF3RW1waGFz
aXNNYXJrcygqdGhpcywgcnVuLCBtYXJrLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBGb250Q2FzY2FkZTo6Q3Vz
dG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBCaWRpUmVzb2x2
ZXI8VGV4dFJ1bkl0ZXJhdG9yLCBCaWRpQ2hhcmFjdGVyUnVuPiBiaWRpUmVzb2x2ZXI7CiAgICAg
YmlkaVJlc29sdmVyLnNldFN0YXR1cyhCaWRpU3RhdHVzKHJ1bi5kaXJlY3Rpb24oKSwgcnVuLmRp
cmVjdGlvbmFsT3ZlcnJpZGUoKSkpOwogICAgIGJpZGlSZXNvbHZlci5zZXRQb3NpdGlvbklnbm9y
aW5nTmVzdGVkSXNvbGF0ZXMoVGV4dFJ1bkl0ZXJhdG9yKCZydW4sIDApKTsKQEAgLTczNCwxOSAr
NTI4LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2Fz
Y2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgIGJpZGlSdW5zLmNsZWFyKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGlt
YWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd05hdGl2ZUltYWdlKGlt
YWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9ybUltYWdlKGltYWdlLnBsYXRmb3JtSW1hZ2Uo
KSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KIEltYWdlRHJh
d1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgaW1hZ2VQ
YWludGluZ09wdGlvbnMpCiB7CiAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgRmxvYXRSZWN0
KGRlc3RpbmF0aW9uLCBpbWFnZS5zaXplKCkpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFn
ZS5zaXplKCkpLCBpbWFnZVBhaW50aW5nT3B0aW9ucyk7CkBAIC03NjAsMTggKzU0MSwxMiBAQCBJ
bWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbgogCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdl
RHJhd1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRl
cnBvbGF0aW9uUXVhbGl0eSgpKTsKICAgICByZXR1cm4gaW1hZ2UuZHJhdygqdGhpcywgZGVzdGlu
YXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbiwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVT
aXplLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
biBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0
eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXdUaWxlZCgq
dGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgdGlsZVNpemUsIHNwYWNpbmcsIG9wdGlvbnMpOwog
fQpAQCAtNzc5LDkgKzU1NCw2IEBAIEltYWdlRHJhd1Jlc3VsdCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUaWxlZEltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkCiBJbWFnZURyYXdS
ZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBG
bG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwKICAgICBJbWFnZTo6VGlsZVJ1bGUgaFJ1bGUsIElt
YWdlOjpUaWxlUnVsZSB2UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlRHJh
d1Jlc3VsdDo6RGlkTm90aGluZzsKLQogICAgIGlmIChoUnVsZSA9PSBJbWFnZTo6U3RyZXRjaFRp
bGUgJiYgdlJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlKSB7CiAgICAgICAgIC8vIEp1c3QgZG8g
YSBzY2FsZS4KICAgICAgICAgcmV0dXJuIGRyYXdJbWFnZShpbWFnZSwgZGVzdGluYXRpb24sIHNv
dXJjZSwgb3B0aW9ucyk7CkBAIC04MDMsMTQgKzU3NSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCAmJiBt
X2ltcGwtPmNhbkRyYXdJbWFnZUJ1ZmZlcihpbWFnZSkpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3
SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOwogICAgIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBzb3VyY2Us
IG9wdGlvbnMpOwogfQpAQCAtODMzLDM2ICs1OTcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+IGltYWdlLCBjb25z
dAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFpbWFnZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdJbWFnZUJ1ZmZlcigq
aW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9wdGlvbnMpOworICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7CiAgICAgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoV1RGTW92
ZShpbWFnZSksICp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXR0ZXJuKGlt
YWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZHJh
d1BsYXRmb3JtUGF0dGVybihpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0
KTsKICAgICBjbGlwUGF0aChwYXRoKTsKQEAgLTg3MCw5ICs2MTIsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QpCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXJlY3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgY2xpcE91dChy
ZWN0LnJlY3QoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTg4NSwxNCArNjI0LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0KQogCiBHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0
aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFu
ZHNSZXN1bHQ6OlN1Y2Nlc3M7Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGRlc3RpbmF0aW9uLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGRy
YXdpbmdGdW5jdGlvbikpOwotICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVz
dWx0OjpTdWNjZXNzOwotICAgIH0KLQogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihkZXN0aW5hdGlvbi5zaXplKCksIGNvbG9yU3BhY2Us
ICp0aGlzKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0OjpGYWlsZWRUb0NyZWF0ZUltYWdlQnVmZmVyOwpAQCAtOTA0LDYx
ICs2MzUsMjIgQEAgR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWEKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW5hdGlvblJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNs
aXBUb0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0aW5hdGlvblJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgaW1hZ2VCdWZmZXIuY2xpcFRvTWFzaygqdGhpcywgZGVzdGlu
YXRpb25SZWN0KTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpICYmICFVU0Uo
Q0FJUk8pCiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIEludFJlY3QoKTsKIH0KLSNlbmRp
ZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5n
TW9kZUZsYWdzIG1vZGUpCi17Ci0gICAgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBtb2RlOwot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShtb2RlKTsKLX0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdy
YWRpZW50KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBncmFk
aWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBncmFkaWVudC5maWxsKCp0aGlz
LCByZWN0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxl
bmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IsIG9wLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAg
ICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlv
bigpOwogICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKICAgICBmaWxs
UmVjdChyZWN0LCBjb2xvcik7CkBAIC05NjcsMjggKzY1OSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Is
IENvbXBvcwogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQmxlbmRNb2RlIGJsZW5k
TW9kZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJvdW5kZWRSZWN0KHJlY3Qs
IGNvbG9yLCBibGVuZE1vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgaWYgKHJl
Y3QuaXNSb3VuZGVkKCkpIHsKICAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwotICAgICAgICBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVj
dChyZWN0LCBjb2xvcik7CisgICAgICAgIGZpbGxSb3VuZGVkUmVjdEltcGwocmVjdCwgY29sb3Ip
OwogICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oY29tcG9zaXRlT3BlcmF0aW9uKCkpOwog
ICAgIH0gZWxzZQogICAgICAgICBmaWxsUmVjdChyZWN0LnJlY3QoKSwgY29sb3IsIGNvbXBvc2l0
ZU9wZXJhdGlvbigpLCBibGVuZE1vZGUpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJF
Q1QyRCkgJiYgIVVTRShDQUlSTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhS
b3VuZGVkSG9sZShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZs
b2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIFBhdGgg
cGF0aDsKICAgICBwYXRoLmFkZFJlY3QocmVjdCk7CiAKQEAgLTEwMDgsNzAgKzY4OCwxMyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgRmxvYXRSbwogICAgIHNldEZpbGxSdWxlKG9sZEZpbGxSdWxlKTsKICAg
ICBzZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9zdGF0ZS5hbHBoYSA9IGFs
cGhhOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIHNldFBsYXRmb3JtQWxwaGEoYWxwaGEpOwotfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBtX3N0YXRlLmNvbXBvc2l0
ZU9wZXJhdG9yID0gY29tcG9zaXRlT3BlcmF0aW9uOwogICAgIG1fc3RhdGUuYmxlbmRNb2RlID0g
YmxlbmRNb2RlOwotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0
ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihjb21wb3NpdGVPcGVyYXRpb24sIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKQotewot
ICAgIG1fc3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpEcmF3THVtaW5hbmNlTWFza0NoYW5nZSk7Ci19Ci0KLSNpZiBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZURhcmtBcHBl
YXJhbmNlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCi17Ci0gICAgbV9zdGF0ZS51c2VEYXJrQXBw
ZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJhbmNlOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1f
aW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtB
cHBlYXJhbmNlQ2hhbmdlKTsKLX0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShESVJF
Q1QyRCkKLS8vIEltcGxlbWVudCB0aGlzIGlmIHlvdSB3YW50IHRvIGdvIHB1c2ggdGhlIGRyYXdp
bmcgbW9kZSBpbnRvIHlvdXIgbmF0aXZlIGNvbnRleHQgaW1tZWRpYXRlbHkuCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxh
Z3MpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0FJUk8pICYmICFVU0UoRElSRUNUMkQpCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSkK
LXsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9z
aXRlT3BlcmF0aW9uQ2hhbmdlKTsKIH0KLSNlbmRpZgotCi0jaWYgIVVTRShDRykgJiYgIVVTRShE
SVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZv
bnRzKGJvb2wpCi17Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
ICYmICFVU0UoQ0FJUk8pCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlIHBlblN0eWxlKQog
ewpAQCAtMTEwMiwyNCArNzI1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkanVzdExpbmVU
b1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2ludCYgcDIKICAgICB9CiB9
CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkKLXsKLX0KLSNlbmRpZgotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VT
Y2FsZUZhY3RvcikKLXsKLSAgICBzY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VT
Y2FsZUZhY3Rvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0b3IpOwotfQotICAgIAogRmxvYXRTaXpl
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGVGYWN0b3IoKSBjb25zdAogewogICAgIEFmZmluZVRyYW5z
Zm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKQEAgLTExMzMsMjQgKzczOCwxMCBAQCBGbG9hdFNpemUgR3JhcGhpY3ND
b250ZXh0OjpzY2FsZUZhY3RvckZvckRyYXdpbmcoY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29ucwogICAgIHJldHVybiB0cmFuc2Zvcm1lZERlc3RSZWN0LnNpemUoKSAvIHNyY1JlY3Quc2l6
ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxs
RWxsaXBzZShlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3Jt
RmlsbEVsbGlwc2UoZWxsaXBzZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5zdHJva2VFbGxpcHNlKGVsbGlwc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGVsbGlwc2UpOworICAgIGZpbGxQYXRoKHBhdGgp
OworICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
RWxsaXBzZUFzUGF0aChjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCkBAIC0xMTY3LDIzICs3NTgs
MTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQogICAgIHN0cm9rZVBhdGgocGF0aCk7CiB9CiAKLSNpZiAhVVNFKENH
KSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2Up
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRl
eHQoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVy
bGluZXMsIFN0cm9rZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7Cisg
ICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hB
cnJheSB7IDAsIHJlY3Qud2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3R5
bGUpOwogfQotI2VuZGlmCiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1dGVVbmRl
cmxpbmVCb3VuZHNGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZykK
IHsKQEAgLTEyMTgsMjAgKzc5Niw2IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvCiAgICAgcmV0
dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRoKCksIHRoaWNrbmVzcykp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNz
Q29udGV4dFN0YXRlJiBzdGF0ZSkKLXsKLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFk
b3dPZmZzZXQsIHN0YXRlLnNoYWRvd0JsdXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICBzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5zdHJva2VUaGlja25lc3MpOwotICAgIHNldFBs
YXRmb3JtVGV4dERyYXdpbmdNb2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSk7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2VDb2xvcihzdGF0ZS5zdHJva2VDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1GaWxs
Q29sb3Ioc3RhdGUuZmlsbENvbG9yKTsKLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0YXRl
LnN0cm9rZVN0eWxlKTsKLSAgICBzZXRQbGF0Zm9ybUFscGhhKHN0YXRlLmFscGhhKTsKLSAgICBz
ZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3Rh
dGUuYmxlbmRNb2RlKTsKLSAgICBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwotICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc3RhdGUuc2hv
dWxkU21vb3RoRm9udHMpOwotfQotCiBmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVD
b3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKSBjb25zdAogewogICAg
IGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOwpAQCAtMTI4MywzNiArODQ3LDE1
IEBAIFZlY3RvcjxGbG9hdFBvaW50PiBHcmFwaGljc0NvbnRleHQ6OmNlbnRlckxpbmVBbmRDdXRP
ZmZDb3JuZXJzKGJvb2wgaXNWZXJ0aWNhbExpCiAgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIg
fTsKIH0KIAotI2lmICFVU0UoQ0cpCi0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c0lu
dGVybmFsTGlua3MoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmLCBjb25zdCBG
bG9hdFJlY3QmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25B
dFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKQotewotfQotCi0jZW5kaWYK
LQogI2lmIEVOQUJMRShWSURFTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsICYmIG1faW1wbC0+Y2FuUGFpbnRGcmFtZUZvck1lZGlhKHBsYXllcikpIHsKLSAg
ICAgICAgbV9pbXBsLT5wYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBwbGF5ZXIucGxheWVyUHJpdmF0ZSgpLT5wYWlu
dEN1cnJlbnRGcmFtZUluQ29udGV4dCgqdGhpcywgZGVzdGluYXRpb24pOwogfQogI2VuZGlmCiAK
K3ZvaWQgTnVsbEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0
cjxJbWFnZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikKK3sKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmOTEwYjg2ODZkMTlm
OTcwNWMwNDM3MjE4NTA2ZmFlOTk1ZTI3MzUwLi5iNzMxNzM3NzE4MDQxYjlkODcyNTM4MjRjMDcy
YmZkMTcyZTNlNTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNp
bmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CkBAIC04
Niw3ICs4Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
IGNsYXNzIEZsb2F0Um91bmRlZFJlY3Q7CiBjbGFzcyBHcmFkaWVudDsKLWNsYXNzIEdyYXBoaWNz
Q29udGV4dEltcGw7CiBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiBjbGFz
cyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEludFJlY3Q7CkBAIC0xMTAsNiArMTEwLDEzIEBAIGVudW0g
Y2xhc3MgVGV4dERyYXdpbmdNb2RlIDogdWludDhfdCB7CiB9OwogdXNpbmcgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgPSBPcHRpb25TZXQ8VGV4dERyYXdpbmdNb2RlPjsKIAorLy8gTGVnYWN5IHNoYWRv
dyBibHVyIHJhZGl1cyBpcyB1c2VkIGZvciBjYW52YXMsIGFuZCAtd2Via2l0LWJveC1zaGFkb3cu
CisvLyBJdCBoYXMgZGlmZmVyZW50IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KK2VudW0gY2xh
c3MgU2hhZG93UmFkaXVzTW9kZSA6IGJvb2wgeworICAgIERlZmF1bHQsCisgICAgTGVnYWN5Cit9
OworCiBlbnVtIFN0cm9rZVN0eWxlIHsKICAgICBOb1N0cm9rZSwKICAgICBTb2xpZFN0cm9rZSwK
QEAgLTIxOSwxNCArMjI2LDEyIEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IgeyBDb21wb3NpdGVPcGVyYXRvcjo6
U291cmNlT3ZlciB9OwogICAgIEJsZW5kTW9kZSBibGVuZE1vZGUgeyBCbGVuZE1vZGU6Ok5vcm1h
bCB9OwogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkg
eyBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdCB9OworICAgIFNoYWRvd1JhZGl1c01vZGUg
c2hhZG93UmFkaXVzTW9kZSB7IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQgfTsKIAogICAgIGJv
b2wgc2hvdWxkQW50aWFsaWFzIDogMTsKICAgICBib29sIHNob3VsZFNtb290aEZvbnRzIDogMTsK
ICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA6IDE7CiAgICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyA6IDE7Ci0jaWYgVVNFKENHKQotICAgIGJvb2wgc2hhZG93c1Vz
ZUxlZ2FjeVJhZGl1cyA6IDE7Ci0jZW5kaWYKICAgICBib29sIGRyYXdMdW1pbmFuY2VNYXNrIDog
MTsKICNpZiBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGJvb2wgdXNlRGFya0FwcGVh
cmFuY2UgOiAxOwpAQCAtMjU0LDI3ICsyNTksMTUgQEAgc3RydWN0IEdyYXBoaWNzQ29udGV4dFN0
YXRlQ2hhbmdlIHsKIAogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlJik7CiAKLQogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFw
aGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqKTsKLSAgICAKLSAgICB1c2luZyBH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSA9IFdURjo6RnVuY3Rpb248c3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dEltcGw+KEdyYXBoaWNzQ29udGV4dCYpPjsKLSAgICBXRUJDT1JFX0VY
UE9SVCBHcmFwaGljc0NvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkmKTsK
K3B1YmxpYzogICAKIAotICAgIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCB+R3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgCi0gICAgZW51bSBjbGFzcyBQYWlu
dEludmFsaWRhdGlvblJlYXNvbnMgOiB1aW50OF90IHsKLSAgICAgICAgTm9uZSwKLSAgICAgICAg
SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzLAotICAgICAgICBJbnZhbGlkYXRpbmdJbWFnZXNXaXRo
QXN5bmNEZWNvZGVzLAotICAgICAgICBEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQKLSAgICB9Owot
ICAgIEdyYXBoaWNzQ29udGV4dChQYWludEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIFdFQkNP
UkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCgpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHQoKTsKIAogI2lmIFVTRShESVJFQ1QyRCkKKyAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgbW92ZSB0byBHcmFwaGljc0NvbnRleHREaXJlY3QyRAogICAg
IGVudW0gY2xhc3MgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgOiB1aW50OF90IHsKICAgICAg
ICAgQ1BVTWVtb3J5LAogICAgICAgICBHUFVNZW1vcnkKQEAgLTI4MiwyNTAgKzI3NSwyNzAgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBo
aWNzQ29udGV4dCosIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlKTsKICNlbmRpZgogCi0gICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0KCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1D
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgYm9vbCBwYWludGluZ0Rp
c2FibGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YSAmJiAhbV9pbXBsOyB9Ci0gICAgYm9vbCBw
ZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxp
ZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmU7IH0KLSAgICBi
b29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZh
bGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5n
Q29udHJvbFRpbnRzOyB9Ci0gICAgYm9vbCBpbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNv
ZGVzKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJ
bnZhbGlkYXRpb25SZWFzb25zOjpJbnZhbGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9
Ci0gICAgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBjb25zdCB7IHJldHVybiBtX3Bh
aW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVj
dGluZ0NvbnRlbnRmdWxQYWludDsgfQorICAgIHZpcnR1YWwgYm9vbCBwYWludGluZ0Rpc2FibGVk
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGVyZm9ybWluZ1Bh
aW50SW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaW52YWxpZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGRldGVjdGluZ0NvbnRlbnRmdWxQ
YWludCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CisgICAgLy8gQ29udGV4dCBTdGF0ZQorCisgICAg
dm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQgdGhpY2tuZXNzKSB7IG1fc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzID0gdGhpY2tuZXNzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKTsgfQogICAgIGZsb2F0IHN0cm9rZVRoaWNr
bmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzOyB9CiAKLSAgICB2
b2lkIHNldFN0cm9rZVN0eWxlKFN0cm9rZVN0eWxlKTsKKyAgICB2b2lkIHNldFN0cm9rZVN0eWxl
KFN0cm9rZVN0eWxlIHN0eWxlKSB7IG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHlsZTsgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsg
fQogICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5z
dHJva2VTdHlsZTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VDb2xvcihj
b25zdCBDb2xvciYpOwogICAgIGNvbnN0IENvbG9yJiBzdHJva2VDb2xvcigpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUuc3Ryb2tlQ29sb3I7IH0KIAotICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihS
ZWY8UGF0dGVybj4mJik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VQYXR0ZXJu
KFJlZjxQYXR0ZXJuPiYmKTsKICAgICBQYXR0ZXJuKiBzdHJva2VQYXR0ZXJuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFN0cm9r
ZUdyYWRpZW50KFJlZjxHcmFkaWVudD4mJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiA9IHsgfSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJva2VHcmFkaWVudChSZWY8R3JhZGllbnQ+
JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50KiBzdHJva2VH
cmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCk7IH0K
IAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOworICAgIHZvaWQgc2V0RmlsbFJ1bGUo
V2luZFJ1bGUgZmlsbFJ1bGUpIHsgbV9zdGF0ZS5maWxsUnVsZSA9IGZpbGxSdWxlOyB1cGRhdGVT
dGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOyB9CiAg
ICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxSdWxlOyB9
CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwog
ICAgIGNvbnN0IENvbG9yJiBmaWxsQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxD
b2xvcjsgfQogCi0gICAgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsUGF0dGVybihSZWY8UGF0dGVybj4mJik7CiAgICAg
UGF0dGVybiogZmlsbFBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxQYXR0ZXJu
LmdldCgpOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpbGxHcmFkaWVudChSZWY8
R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOwogICAgIEdyYWRpZW50
KiBmaWxsR3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmZpbGxHcmFkaWVudC5nZXQo
KTsgfQogCi0gICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sKTsKKyAgICB2
b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMpIHsgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93
c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0K
IAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wpOworICAg
IHZvaWQgc2V0U2hvdWxkQW50aWFsaWFzKGJvb2wgc2hvdWxkQW50aWFsaWFzKSB7IG1fc3RhdGUu
c2hvdWxkQW50aWFsaWFzID0gc2hvdWxkQW50aWFsaWFzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsgfQogICAgIGJvb2wg
c2hvdWxkQW50aWFsaWFzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRBbnRpYWxpYXM7
IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCk7
CisgICAgdm9pZCBzZXRTaG91bGRTbW9vdGhGb250cyhib29sIHNob3VsZFNtb290aEZvbnRzKSB7
IG1fc3RhdGUuc2hvdWxkU21vb3RoRm9udHMgPSBzaG91bGRTbW9vdGhGb250czsgdXBkYXRlU3Rh
dGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hhbmdl
KTsgfQogICAgIGJvb2wgc2hvdWxkU21vb3RoRm9udHMoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzOyB9CiAKICAgICAvLyBOb3JtYWxseSBDRyBlbmFibGVzIHN1YnBp
eGVsLXF1YW50aXphdGlvbiBiZWNhdXNlIGl0IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZiBh
bGlnbmluZyBnbHlwaHMuCiAgICAgLy8gSW4gc29tZSBjYXNlcyB3ZSBoYXZlIHRvIGRpc2FibGUg
dG8gdG8gZW5zdXJlIGEgaGlnaC1xdWFsaXR5IG91dHB1dCBvZiB0aGUgZ2x5cGhzLgotICAgIHZv
aWQgc2V0U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wpOworICAgIHZvaWQgc2V0U2hv
dWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzKGJvb2wgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KSB7IG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzID0gc2hvdWxkU3VicGl4ZWxR
dWFudGl6ZUZvbnRzOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRzQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hvdWxkU3Vi
cGl4ZWxRdWFudGl6ZUZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRTdWJwaXhl
bFF1YW50aXplRm9udHM7IH0KIAotICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkgeyBtX3N0YXRlLmltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkgPSBxdWFsaXR5OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSk7IH0KKyAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5OyB9CiAKLSNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKLSAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAg
IHZvaWQgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYp
OworICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxwaGEpIHsgbV9zdGF0ZS5hbHBoYSA9IGFscGhh
OyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2Up
OyB9CisgICAgZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCk7Ci0gICAg
Ym9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9IEJsZW5k
TW9kZTo6Tm9ybWFsKTsKKyAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9CisgICAgQmxlbmRN
b2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYmxlbmRNb2Rl
OyB9CisKKyAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wgZHJhd0x1bWluYW5jZU1h
c2spIHsgbV9zdGF0ZS5kcmF3THVtaW5hbmNlTWFzayA9IGRyYXdMdW1pbmFuY2VNYXNrOyB1cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tD
aGFuZ2UpOyB9CisgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuZHJhd0x1bWluYW5jZU1hc2s7IH0KKworICAgIHZvaWQgc2V0VGV4dERyYXdpbmdNb2Rl
KFRleHREcmF3aW5nTW9kZUZsYWdzIG1vZGUpIHsgbV9zdGF0ZS50ZXh0RHJhd2luZ01vZGUgPSBt
b2RlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdp
bmdNb2RlQ2hhbmdlKTsgfQorICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHREcmF3aW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlOyB9CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNv
bnN0IENvbG9yJiwgU2hhZG93UmFkaXVzTW9kZSA9IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpOworICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBj
b25zdDsKKworICAgIGJvb2wgaGFzVmlzaWJsZVNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUuc2hhZG93Q29sb3IuaXNWaXNpYmxlKCk7IH0KKyAgICBib29sIGhhc1NoYWRvdygpIGNvbnN0
IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiAobV9zdGF0ZS5zaGFkb3dCbHVyIHx8IG1f
c3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCkgfHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0
KCkpOyB9CisgICAgYm9vbCBoYXNCbHVycmVkU2hhZG93KCkgY29uc3QgeyByZXR1cm4gaGFzVmlz
aWJsZVNoYWRvdygpICYmIG1fc3RhdGUuc2hhZG93Qmx1cjsgfQorCisjaWYgSEFWRShPU19EQVJL
X01PREVfU1VQUE9SVCkKKyAgICB2b2lkIHNldFVzZURhcmtBcHBlYXJhbmNlKGJvb2wgdXNlRGFy
a0FwcGVhcmFuY2UpIHsgbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZSA9IHVzZURhcmtBcHBlYXJh
bmNlOyB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6VXNlRGFya0Fw
cGVhcmFuY2VDaGFuZ2UpOyB9CisgICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2U7IH0KICNlbmRpZgotICAgIGJvb2wgaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3Rv
cmUoKTsKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cykgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNhdmUoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVzdG9yZSgpOwogICAgIAogICAgIHVuc2lnbmVk
IHN0YWNrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2suc2l6ZSgpOyB9CiAKKyNpZiBVU0Uo
Q0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZXNlIHJlYWxseSBi
ZSBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IG1ldGhvZHM/CisgICAgdmlydHVhbCB2b2lkIGFwcGx5
U3Ryb2tlUGF0dGVybigpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlGaWxsUGF0dGVybigp
ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gd2UgbWFrZSB0aGlzIGEgd2h5IGluc3RlYWQgb2Yg
YSB3aGF0LCBhbmQgdGhlbiBoYXZlIGl0IGV4aXN0IGNyb3NzLXBsYXRmb3JtPworICAgIHZpcnR1
YWwgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0ID0gMDsKKworICAgIC8vIEZJWE1FOiBDYW4gdGhpcyBi
ZSBhIEdyYXBoaWNzQ29udGV4dENHIGNvbnN0cnVjdG9yIHBhcmFtZXRlcj8gT3IganVzdCBiZSBy
ZWFkIG9mZiB0aGUgY29udGV4dD8KKyAgICB2aXJ0dWFsIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENv
bnRleHQoYm9vbCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
IH0KKworICAgIC8vIFBpeGVsIFNuYXBwaW5nCisKKyAgICBlbnVtIFJvdW5kaW5nTW9kZSB7Cisg
ICAgICAgIFJvdW5kQWxsU2lkZXMsCisgICAgICAgIFJvdW5kT3JpZ2luQW5kRGltZW5zaW9ucwor
ICAgIH07CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSA9IDA7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxCb3VuZGFyaWVzKEZsb2F0UG9p
bnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lkdGgsIFN0cm9rZVN0eWxlKTsK
KworICAgIC8vIFNoYXBlcworCiAgICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90
aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAvLyBGSVhNRTogLi4uZXhjZXB0IGRyYXdSZWN0
KCksIHdoaWNoIGZpbGxzIHByb3Blcmx5IGJ1dCBhbHdheXMgc3Ryb2tlcwogICAgIC8vIHVzaW5n
IGEgMS1waXhlbCBzdHJva2UgaW5zZXQgZnJvbSB0aGUgcmVjdCBib3JkZXJzIChvZiB0aGUgY29y
cmVjdAogICAgIC8vIHN0cm9rZSBjb2xvcikuCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKTsKLSAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcyA9IDEpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IpOworCisgICAgdmlydHVhbCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBh
dGgmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpID0gMDsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpOwog
Ci0gICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGRyYXdS
YWlzZWRFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29sb3Is
IGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcik7CisgICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkgeyBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsg
fQorICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgeyBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0
cm9rZVBhdGgoY29uc3QgUGF0aCYpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmLCBHcmFkaWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7CisgICAgdmlydHVhbCB2b2lkIGZpbGxS
b3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgPSAw
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpO
b3JtYWwpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVk
SG9sZVJlY3QsIGNvbnN0IENvbG9yJik7CiAKLSAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpOwot
ICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKTsKLSAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0
b3IsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICB2b2lkIGZpbGxSb3VuZGVk
UmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBC
bGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNv
bnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgbGluZVdpZHRoKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUNhcChMaW5l
Q2FwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYs
IGZsb2F0IGRhc2hPZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZUpvaW4oTGlu
ZUpvaW4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgPSAwOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZs
b2F0IGxpbmVXaWR0aCk7CisgICAgLy8gSW1hZ2VzLCBQYXR0ZXJucywgYW5kIE1lZGlhCiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0
IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRT
aXplJiBzZWxmU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUlt
YWdlIH0pOwotICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmID0geyBJbWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwg
Y29uc3QgRmxvYXRQb2ludCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmll
bnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VE
cmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKIAotICAgIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAg
IEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRp
bGVTY2FsZUZhY3RvciwgSW1hZ2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJ
bWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBGbG9hdFBvaW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGls
ZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3VsdCBk
cmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0
IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTY2FsZUZhY3RvciwgSW1h
Z2U6OlRpbGVSdWxlLCBJbWFnZTo6VGlsZVJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFn
ZUJ1ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4s
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KTsKIAotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAw
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25RdWFsaXR5KTsKLSAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsaXAoY29uc3QgRmxv
YXRSZWN0Jik7Ci0gICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYpOworI2lmIEVOQUJMRShWSURFTykKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5h
dGlvbik7CisjZW5kaWYKIAotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5k
UnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYs
IGNvbnN0IEZsb2F0UmVjdCYpOworICAgIC8vIENsaXBwaW5nCiAKLSAgICBlbnVtIGNsYXNzIENs
aXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCA6IGJvb2wgeyBTdWNjZXNzLCBGYWlsZWRUb0NyZWF0
ZUltYWdlQnVmZmVyIH07Ci0gICAgQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKTsKLSAg
ICAKLSAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY2xp
cChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0Jik7CiAKLSAgICB2b2lkIHNl
dFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0gICAgVGV4dERyYXdpbmdN
b2RlRmxhZ3MgdGV4dERyYXdpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS50ZXh0RHJh
d2luZ01vZGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpID0gMDsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRS
dWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpID0gMDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKTsK
IAotI2lmIEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgdm9pZCBzZXRVc2VEYXJrQXBw
ZWFyYW5jZShib29sKTsKLSAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS51c2VEYXJrQXBwZWFyYW5jZTsgfQotI2VuZGlmCisgICAgZW51bSBjbGFzcyBD
bGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgOiBib29sIHsgU3VjY2VzcywgRmFpbGVkVG9DcmVh
dGVJbWFnZUJ1ZmZlciB9OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgQ2xpcFRvRHJhd2lu
Z0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdy
YXBoaWNzQ29udGV4dCYpPiYmKTsKIAotICAgIEZsb2F0U2l6ZSBkcmF3VGV4dChjb25zdCBGb250
Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJv
bSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVsbG9wdCk7Ci0gICAgdm9pZCBk
cmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5
cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jiwg
Rm9udFNtb290aGluZ01vZGUpOwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBX
VEY6Om51bGxvcHQpOwotICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6Q3VzdG9tRm9u
dE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnROb3RSZWFkeSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdDsK
IAotICAgIHZvaWQgYnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7Cisg
ICAgLy8gVGV4dAogCi0gICAgZW51bSBSb3VuZGluZ01vZGUgewotICAgICAgICBSb3VuZEFsbFNp
ZGVzLAotICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKLSAgICB9OwotICAgIEZsb2F0
UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIFJvdW5kaW5nTW9kZSA9
IFJvdW5kQWxsU2lkZXMpOwotCi0gICAgRmxvYXRSZWN0IGNvbXB1dGVVbmRlcmxpbmVCb3VuZHNG
b3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSk7Ci0g
ICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25l
c3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxp
bmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOwotICAgIHZvaWQgZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBGbG9hdFNpemUgZHJhd1RleHQoY29u
c3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2ln
bmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25z
dCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2Fz
Y2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6
bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdCaWRpVGV4dChj
b25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9u
dENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBh
aW50SWZGb250Tm90UmVhZHkpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNv
bnN0IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUNvdW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3Bh
cmVuY3lMYXllcnMoKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCBjb21wdXRlVW5k
ZXJsaW5lQm91bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0
UmVjdCYsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5
bGUgPSBTb2xpZFN0cm9rZSk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMgPSBmYWxzZSwgU3Ryb2tlU3R5bGUgPSBT
b2xpZFN0cm9rZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSA9IDA7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBi
bHVyLCBjb25zdCBDb2xvciYpOwotICAgIC8vIExlZ2FjeSBzaGFkb3cgYmx1ciByYWRpdXMgaXMg
dXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgotICAgIC8vIEl0IGhhcyBk
aWZmZXJlbnQgdHJlYXRtZW50IG9mIHJhZGlpID4gOHB4LgotICAgIHZvaWQgc2V0TGVnYWN5U2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7CisgICAgLy8g
VHJhbnNwYXJlbmN5IExheWVycwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclNoYWRv
dygpOwotICAgIGJvb2wgZ2V0U2hhZG93KEZsb2F0U2l6ZSYsIGZsb2F0JiwgQ29sb3ImKSBjb25z
dDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGlzSW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0
IHsgcmV0dXJuIChtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQgPiAwKSAmJiBzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycygpOyB9CiAKLSAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlLnNoYWRvd0NvbG9yLmlzVmlzaWJsZSgpOyB9Ci0gICAgYm9vbCBoYXNT
aGFkb3coKSBjb25zdCB7IHJldHVybiBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hh
ZG93Qmx1ciB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93
T2Zmc2V0LmhlaWdodCgpKTsgfQotICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsg
cmV0dXJuIGhhc1Zpc2libGVTaGFkb3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKyAgICAv
LyBGb2N1cyBSaW5ncwogCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKTsKLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgLy8gRklYTUU6IENh
biB3ZSBoaWRlIHRoZXNlIGluIHRoZSBDRyBpbXBsZW1lbnRhdGlvbj8gT3IgZWxzZXdoZXJlPwog
I2lmIFBMQVRGT1JNKE1BQykKLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRv
dWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29sb3ImKTsKLSAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9m
ZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJik7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVk
c1JlZHJhdywgY29uc3QgQ29sb3ImKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVl
ZHNSZWRyYXcsIGNvbnN0IENvbG9yJikgPSAwOwogI2VuZGlmCiAKLSAgICB2b2lkIHNldExpbmVD
YXAoTGluZUNhcCk7Ci0gICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9h
dCBkYXNoT2Zmc2V0KTsKLSAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKTsKLSAgICB2b2lk
IHNldE1pdGVyTGltaXQoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCk7Ci0gICAg
ZmxvYXQgYWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFscGhhOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuY29tcG9zaXRlT3BlcmF0
b3I7IH0KLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5ibGVuZE1vZGU7IH0KLQotICAgIHZvaWQgc2V0RHJhd0x1bWluYW5jZU1hc2soYm9v
bCk7Ci0gICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
ZHJhd0x1bWluYW5jZU1hc2s7IH0KLQotICAgIC8vIFRoaXMgY2xpcCBmdW5jdGlvbiBpcyB1c2Vk
IG9ubHkgYnkgPGNhbnZhcz4gY29kZS4gSXQgYWxsb3dzCi0gICAgLy8gaW1wbGVtZW50YXRpb25z
IHRvIGhhbmRsZSBjbGlwcGluZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNpbmNlCi0gICAg
Ly8gdGhlIGRpc2NpcGxpbmUgaXMgZGlmZmVyZW50LgotICAgIHZvaWQgY2FudmFzQ2xpcChjb25z
dCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCk7Ci0gICAgdm9pZCBjbGlwT3V0
KGNvbnN0IFBhdGgmKTsKKyAgICAvLyBUcmFuc2Zvcm1zCiAKLSAgICB2b2lkIHNjYWxlKGZsb2F0
IHMpCi0gICAgewotICAgICAgICBzY2FsZSh7IHMsIHMgfSk7Ci0gICAgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpOworICAgIHZvaWQgc2NhbGUoZmxvYXQgcykgeyBzY2FsZSh7IHMs
IHMgfSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpID0gMDsKICAgICB2
b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpIHsgdHJhbnNsYXRlKHNpemUud2lk
dGgoKSwgc2l6ZS5oZWlnaHQoKSk7IH0KICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFBv
aW50JiBwKSB7IHRyYW5zbGF0ZShwLngoKSwgcC55KCkpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0KLSAgICB2b2lkIHNldFVSTEZvclJl
Y3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShmbG9hdCB4LCBmbG9hdCB5KSA9IDA7CiAKLSAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9y
UmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgYWRk
RGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYp
OwotCi0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9p
ZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdmlydHVhbCB2b2lkIGNvbmNh
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7CiAKICAgICBlbnVtIEluY2x1ZGVEZXZpY2VT
Y2FsZSB7IERlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUsIFBvc3NpYmx5SW5jbHVkZURldmlj
ZVNjYWxlIH07Ci0gICAgV0VCQ09SRV9FWFBPUlQgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNs
dWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUp
IGNvbnN0OworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNl
U2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QgPSAwOwogCiAgICAgLy8g
VGhpcyBmdW5jdGlvbiBhcHBsaWVzIHRoZSBkZXZpY2Ugc2NhbGUgZmFjdG9yIHRvIHRoZSBjb250
ZXh0LCBtYWtpbmcgdGhlIGNvbnRleHQgY2FwYWJsZSBvZgogICAgIC8vIGFjdGluZyBhcyBhIGJh
c2UtbGV2ZWwgY29udGV4dCBmb3IgYSBIaURQSSBlbnZpcm9ubWVudC4KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwotICAgIHZvaWQgcGxhdGZv
cm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0
b3IoKSBjb25zdDsKLSAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZmFjdG9yKSB7IHNjYWxl
KGZhY3Rvcik7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3IoKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NhbGVGYWN0b3JGb3JEcmF3aW5n
KGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCkgY29u
c3Q7CiAKLSAgICB2b2lkIHNldENvbnRlbnRmdWxQYWludERldGVjdGVkKCkgeyBtX2NvbnRlbmZ1
bFBhaW50RGV0ZWN0ZWQgPSB0cnVlOyB9Ci0gICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVk
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW5mdWxQYWludERldGVjdGVkOyB9CisgICAgLy8gTGlu
a3MKIAotI2lmIEVOQUJMRShWSURFTykKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwot
I2VuZGlmCisgICAgdmlydHVhbCB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3Qg
RmxvYXRSZWN0JikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0
KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UmVjdCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBh
ZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYpIHsg
fQorCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICAvLyBDb250ZW50ZnVsIFBhaW50IERldGVjdGlvbgorCisgICAg
dm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW50ZnVsUGFpbnREZXRl
Y3RlZCA9IHRydWU7IH0KKyAgICBib29sIGNvbnRlbmZ1bFBhaW50RGV0ZWN0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkOyB9CiAKKyAgICAvLyBGSVhNRTogTm90
aGluZyBpbiB0aGlzIHNlY3Rpb24gYmVsb25ncyBoZXJlLCBhbmQgc2hvdWxkIGJlIG1vdmVkIGVs
c2V3aGVyZS4KICNpZiBPUyhXSU5ET1dTKQogICAgIEhEQyBnZXRXaW5kb3dzQ29udGV4dChjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCk7IC8vIFRoZSBwYXNzZWQgaW4gcmVj
dCBpcyB1c2VkIHRvIGNyZWF0ZSBhIGJpdG1hcCBmb3IgY29tcG9zaXRpbmcgaW5zaWRlIHRyYW5z
cGFyZW5jeSBsYXllcnMuCiAgICAgdm9pZCByZWxlYXNlV2luZG93c0NvbnRleHQoSERDLCBjb25z
dCBJbnRSZWN0JiwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCk7IC8vIFRoZSBwYXNzZWQgaW4gSERD
IHNob3VsZCBiZSB0aGUgb25lIGhhbmRlZCBiYWNrIGJ5IGdldFdpbmRvd3NDb250ZXh0LgogICAg
IEhEQyBoZGMoKSBjb25zdDsKLSNpZiBQTEFURk9STShXSU4pCi0gICAgR3JhcGhpY3NDb250ZXh0
KEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQuCiAK
KyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgbm90IGV4aXN0OyB3ZSBuZWVkIGEgZGlmZmVyZW50
IHBsYWNlIHRvCisgICAgLy8gcHV0IGNvZGUgc2hhcmVkIGJldHdlZW4gV2luZG93cyBDRyBhbmQg
V2luZG93cyBDYWlybyBiYWNrZW5kcy4KKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbnVs
bHB0cjsgfQorI2lmIFBMQVRGT1JNKFdJTikKICAgICAvLyBXaGVuIHNldCB0byB0cnVlLCBjaGls
ZCB3aW5kb3dzIHNob3VsZCBiZSByZW5kZXJlZCBpbnRvIHRoaXMgY29udGV4dAogICAgIC8vIHJh
dGhlciB0aGFuIGFsbG93aW5nIHRoZW0ganVzdCB0byByZW5kZXIgdG8gdGhlIHNjcmVlbi4gRGVm
YXVsdHMgdG8KICAgICAvLyBmYWxzZS4KQEAgLTU4NSw2MSArNTk4LDEzIEBAIHB1YmxpYzoKICNl
bmRpZiAvLyBQTEFURk9STShXSU4pCiAjZW5kaWYgLy8gT1MoV0lORE9XUykKIAotICAgIHN0YXRp
YyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQ
b2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7Ci0KLSAgICBib29sIHN1
cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0OwotCi0gICAgR3JhcGhpY3NDb250ZXh0SW1wbCog
aW1wbCgpIHsgcmV0dXJuIG1faW1wbC5nZXQoKTsgfQotCiBwcml2YXRlOgotICAgIHZvaWQgcGxh
dGZvcm1Jbml0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgdm9pZCBwbGF0Zm9ybURl
c3Ryb3koKTsKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICB2b2lkIHBsYXRmb3JtSW5pdChIREMs
IGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7Ci0jZW5kaWYKLQotI2lmIFVTRShESVJFQ1QyRCkKLSAg
ICB2b2lkIHBsYXRmb3JtSW5pdChIREMsIElEMkQxUmVuZGVyVGFyZ2V0KiosIFJFQ1QsIGJvb2wg
aGFzQWxwaGEgPSBmYWxzZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7Ci0jZW5kaWYKLQotICAgIHZv
aWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKLSAgICB2b2lkIHJlc3RvcmVQbGF0Zm9ybVN0YXRlKCk7
Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZs
YWdzKTsKLQotICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYpOwot
ICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSk7Ci0gICAgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3Jt
RmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkQW50
aWFsaWFzKGJvb2wpOwotICAgIHZvaWQgc2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29s
KTsKLSAgICB2b2lkIHNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhclBsYXRmb3Jt
U2hhZG93KCk7Ci0KLSAgICB2b2lkIHNldFBsYXRmb3JtQWxwaGEoZmxvYXQpOwotICAgIHZvaWQg
c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLQotICAgIHZvaWQgYmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpOwotICAgIHZvaWQgZW5kUGxhdGZvcm1UcmFuc3BhcmVu
Y3lMYXllcigpOwotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCk7
CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCitwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaWxsRWxsaXBzZUFzUGF0aChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIHN0cm9rZUVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
Jik7Ci0gICAgdm9pZCBwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0K
LSAgICB2b2lkIHBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
LCBjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0
Zm9ybUltYWdlUHRyJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKTsKLSAgICB2b2lkIGRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7Ci0KICAgICBGbG9hdFJl
Y3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9h
dFJlY3QmLCBib29sIHByaW50aW5nLCBDb2xvciYpOwogCiAgICAgZmxvYXQgZGFzaGVkTGluZUNv
cm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpIGNvbnN0OwpAQCAtNjQ3LDE1ICs2MTIsMTMg
QEAgcHJpdmF0ZToKICAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRlcm5B
bmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRoKSBjb25z
dDsKICAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9v
bCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBG
bG9hdFBvaW50IHBvaW50MikgY29uc3Q7CiAKLSAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0SW1wbD4gbV9pbXBsOwotCiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUgbV9zdGF0ZTsK
KworcHJpdmF0ZToKICAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0U3RhdGUsIDE+IG1fc3RhY2s7
CiAKLSAgICBjb25zdCBQYWludEludmFsaWRhdGlvblJlYXNvbnMgbV9wYWludEludmFsaWRhdGlv
blJlYXNvbnMgeyBQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUgfTsKLSAgICB1bnNpZ25l
ZCBtX3RyYW5zcGFyZW5jeUNvdW50IHsgMCB9OwotICAgIGJvb2wgbV9jb250ZW5mdWxQYWludERl
dGVjdGVkIHsgZmFsc2UgfTsKKyAgICB1bnNpZ25lZCBtX3RyYW5zcGFyZW5jeUxheWVyQ291bnQg
eyAwIH07CisgICAgYm9vbCBtX2NvbnRlbnRmdWxQYWludERldGVjdGVkIHsgZmFsc2UgfTsKIH07
CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgewpAQCAtNzQ0LDggKzcwNyw2IEBA
IHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9zdGFja1NpemU7CiB9OwogCi0KLQogY2xhc3MgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRl
eHQsIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5VG9Vc2UpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dEltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjE0YTBhODkyYjZlOTlm
OTlkYjgyM2NlYTM1MjFiNGM1ZmY1NWM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dEltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUdyYXBoaWNzQ29udGV4dEltcGw6OkdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotICAgIDogbV9ncmFwaGljc0NvbnRleHQoY29udGV4dCkKLXsKLX0KLQot
R3JhcGhpY3NDb250ZXh0SW1wbDo6fkdyYXBoaWNzQ29udGV4dEltcGwoKQotewotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI2MmZmYjQ1NDVhZTIzNTZmN2MxZmJmNzhjMDQ5NGIzY2FjY2UzYjEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGwgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdyYXBoaWNzQ29u
dGV4dEltcGwpOwotcHVibGljOgotICAgIEdyYXBoaWNzQ29udGV4dEltcGwoR3JhcGhpY3NDb250
ZXh0Jik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbCgpOwotCi0gICAgR3JhcGhp
Y3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzQ29u
dGV4dDsgfQotCi0gICAgdmlydHVhbCBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVy
JikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7IH0KLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGlj
c0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyU2hhZG93KCkgPSAwOwotCi0gICAgdmlydHVhbCB2
b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zmc2V0KSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldE1pdGVy
TGltaXQoZmxvYXQpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBHcmFkaWVudCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmls
bFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbEVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHN0cm9rZUVsbGlw
c2UoY29uc3QgRmxvYXRSZWN0JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JikgPSAwOwotCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4o
KSA9IDA7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQm
LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5z
aWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290
aGluZ01vZGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNv
dXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXpl
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lk
IGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQ
b2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9h
dFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVMaW5lcykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0
eWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0aCYpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ZvY3Vz
UmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHNhdmUoKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHJlc3RvcmUoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRl
KGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFu
Z2xlSW5SYWRpYW5zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYp
ID0gMDsKLSAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpJbmNsdWRlRGV2aWNlU2NhbGUpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRyYW5z
cGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2xpcChjb25zdCBGbG9h
dFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgPSAwOwotICAgIHZpcnR1
YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKSA9IDA7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZp
cnR1YWwgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhblBhaW50RnJhbWVGb3JN
ZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0ID0gMDsKLSNlbmRpZgotICAgIAotICAgIHZp
cnR1YWwgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSA9IDA7Ci0KLXByaXZhdGU6Ci0gICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBHcmFwaGljc0NvbnRleHQmIG1fZ3JhcGhpY3NDb250
ZXh0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCmluZGV4IDQ0MGY3MjUzNTgyY2M2NDkzMTVmMjQ3M2IzOTAz
MjJiMGE2NjIwODUuLjZhYjQzMjczMjZkYTA4MmQ4MTFlZTQxMjhmY2Q2NGFiMjU2OWU2OWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKQEAgLTE4OCw4ICsx
ODgsOSBAQCBJbWFnZURyYXdSZXN1bHQgSW1hZ2U6OmRyYXdUaWxlZChHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlYwogICAgIH0KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZS10ZXN0IHRoaXMgYW5kIHJlbW92
ZSB0aGlzIGlPUyBiZWhhdmlvciBkaWZmZXJlbmNlIGlmIHBvc3NpYmxlLgogICAgIC8vIFdoZW4g
dXNpbmcgYWNjZWxlcmF0ZWQgZHJhd2luZyBvbiBpT1MsIGl0J3MgZmFzdGVyIHRvIHN0cmV0Y2gg
YW4gaW1hZ2UgdGhhbiB0byB0aWxlIGl0LgotICAgIGlmIChjdHh0LmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpIHsKKyAgICBpZiAoY3R4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpIHsKICAgICAgICAgaWYgKHNpemUoKS53aWR0aCgpID09IDEgJiYgaW50ZXJz
ZWN0aW9uKG9uZVRpbGVSZWN0LCBkZXN0UmVjdCkuaGVpZ2h0KCkgPT0gZGVzdFJlY3QuaGVpZ2h0
KCkpIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlU3JjUmVjdDsKICAgICAgICAgICAg
IHZpc2libGVTcmNSZWN0LnNldFgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2UuaAppbmRleCA0ZDNmNDMwYzYxN2QxMDAxNmVmNTM4MGZkODlhOTRjYjBiYWVhNmMzLi4x
NzY0NzQ3ZDYxNDBjZjExNmM5YzY0MjZkZGM5NzFhYzJiZWI5ODA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKQEAgLTcxLDcgKzcxLDYgQEAgY2xhc3MgQWZmaW5l
VHJhbnNmb3JtOwogY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIEZsb2F0U2l6ZTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEltcGw7CiBjbGFzcyBTaGFyZWRC
dWZmZXI7CiBzdHJ1Y3QgTGVuZ3RoOwogCkBAIC04MCw3ICs3OSw2IEBAIGNsYXNzIEltYWdlT2Jz
ZXJ2ZXI7CiAKIGNsYXNzIEltYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2U+IHsKICAgICBm
cmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0Nv
bnRleHRJbXBsOwogcHVibGljOgogICAgIHZpcnR1YWwgfkltYWdlKCk7CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3NDb250ZXh0
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTg4N2E5MTE2YjIxMTI5YzAzYTBiMGIwZTVmNDM2MGFjNDU5NzE0OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL051bGxH
cmFwaGljc0NvbnRleHQuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTnVsbEdyYXBoaWNz
Q29udGV4dCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgeworcHVibGljOgorICAgIGVudW0gY2xh
c3MgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisg
ICAgICAgIEludmFsaWRhdGluZ0NvbnRyb2xUaW50cywKKyAgICAgICAgSW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlcywKKyAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50Cisg
ICAgfTsKKworICAgIE51bGxHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
IHJlYXNvbnMpCisgICAgICAgIDogbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMocmVhc29ucykK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQor
ICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlz
Q0FMYXllckNvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCisK
KyAgICBib29sIHBhaW50aW5nRGlzYWJsZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgYm9vbCBwZXJmb3JtaW5nUGFpbnRJbnZhbGlkYXRpb24oKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyAhPSBQYWludEludmFsaWRhdGlvblJl
YXNvbnM6Ok5vbmU7IH0KKyAgICBib29sIGludmFsaWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxp
ZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nQ29udHJvbFRpbnRzOyB9CisgICAgYm9vbCBpbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzOyB9CisgICAgYm9vbCBkZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVh
c29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWlu
dDsgfQorCisgICAgdm9pZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbCB7IH0KKworI2lm
IFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRl
eHQoYm9vbCkgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbCB7IH0KKworICAgIHZv
aWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBmaW5hbCB7IH0KKworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHsgfTsgfQorCisjaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCisgICAgdm9pZCBhcHBs
eVN0cm9rZVBhdHRlcm4oKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBm
aW5hbCB7IH0KKyAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyNlbmRp
ZgorCisgICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCA9IDEpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIGZp
bmFsIHsgfQorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZv
aWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3RJ
bXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorICAg
IHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgZmluYWwgeyB9CisgICAg
dm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkg
ZmluYWwgeyB9CisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbCB7IHJldHVybiBy
ZWN0OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwg
Ym9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0LCBjb25zdCBEYXNo
QXJyYXkmLCBib29sLCBib29sID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpIGZp
bmFsIHsgfQorICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbCB7IH0KKyAgICB2b2lkIHNldE1pdGVyTGltaXQo
ZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWwgeyB9
CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJv
dGF0ZShmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBm
aW5hbCB7IH0KKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5h
bCB7IH0KKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbCB7IH0K
KyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSA9IFBvc3NpYmx5
SW5jbHVkZURldmljZVNjYWxlKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0KKyAgICB2b2lk
IGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGNsaXAoY29u
c3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgc2F2ZSgpIGZpbmFsIHsgfQorICAgIHZvaWQgcmVzdG9y
ZSgpIGZpbmFsIHsgfQorCisgICAgdm9pZCBkcmF3UmFpc2VkRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyAgICBGbG9hdFNp
emUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxv
YXRQb2ludCYsIHVuc2lnbmVkID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0
KSBmaW5hbCB7IHJldHVybiB7IH07IH0KKworICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250
JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVu
c2lnbmVkLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIGZpbmFsIHsgfQor
CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkID0g
MCwgT3B0aW9uYWw8dW5zaWduZWQ+ID0gV1RGOjpudWxsb3B0KSBmaW5hbCB7IH0KKyAgICB2b2lk
IGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBG
bG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IEZvbnRD
YXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGZpbmFsIHsgfQorCisgICAgdm9pZCBk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlKSBmaW5hbCB7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJ
bWFnZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVz
dWx0OjpEaWROb3RoaW5nOyB9CisgICAgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VP
cmllbnRhdGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6
RGlkTm90aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFn
ZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGls
ZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQor
ICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3VGlsZWRJbWFnZShJbWFnZSYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0U2l6ZSYsIEltYWdlOjpUaWxlUnVsZSwg
SW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
IHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90aGluZzsgfQorCisgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25zdCBD
b2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxv
YXQsIGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENv
bG9yJikgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNlbmRpZgor
CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZp
bmFsIHsgfQorICAgIHZvaWQgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFJlZlB0cjxJbWFnZUJ1
ZmZlcj4sIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgZmluYWw7CisKKyAgICB2b2lkIGNsaXBSb3VuZGVkUmVjdChj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwT3V0Um91bmRl
ZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpIGZpbmFsIHsgfQorCisgICAgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29u
dGV4dCYpPiYmKSBmaW5hbCB7IHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1
Y2Nlc3M7IH0KKyAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdyYWRpZW50JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1v
ZGU6Ok5vcm1hbCkgZmluYWwgeyB9CisKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCkgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7
IH0KKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsIHsgfQorI2VuZGlmCisKKyNpZiBPUyhX
SU5ET1dTKQorICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmIC8v
IE9TKFdJTkRPV1MpCisKK3ByaXZhdGU6CisgICAgY29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
OjpOb25lIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IGFhZDY4MzZjMzU1NjI5
NTY5MjFhZDNjYmU4MDhlNzAzNmU2NmM1M2QuLjE4OTVjMjE5Mzc2NTE5YzJjODBkZGQzMDZhMjRl
Zjc2NGE5Y2IzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCkBAIC0xOTgsNyArMTk4LDkgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCiAgICAgLCBtX3NoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQogewogI2lmIFVTRShDRykK
LSAgICBpZiAoc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cykgeworICAgIC8vIENvcmUgR3Jh
cGhpY3MgaW5jb3JyZWN0bHkgcmVuZGVycyBzaGFkb3dzIHdpdGggcmFkaXVzID4gOHB4ICg8cmRh
cjovL3Byb2JsZW0vODEwMzQ0Mj4pLAorICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIHByZXNlcnZlIHRo
aXMgYnVnZ3kgYmVoYXZpb3IgZm9yIGNhbnZhcyBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorICAg
IGlmIChzdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSkg
ewogICAgICAgICBmbG9hdCBzaGFkb3dCbHVyID0gcmFkaXVzVG9MZWdhY3lSYWRpdXMoc3RhdGUu
c2hhZG93Qmx1cik7CiAgICAgICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZShzaGFkb3dCbHVy
LCBzaGFkb3dCbHVyKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCAxNzk0YzA2N2IxYmI2MGZl
NDlkNGU4YTM2MjAwZDc3MmEzMzJlN2MxLi4xZjRjZDQ0NTQzZjBlOTM4MmI1MGQxMGE5N2EwYzE5
YTBkMDhhYzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTE3NDAsOSArMTc0MCw3IEBAIHZvaWQgR3Jh
cGhpY3NMYXllckNBOjpyZWN1cnNpdmVDb21taXRDaGFuZ2VzKENvbW1pdFN0YXRlJiBjb21taXRT
dGF0ZSwgY29uc3QgVHJhCiAgICAgICAgIAogICAgICAgICBGbG9hdFJlY3QgaW5pdGlhbENsaXAo
Ym91bmRzT3JpZ2luKCksIHNpemUoKSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8RGlzcGxheUxpc3Q6OlJlY29yZGVyPihjb250ZXh0LCAqbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsK
LSAgICAgICAgfSk7CisgICAgICAgIERpc3BsYXlMaXN0OjpSZWNvcmRlciBjb250ZXh0KCptX2Rp
c3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwgQWZmaW5lVHJh
bnNmb3JtKCkpOwogICAgICAgICBwYWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW4uY3BwCmluZGV4IDNiNDQ4YWYwNGZhMjU1ZTRmODQzZWY0MjllYmQ3N2M5YTFkODY4
YWIuLjY4ODEyMjFiMDQ1OGRjYzk0ODRmMzRmNDE2NjNkZGQ3NGUxMjg3N2EgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiQ29sb3JTZXJp
YWxpemF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNpbmNsdWRlICJHRElVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCIKICNpbmNs
dWRlICJQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIK
QEAgLTg5MCw3ICs4OTAsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6ZHJhd1RleHRBdFBv
aW50KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0Zsb2F0IHgsIENHRmxvYQogICAgIEZvbnRDYXNj
YWRlIGZvbnQgPSBGb250Q2FzY2FkZShXVEZNb3ZlKGRlc2MpLCAwLCAwKTsKICAgICBmb250LnVw
ZGF0ZShudWxscHRyKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBjZyhjb250ZXh0KTsKKyAgICBH
cmFwaGljc0NvbnRleHRDRyBjZyhjb250ZXh0KTsKICAgICBjZy5zZXRGaWxsQ29sb3IoQ29sb3I6
OmJsYWNrKTsKICAgICBjZy5kcmF3VGV4dChmb250LCBUZXh0UnVuKHRleHQpLCBJbnRQb2ludCh4
LCB5KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRl
eCBkM2Y0NDhhY2E5MDMwZjc3ZDc4ZTU3YzQyZjMwNTJkNmE5ODkzMWM0Li5kYmQzNjNlNjEzY2Vi
MDdlMDM2NjczMzU1ZDA0N2VkYWFhNTJlNTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5
ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ0EpCiAKICNpbmNs
dWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAj
aW5jbHVkZSAiVGlsZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAg
LTk0LDcgKzk0LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNh
bGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKIAogICAgIFBsYXRmb3JtQ0FM
YXllcjo6ZmxpcENvbnRleHQoY29udGV4dCwgbGF5ZXJCb3VuZHMuc2l6ZS5oZWlnaHQpOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAKICAgICAvLyBJdCdzIGltcG9y
dGFudCB0byBnZXQgdGhlIGNsaXAgZnJvbSB0aGUgY29udGV4dCwgYmVjYXVzZSBpdCBtYXkgYmUg
c2lnbmlmaWNhbnRseQogICAgIC8vIHNtYWxsZXIgdGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcu
IHRpbGVkIGxheWVycykKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldp
bkludGVybmFsOjpkcmF3UmVwYWludENvdW50ZXJzKENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0Nv
bgogICAgIGVsc2UKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gY2FjaGVkQ0dDb2xvcihDb2xv
cjo6cmVkKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7
CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIFBs
YXRmb3JtQ0FMYXllcjo6ZHJhd1JlcGFpbnRJbmRpY2F0b3IoZ3JhcGhpY3NDb250ZXh0LCBvd25l
cigpLCBkcmF3Q291bnQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJhY2tpbmdMYXllcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRC
YWNraW5nTGF5ZXJXaW4uY3BwCmluZGV4IGM1YTczZThkM2FlOWJiNDlhOTZiZTI3ZjUzMjdlMDZj
MDYyMTRmYzMuLmI1M2EzMzdiYTRjY2RjZjIzZjc4NTQ5MDViMjc2MDdlYzkwYzA2NGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJUaWxlZEJh
Y2tpbmdMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcApAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgVVNFKENBKQogCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBTGF5ZXIuaCIKICNpbmNsdWRl
ICJUaWxlQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlRpbGVkQmFja2luZy5oIgpAQCAtODYsNyAr
ODYsNyBAQCB2b2lkIFdlYlRpbGVkQmFja2luZ0xheWVyV2luOjpkaXNwbGF5Q2FsbGJhY2soQ0FD
RkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dFJlZgogICAgIFBsYXRmb3JtQ0FMYXllckNsaWVu
dCogY2xpZW50ID0gb3duZXIoKS0+b3duZXIoKTsKICAgICBHcmFwaGljc0xheWVyOjpDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBjbGllbnQtPnBsYXRmb3Jt
Q0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250
ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSBjbGlwIGZy
b20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50bHkKICAgICAvLyBz
bWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggY2Y0ODM3NjAzZTBhYjE5MDg4OTc1ZjEwZTQyZGU3
NWExMjhiMDc1Ny4uZTQyM2Y1Y2RmNDdkNjRjY2M0YWEwY2M5NDBlMDg2M2Y3NWIxNzE3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogCiAjaWYgVVNFKENBSVJPKQogCkBAIC0zOSw3ICsz
OSw2IEBACiAjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0
LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dEltcGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWly
by5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgpAQCAt
NTcsNjMzICs1NiwzNjIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRl
eHQpCitHcmFwaGljc0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1D
b250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKKyAgICA6IG1fcGxhdGZvcm1Db250ZXh0KHBs
YXRmb3JtQ29udGV4dCkKKyAgICAsIG1fcHJpdmF0ZShtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQogewotICAgIGlmICghcGxhdGZv
cm1Db250ZXh0KQotICAgICAgICByZXR1cm47CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+c3lu
Y0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Cit9CiAKLSAgICBtX2RhdGEgPSBuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCpwbGF0Zm9ybUNvbnRleHQpOwotICAgIG1f
ZGF0YS0+cGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9kYXRhKTsK
LSAgICBtX2RhdGEtPnN5bmNDb250ZXh0KHBsYXRmb3JtQ29udGV4dC0+Y3IoKSk7CitHcmFwaGlj
c0NvbnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oY2Fpcm9fdCogY2Fpcm9Db250ZXh0
KQorICAgIDogbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4
dENhaXJvPihjYWlyb0NvbnRleHQpKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKK3sKKyAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAg
bV9wcml2YXRlLT5zeW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSgpCitHcmFwaGljc0NvbnRleHRDYWly
bzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIHBsYXRmb3JtQ29u
dGV4dCkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJvKCpwbGF0Zm9ybUNvbnRleHQpCiB7Ci0g
ICAgaWYgKG1fZGF0YSkgewotICAgICAgICBtX2RhdGEtPnBsYXRmb3JtQ29udGV4dC5zZXRHcmFw
aGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotICAgICAgICBkZWxldGUgbV9kYXRhOwotICAg
IH0KIH0KIAotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVE
ZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUpIGNvbnN0CitHcmFwaGljc0NvbnRleHRDYWlybzo6fkdy
YXBoaWNzQ29udGV4dENhaXJvKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKK30KIAotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOworYm9vbCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CitBZmZpbmVUcmFu
c2Zvcm0gR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5j
bHVkZVNjYWxlKSBjb25zdAorewogICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmdldENUTSgqcGxh
dGZvcm1Db250ZXh0KCkpOwogfQogCi1QbGF0Zm9ybUNvbnRleHRDYWlybyogR3JhcGhpY3NDb250
ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAorUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQoKSBjb25zdAogewotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVy
biAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQ7CisgICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4
dDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCk7CiAgICAgQ2Fpcm86OnNhdmUo
KnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQ
bGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUoKQogewot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpy
ZXN0b3JlKCk7CiAgICAgQ2Fpcm86OnJlc3RvcmUoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAog
Ly8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJv
cmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBib3JkZXJUaGlja25lc3MpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7
CiAgICAgQ2Fpcm86OmRyYXdSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgYm9yZGVyVGhp
Y2tuZXNzLCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdOYXRp
dmVJbWFnZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9y
bUltYWdlKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxw
aGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpkcmF3UGxhdGZvcm1J
bWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eSB9LCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycywgc28gd2Ugc2hvdWxkIG5vdCBk
cmF3IHNoYWRvd3MuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50
MSwgcG9pbnQyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENh
aXJvOjpkcmF3TGluZSgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5z
dHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3Rh
dGUuc2hvdWxkQW50aWFsaWFzKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRv
IGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpkcmF3RWxsaXBzZSgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0
cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpm
aWxsUGF0aCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgsIENhaXJvOjpGaWxsU291cmNlKHN0YXRl
KSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86
OnN0cm9rZVBhdGgoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNl
KHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVj
dCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIENhaXJvOjpmaWxsUmVj
dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWlybzo6U2hhZG93U3RhdGUoc3Rh
dGUoKSkpOworfQogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0
KHJlY3QsIGNvbG9yKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGF1dG8mIHN0YXRl
ID0gdGhpcy0+c3RhdGUoKTsKKyAgICBhdXRvIHBhdHRlcm4gPSBncmFkaWVudC5jcmVhdGVQYXR0
ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgIGlmICghcGF0
dGVybikKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwg
Y29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSgpKSk7CisgICAgQ2Fpcm86OnNhdmUobV9w
bGF0Zm9ybUNvbnRleHQpOworICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdCwgcGF0dGVybi5nZXQoKSk7CisgICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRl
eHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKKyAg
ICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3I7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcChyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9w
ZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7
CisgICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xvciwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKICAgICBD
YWlybzo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5k
UnVsZSBjbGlwUnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0
aCwgY2xpcFJ1bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcFBhdGgoKnBsYXRmb3JtQ29udGV4dCgp
LCBwYXRoLCBjbGlwUnVsZSk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBCb3VuZHMoKSBj
b25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbnRS
ZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5jbGlwQm91
bmRzKCk7Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIHJldHVybiBD
YWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQg
d2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47CisgICAgaWYgKGF1dG8gbmF0aXZlSW1hZ2UgPSBidWZmZXIuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBuYXRpdmVJbWFnZS0+cGxhdGZvcm1JbWFnZSgpLmdl
dCgpLCBkZXN0UmVjdCk7Cit9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQorewogI2lmIFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogICAg
IFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cygqdGhpcywgcGF0aCwgY29sb3IpOwogICAgIFVOVVNF
RF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwog
I2Vsc2UKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5n
KHBhdGgsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1Jp
bmcoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLCB3aWR0aCwgY29sb3IpOwogI2VuZGlmCiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2FpdGE6
OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CiAjZWxzZQotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocmVjdHMsIHdpZHRo
LCBvZmZzZXQsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0cywgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBw
cmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHlsZSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7Ci0gICAgZHJhd0xpbmVzRm9y
VGV4dChyZWN0LmxvY2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIERhc2hBcnJheSB7IDAsIHJlY3Qu
d2lkdGgoKSB9LCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICh3aWR0aHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xp
bmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRl
cmxpbmVzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmRyYXdMaW5lc0ZvclRleHQoKnBsYXRmb3JtQ29udGV4
dCgpLCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVz
LCBtX3N0YXRlLnN0cm9rZUNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdE
b3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtl
ckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVT
dHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihyZWN0LCBzdHlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3R5bGUpOwogfQogCi1GbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9p
bXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICByZXR1
cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxzKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9h
dCB5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT50cmFuc2xhdGUoeCwgeSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIENhaXJvOjp0cmFuc2xhdGUoKnBsYXRmb3JtQ29udGV4dCgpLCB4LCB5KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJikKLXsK
LSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9r
ZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBm
aWxsIG9yIHN0cm9rZQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VDb2xvcihjb25zdCBDb2xvciYpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjp1cGRhdGVT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTdGF0ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIC8vIENhaXJvIGNvbnRleHRzIGNh
bid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwotICAgIC8vIHNvIHdlIHNl
dCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCi19CisgICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKKyAgICAgICAgQ2Fpcm86OlN0YXRl
OjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwog
Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNl
dFN0cm9rZVRoaWNrbmVzcygqcGxhdGZvcm1Db250ZXh0KCksIHN0cm9rZVRoaWNrbmVzcyk7Ci19
CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewor
ICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAg
IC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRo
IGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVp
Z2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAg
ICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAgICAgICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRv
d09mZnNldC5oZWlnaHQoKSB9OworICAgICAgICB9CisgICAgfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZs
YWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAg
ICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDYWlybzo6U3RhdGU6OnNldFN0cm9rZVN0
eWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3Ryb2tlU3R5bGUpOworICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpCisgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U2hvdWxkQW50aWFsaWFzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zaG91
bGRBbnRpYWxpYXMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChj
b25zdCBVUkwmLCBjb25zdCBGbG9hdFJlY3QmKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PmNvbmNhdENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Y29uY2F0Q1RNKCpwbGF0Zm9y
bUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpT
dGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6YmVnaW5U
cmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQogewotICAgIGlmIChtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBo
aWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAot
ICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZhcyBo
YXZlIG9wcG9zaXRlIFkgYXhpcwotICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IHsgb2Zm
c2V0LndpZHRoKCksIC1vZmZzZXQuaGVpZ2h0KCkgfTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKG9wYWNpdHkpOwogICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBDYWlybzo6
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotYm9vbCBHcmFw
aGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKCkKLXsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVj
dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIENhaXJvOjpjbGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1
dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6c3Ryb2tlUmVjdCgqcGxhdGZv
cm1Db250ZXh0KCksIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSks
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c2V0TGluZUNhcChsaW5lQ2FwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnNldExpbmVDYXAoKnBsYXRmb3Jt
Q29udGV4dCgpLCBsaW5lQ2FwKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVE
YXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFw
aGljc0NvbnRleHRDYWlybzo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZs
b2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNo
KGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lRGFzaCgqcGxhdGZv
cm1Db250ZXh0KCksIGRhc2hlcywgZGFzaE9mZnNldCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zZXRMaW5lSm9pbihsaW5lSm9pbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5l
Sm9pbigqcGxhdGZvcm1Db250ZXh0KCksIGxpbmVKb2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpzZXRNaXRlckxpbWl0KGZsb2F0IG1pdGVyKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgLy8g
TWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAgIG1faW1wbC0+
c2V0TWl0ZXJMaW1pdChtaXRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KCpwbGF0
Zm9ybUNvbnRleHQoKSwgbWl0ZXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1BbHBoYShmbG9hdCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9y
LCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAg
Q2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oKnBsYXRmb3JtQ29udGV4dCgpLCBj
b21wb3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENhaXJvOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgY2xp
cFBhdGgocGF0aCwgd2luZFJ1bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0
KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICBDYWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHBhdGgp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpyb3RhdGUoZmxvYXQgcmFkaWFucykKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKHJhZGlhbnMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6cm90YXRl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmFkaWFucyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJv
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2NhbGUoKnBsYXRmb3JtQ29udGV4dCgp
LCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcE91dChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIENhaXJvOjpjbGlwT3V0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IENhaXJvOjpmaWxsUm91bmRlZFJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBjb2xvciwg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9y
LmlzVmFsaWQoKSkKKyAgICBpZiAoIWNvbG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBDYWlybzo6RmlsbFNvdXJjZShz
dGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwg
Y29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZs
b2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0
ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NF
UlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIFVOVVNFRF9QQVJBTShzcGFjaW5nKTsKLSAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgSW50
U2l6ZShpbWFnZVNpemUpLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBvcHRpb25zKTsKKyAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKnBsYXRmb3JtQ29udGV4dCgp
LCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwg
ZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29s
IGVuYWJsZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlbmRlcmluZ01v
ZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRl
OjpzZXRTaG91bGRBbnRpYWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIHJl
dHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQo
KSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqIGdseXBocywgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcywgdW5zaWduZWQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9u
dFNtb290aGluZykKIHsKLX0KKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQor
ICAgICAgICByZXR1cm47CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFoYXNQbGF0Zm9ybUNvbnRleHQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKKyAgICBWZWN0b3I8
Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlwaHMobnVtR2x5cGhzKTsKKyAgICB7CisgICAgICAgIGF1
dG8geU9mZnNldCA9IHBvaW50LnkoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tp
XSwgeE9mZnNldCwgeU9mZnNldCB9OworICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tp
XS53aWR0aCgpOworICAgICAgICAgICAgeU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsK
KyAgICAgICAgfQorICAgIH0KIAotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCog
c2NhbGVkRm9udCA9IGZvbnQucGxhdGZvcm1EYXRhKCkuc2NhbGVkRm9udCgpOworICAgIGRvdWJs
ZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CisKKyAg
ICBpZiAoIWZvbnQuYWxsb3dzQW50aWFsaWFzaW5nKCkpCisgICAgICAgIGZvbnRTbW9vdGhpbmcg
PSBGb250U21vb3RoaW5nTW9kZTo6Tm9TbW9vdGhpbmc7CisKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CisgICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENh
aXJvOjpGaWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCisgICAg
ICAgIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0
aWNCb2xkT2Zmc2V0LCBjYWlyb0dseXBocywgeE9mZnNldCwKKyAgICAgICAgc3RhdGUudGV4dERy
YXdpbmdNb2RlLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3Rh
dGUuc2hhZG93Q29sb3IsCisgICAgICAgIGZvbnRTbW9vdGhpbmcpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODhhNDhl
M2ZmYjQ5MzViN2M4MDU5MDcwZGIxYmM5MTEwZDRiZWNjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCit0eXBlZGVmIHN0
cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0
Zm9ybUNvbnRleHRDYWlybzsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8gZmluYWwgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBHcmFw
aGljc0NvbnRleHRDYWlybyhQbGF0Zm9ybUNvbnRleHRDYWlybyYpOworICAgIEdyYXBoaWNzQ29u
dGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJvKik7CisgICAgR3JhcGhpY3NDb250ZXh0Q2Fp
cm8oY2Fpcm9fdCopOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIEdyYXBoaWNzQ29udGV4dENh
aXJvKEhEQywgYm9vbCBoYXNBbHBoYSA9IGZhbHNlKTsgLy8gRklYTUU6IFRvIGJlIHJlbW92ZWQu
CisjZW5kaWYKKworICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dENhaXJvKCk7CisKKyAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsOworICAgIFBsYXRmb3JtQ29udGV4
dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6
U3RhdGVDaGFuZ2VGbGFncyk7CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWw7
CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWw7Cisg
ICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmluYWw7CisgICAgdm9pZCBzZXRNaXRlckxp
bWl0KGZsb2F0KSBmaW5hbDsKKworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7
CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwg
QmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFsOworICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KyAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0
IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd05hdGl2ZUltYWdl
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKworICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5bGUpIGZpbmFsOworICAgIHZv
aWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1h
cmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQs
IGZsb2F0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25z
dCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsK
KworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworCisg
ICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShm
bG9hdCkgZmluYWw7CisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKKyAgICB2b2lk
IHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYpIGZpbmFsOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhpY3NDb250
ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBiZWdpblRy
YW5zcGFyZW5jeUxheWVyKGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xpcE91
dChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2lu
ZFJ1bGUpIGZpbmFsOworICAgIEludFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworICAg
IHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSBm
aW5hbDsKKyAgICAKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5h
bDsKKworICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYs
IEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKKworI2lmIE9TKFdJTkRPV1Mp
CisgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNv
bnRleHQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9vd25lZFBsYXRmb3JtQ29udGV4dDsKKyAgICBQ
bGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9ybUNvbnRleHQ7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YWYyYTA0ODE3YmZkNGVkMGYyMDY3NzVhYzI4NjIyNDk5NzI1YWQ1YS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotCi0jaWYgVVNFKENBSVJPKQot
Ci0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVj
dC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1
ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0KQotewotICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5KAotICAgICAgICBbJnBsYXRmb3Jt
Q29udGV4dF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8+KGNvbnRleHQsIHBs
YXRmb3JtQ29udGV4dCk7Ci0gICAgICAgIH0pOwotfQotCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBo
aWNzQ29udGV4dEltcGxGYWN0b3J5IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShjYWlyb190KiBjYWlyb0NvbnRleHQpCi17Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkoCi0gICAgICAgIFtjYWlyb0NvbnRleHRdKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBjYWlyb0NvbnRleHQp
OwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQbGF0Zm9ybUNvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0
KQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQotICAgICwgbV9wcml2
YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3BsYXRmb3Jt
Q29udGV4dCkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJp
dmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQobV9wbGF0
Zm9ybUNvbnRleHQuY3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6R3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY2Fpcm9fdCogY2Fp
cm9Db250ZXh0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9v
d25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dENhaXJvPihjYWly
b0NvbnRleHQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKLXsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRH
cmFwaGljc0NvbnRleHRQcml2YXRlKG1fcHJpdmF0ZS5nZXQoKSk7Ci0gICAgbV9wcml2YXRlLT5z
eW5jQ29udGV4dChtX3BsYXRmb3JtQ29udGV4dC5jcigpKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjp+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1fcGxh
dGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6dXBkYXRl
U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGlj
c0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3Rh
dGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhp
Y2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VT
dHlsZUNoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0
ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09m
ZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0
aW9uQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiht
X3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9k
ZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFs
aWFzQ2hhbmdlKQotICAgICAgICBDYWlybzo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3Bs
YXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmNsZWFyU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIENhaXJv
OjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVz
LCBmbG9hdCBkYXNoT2Zmc2V0KQotewotICAgIENhaXJvOjpzZXRMaW5lRGFzaChtX3BsYXRmb3Jt
Q29udGV4dCwgZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIENhaXJvOjpz
ZXRMaW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewot
ICAgIENhaXJvOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBhdXRvIHBhdHRlcm4gPSBn
cmFkaWVudC5jcmVhdGVQYXR0ZXJuKDEuMCwgc3RhdGUuZmlsbEdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0pOwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ2Fpcm86OnNh
dmUobV9wbGF0Zm9ybUNvbnRleHQpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29u
dGV4dCwgcmVjdCwgcGF0dGVybi5nZXQoKSk7Ci0gICAgQ2Fpcm86OnJlc3RvcmUobV9wbGF0Zm9y
bUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJh
dG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRv
ciBwcmV2aW91c09wZXJhdG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBDYWly
bzo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9z
aXRlT3BlcmF0b3IsIGJsZW5kTW9kZSk7Ci0gICAgQ2Fpcm86OmZpbGxSZWN0KG1fcGxhdGZvcm1D
b250ZXh0LCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgQ2Fp
cm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZp
b3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0
b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91
c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgQ2Fpcm86OlNoYWRvd1N0YXRlIHNoYWRvd1N0
YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgQ2Fpcm86OmZp
bGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0YXRl
KTsKLSAgICBlbHNlCi0gICAgICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwg
cmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
QmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJikKLXsKLSAgICBDYWly
bzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgeyB9LCBDYWlybzo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3Rh
dGUoKSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCk7Ci0gICAgQ2Fpcm86OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWly
bzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQotewotICAgIFBhdGggcGF0aDsKLSAgICBwYXRoLmFkZEVsbGlwc2UocmVjdCk7Ci0g
ICAgZmlsbFBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQotewotICAg
IGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6c3Ry
b2tlUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgbGluZVdpZHRoLCBDYWlybzo6U3Ryb2tl
U291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpz
dHJva2VQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAg
ICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIHN0cm9rZVBhdGgo
cGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNv
bnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ds
eXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcpCi17
Ci0gICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byB4T2Zmc2V0ID0gcG9pbnQueCgpOwotICAgIFZlY3RvcjxjYWlyb19nbHlwaF90
PiBjYWlyb0dseXBocyhudW1HbHlwaHMpOwotICAgIHsKLSAgICAgICAgYXV0byB5T2Zmc2V0ID0g
cG9pbnQueSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7Ci0gICAgICAgICAgICBjYWlyb0dseXBoc1tpXSA9IHsgZ2x5cGhzW2ldLCB4T2Zmc2V0LCB5
T2Zmc2V0IH07Ci0gICAgICAgICAgICB4T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLndpZHRoKCk7Ci0g
ICAgICAgICAgICB5T2Zmc2V0ICs9IGFkdmFuY2VzW2ldLmhlaWdodCgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCA9IGZvbnQucGxhdGZv
cm1EYXRhKCkuc2NhbGVkRm9udCgpOwotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0g
Zm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBpZiAoIWZvbnQuYWxsb3dzQW50aWFs
aWFzaW5nKCkpCi0gICAgICAgIGZvbnRTbW9vdGhpbmcgPSBGb250U21vb3RoaW5nTW9kZTo6Tm9T
bW9vdGhpbmc7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIENhaXJvOjpGaWxsU291
cmNlKHN0YXRlKSwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksCi0gICAgICAgIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSksIHBvaW50LCBzY2FsZWRGb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0
LCBjYWlyb0dseXBocywgeE9mZnNldCwKLSAgICAgICAgc3RhdGUudGV4dERyYXdpbmdNb2RlLCBz
dGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Q29s
b3IsCi0gICAgICAgIGZvbnRTbW9vdGhpbmcpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZS5kcmF3KGdyYXBoaWNzQ29udGV4dCgp
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9h
dFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oaW1hZ2VTaXplKTsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29u
dGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdQbGF0Zm9ybUltYWdlKG1fcGxhdGZvcm1D
b250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgc3RhdGUuYWxwaGEs
IENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFNpemUm
IGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0
aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0g
ICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRo
aWNrbmVzcykKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgQ2Fpcm86OmRyYXdSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBib3JkZXJUaGlj
a25lc3MsIHN0YXRlLmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0xp
bmUobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50MSwgcG9pbnQyLCBzdGF0ZS5zdHJva2VTdHlsZSwg
c3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hvdWxkQW50
aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdMaW5lc0Zv
clRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFz
aEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlVW5kZXJsaW5lcykKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86
OmRyYXdMaW5lc0ZvclRleHQobV9wbGF0Zm9ybUNvbnRleHQsIHBvaW50LCB0aGlja25lc3MsIHdp
ZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0YXRlLnN0cm9rZUNvbG9yKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkK
LXsKLSAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCwgc3R5bGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0
ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdQYXRoKGNvbnN0IFBhdGgmKQotewotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBm
bG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7Ci0gICAgQ2Fpcm86OmRyYXdGb2N1c1JpbmcobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgsIHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNF
RF9QQVJBTShvZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250
ZXh0LCByZWN0cywgd2lkdGgsIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OnNhdmUoKQotewotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJlc3RvcmUoKQotewotICAgIENhaXJv
OjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIENhaXJvOjp0cmFu
c2xhdGUobV9wbGF0Zm9ybUNvbnRleHQsIHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIENhaXJvOjpy
b3RhdGUobV9wbGF0Zm9ybUNvbnRleHQsIGFuZ2xlSW5SYWRpYW5zKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKLXsKLSAg
ICBDYWlybzo6c2NhbGUobV9wbGF0Zm9ybUNvbnRleHQsIHNpemUpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtKQotewotICAgIENhaXJvOjpjb25jYXRDVE0obV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5z
Zm9ybSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDVE0o
bV9wbGF0Zm9ybUNvbnRleHQsIHRyYW5zZm9ybSk7Ci19Ci0KLUFmZmluZVRyYW5zZm9ybSBHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZp
Y2VTY2FsZSkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0obV9wbGF0Zm9ybUNv
bnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQotewotICAgIENhaXJvOjpiZWdpblRyYW5zcGFyZW5j
eUxheWVyKG1fcGxhdGZvcm1Db250ZXh0LCBvcGFjaXR5KTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKLXsKLSAgICBDYWlybzo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXAobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgQ2Fp
cm86OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIENhaXJv
OjpjbGlwT3V0KG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBS
dWxlKQotewotICAgIENhaXJvOjpjbGlwUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgY2xp
cFJ1bGUpOwotfQotCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5k
cygpCi17Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q2xpcEJvdW5kcyhtX3BsYXRmb3Jt
Q29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQot
ewotICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJl
Y3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6YXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihmbG9hdCkKLXsKLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKQotewotICAgIHJldHVybiBDYWlybzo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxDYWlybzo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250
ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVkZTVkMmE3ZTk4ZGJiYmVhMjY3YWIwNTRjMGRm
ZjE0MjU2Y2YyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbC5oIgotCi10eXBlZGVmIHN0cnVjdCBfY2Fpcm8gY2Fpcm9fdDsKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHRDYWlybzsKLQotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvIGZpbmFsIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwg
ewotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0NvbnRleHQ6Okdy
YXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0Q2Fp
cm8mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGlj
c0NvbnRleHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KGNhaXJvX3QqKTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHRDYWly
byYpOwotICAgIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybyhHcmFwaGljc0NvbnRleHQmLCBjYWly
b190Kik7Ci0gICAgdmlydHVhbCB+R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvKCk7Ci0KLSAgICBi
b29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtQ29u
dGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQg
dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0ZXJM
aW1pdChmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdy
YWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAg
IHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xv
ciYsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9s
ZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
KSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
dHJva2VQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21vb3RoaW5nTW9kZSkgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZlSW1h
Z2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmLCBib29sLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRN
YXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwg
ZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZs
b2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVj
dCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJh
d2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0
aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpIG92ZXJy
aWRlOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRp
YVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJv
b2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotICAgIAotICAgIHZvaWQgYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICBGbG9hdFJlY3Qgcm91bmRUb0Rldmlj
ZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkg
b3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4
dENhaXJvPiBtX293bmVkUGxhdGZvcm1Db250ZXh0OwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
JiBtX3BsYXRmb3JtQ29udGV4dDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGU+IG1fcHJpdmF0ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcAppbmRleCBkMzdmYjY2MzczYWFjOTMyYTcxNDgyNTM0ODVmMzM0OTExODY4NWQ0Li5hNThk
ZGI5NjgyNzUyZTc5NTAwZjMyMmJjNTNjZjA0ZDYwNzAzYzdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJDb2xvclRyYW5zZmVyRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dENhaXJvLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmNwcAppbmRleCAzYmU3NTU2OWU5NzNjMmIxNjg5OWE1MDc2Mjc1ZjUyM2ZhODA3MWVh
Li45YjVjMGFkMDc0NDUxODgwZGVmZGQzYzQ4OTJlNGY3M2MyODY0MmM5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAK
ICNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDYWlyby5oIgogI2luY2x1ZGUgIlBpeGVsQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8Y2Fpcm8uaD4KQEAgLTUxLDcgKzUxLDcgQEAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgUGFyYW1ldGVycyYKIAog
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2Uu
Z2V0KCkpKTsKICAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworICAgIG1fY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KG1fcGxhdGZvcm1Db250ZXh0KTsKIH0K
IAogR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRl
eHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0aENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL1BhdGhDYWlyby5jcHAKaW5kZXggODFkMTU4ZTJkZmY3ZTViZjAzYzdiNjVkMDM2ZGRhODk5
ZjBmOTAxZi4uMmExOWU0N2E5YWFjZWMyMDk2YTYwZTk3ZTNiNWM0ODc0NTNkYWFmMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9VbmlxdWVQdHIuaCIKICNpbmNs
dWRlICJDYWlyb1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENh
aXJvLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00MjEsNyArNDIxLDcgQEAgRmxvYXRS
ZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
Q29udGV4dCYpPiYgc3Ryb2sKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwogCiAgICAgaWYg
KHN0cm9rZVN0eWxlQXBwbGllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGF0aC5nZXQoKSkpOworICAgICAg
ICBHcmFwaGljc0NvbnRleHRDYWlybyBnYyhtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VT
dHlsZUFwcGxpZXIoZ2MpOwogICAgIH0KIApAQCAtNDUwLDcgKzQ1MCw3IEBAIGJvb2wgUGF0aDo6
c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZv
aWQoR3JhcGhpY3NDCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHsKLSAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNy
ZWF0ZUZhY3RvcnkobV9wYXRoLmdldCgpKSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENhaXJv
IGdyYXBoaWNzQ29udGV4dChtX3BhdGguZ2V0KCkpOwogICAgICAgICBzdHJva2VTdHlsZUFwcGxp
ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBlZjNh
YzJlMTM3MWI4ZTFjOTA3ZGExMjQyYTc2Y2U2ZTYxNDc4NzBlLi5iMmJhNTRjNjQ4YTk0OTdjMjZl
MzI1ZmNhZWU1MDI0MjQyMWE0MjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01NSwxNyArNTUs
MTIgQEAgc3RhdGljIHZvaWQgc2V0Q0dGaWxsQ29sb3IoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29u
dGV4dCwgY2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRDR1N0cm9r
ZUNvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAg
Q0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihj
b2xvcikpOwotfQotCiBpbmxpbmUgQ0dBZmZpbmVUcmFuc2Zvcm0gZ2V0VXNlclRvQmFzZUNUTShD
R0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICByZXR1cm4gQ0dBZmZpbmVUcmFuc2Zvcm1Db25j
YXQoQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpLCBDR0FmZmluZVRyYW5zZm9ybUludmVydChDR0Nv
bnRleHRHZXRCYXNlQ1RNKGNvbnRleHQpKSk7CiB9CiAKLXN0YXRpYyBJbnRlcnBvbGF0aW9uUXVh
bGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBx
dWFsaXR5KQorc3RhdGljIEludGVycG9sYXRpb25RdWFsaXR5IGNvcmVJbnRlcnBvbGF0aW9uUXVh
bGl0eShDR0ludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCiB7CiAgICAgc3dpdGNoIChxdWFs
aXR5KSB7CiAgICAgY2FzZSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDoKQEAgLTgyLDYgKzc3LDM0
IEBAIHN0YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb252ZXJ0SW50ZXJwb2xhdGlvblF1YWxp
dHkoQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBxCiAgICAgcmV0dXJuIEludGVycG9sYXRpb25RdWFs
aXR5OjpEZWZhdWx0OwogfQogCitzdGF0aWMgQ0dJbnRlcnBvbGF0aW9uUXVhbGl0eSBjZ0ludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpCit7CisgICAgc3dp
dGNoIChxdWFsaXR5KSB7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OworICAgIGNhc2UgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6CisgICAgICAgIHJldHVybiBrQ0dJbnRl
cnBvbGF0aW9uTm9uZTsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6CisgICAg
ICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTG93OworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1
YWxpdHk6Ok1lZGl1bToKKyAgICAgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25NZWRpdW07Cisg
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIGtDR0lu
dGVycG9sYXRpb25IaWdoOworICAgIH0KKyAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbkRlZmF1
bHQ7Cit9CisKK3N0YXRpYyBDR1RleHREcmF3aW5nTW9kZSBjZ1RleHREcmF3aW5nTW9kZShUZXh0
RHJhd2luZ01vZGVGbGFncyBtb2RlKQoreworICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKKyAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFpbnMo
VGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOworICAgIGlmIChmaWxsICYmIHN0cm9rZSkKKyAgICAg
ICAgcmV0dXJuIGtDR1RleHRGaWxsU3Ryb2tlOworICAgIGlmIChmaWxsKQorICAgICAgICByZXR1
cm4ga0NHVGV4dEZpbGw7CisgICAgcmV0dXJuIGtDR1RleHRTdHJva2U7Cit9CisKIHN0YXRpYyBD
R0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9kZShDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKICAgICBzd2l0Y2ggKGJsZW5kTW9kZSkg
ewpAQCAtMTU2LDM1ICsxNzksMzYgQEAgc3RhdGljIENHQmxlbmRNb2RlIHNlbGVjdENHQmxlbmRN
b2RlKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE0KICAgICByZXR1
cm4ga0NHQmxlbmRNb2RlTm9ybWFsOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1Jbml0KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhp
Y3NDb250ZXh0Q0coQ0dDb250ZXh0UmVmIGNnQ29udGV4dCkKIHsKICAgICBpZiAoIWNnQ29udGV4
dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQpOwogICAgIC8vIE1ha2Ugc3VyZSB0aGUgY29udGV4dCBz
dGFydHMgaW4gc3luYyB3aXRoIG91ciBzdGF0ZS4KLSAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihm
aWxsQ29sb3IoKSk7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsK
LSAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdHJva2VUaGlja25lc3MoKSk7Ci0gICAg
bV9zdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29udmVydEludGVycG9sYXRpb25R
dWFsaXR5KENHQ29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgp
KSk7CisgICAgdXBkYXRlU3RhdGUobV9zdGF0ZSwgeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UsIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UgfSk7CisgICAgbV9zdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5ID0gY29yZUludGVycG9sYXRpb25RdWFsaXR5KENH
Q29udGV4dEdldEludGVycG9sYXRpb25RdWFsaXR5KHBsYXRmb3JtQ29udGV4dCgpKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0
Q0c6On5HcmFwaGljc0NvbnRleHRDRygpCiB7CiAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotQ0dD
b250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0NHQ29udGV4dFJlZiBHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1D
b250ZXh0KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7CiAgICAg
QVNTRVJUKG1fZGF0YS0+bV9jZ0NvbnRleHQpOwogICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250
ZXh0LmdldCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUo
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWludGlu
Z0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjpzYXZlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRoaXMgZnVu
Y3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdhbnQgdG8g
YXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gc2F2ZSBvZiB0aGUgc2Vjb25kYXJ5IGNvbnRleHQgKGlu
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMTkyLDEwICsyMTYsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+
c2F2ZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUo
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKCFwYWlu
dGluZ0Rpc2FibGVkKCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlKCk7CiAKICAgICAvLyBOb3RlOiBEbyBub3QgdXNlIHRo
aXMgZnVuY3Rpb24gd2l0aGluIHRoaXMgY2xhc3MgaW1wbGVtZW50YXRpb24sIHNpbmNlIHdlIHdh
bnQgdG8gYXZvaWQgdGhlIGV4dHJhCiAgICAgLy8gcmVzdG9yZSBvZiB0aGUgc2Vjb25kYXJ5IGNv
bnRleHQgKGluIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmgpLgpAQCAtMjA0LDEw
ICsyMjcsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQog
ICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZh
bHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3Qg
UGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW1hZ2UgPSBuYXRp
dmVJbWFnZS5wbGF0Zm9ybUltYWdlKCk7CiAKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgTW9ub3Rv
bmljVGltZSBzdGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKQEAgLTI5OCw3ICszMjAs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZv
cm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsbwogCiAgICAgYXV0byBvbGRDb21wb3NpdGVPcGVy
YXRvciA9IGNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGF1dG8gb2xkQmxlbmRNb2RlID0gYmxl
bmRNb2RlT3BlcmF0aW9uKCk7Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24ob3B0
aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKKyAgICBzZXRD
b21wb3NpdGVPcGVyYXRpb24ob3B0aW9ucy5jb21wb3NpdGVPcGVyYXRvcigpLCBvcHRpb25zLmJs
ZW5kTW9kZSgpKTsKIAogICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2lu
IHRvIGJlIGF0ICgwLCAwKQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBhZGp1
c3RlZERlc3RSZWN0LngoKSwgYWRqdXN0ZWREZXN0UmVjdC55KCkpOwpAQCAtMzI1LDEwICszNDcs
MTAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRm
b3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG8KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
ICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgd2FzQW50aWFsaWFz
ZWQpOwogI2VuZGlmCi0gICAgICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9sZENv
bXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOworICAgICAgICBzZXRDb21wb3NpdGVPcGVy
YXRpb24ob2xkQ29tcG9zaXRlT3BlcmF0b3IsIG9sZEJsZW5kTW9kZSk7CiAgICAgfQogCi0gICAg
TE9HX1dJVEhfU1RSRUFNKEltYWdlcywgc3RyZWFtIDw8ICJHcmFwaGljc0NvbnRleHQ6OmRyYXdO
YXRpdmVJbWFnZSAiIDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAi
IGludG8gIiA8PCBkZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkg
LSBzdGFydFRpbWUpLm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOworICAgIExPR19XSVRIX1NUUkVB
TShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFnZSAi
IDw8IGltYWdlLmdldCgpIDw8ICIgc2l6ZSAiIDw8IGltYWdlU2l6ZSA8PCAiIGludG8gIiA8PCBk
ZXN0UmVjdCA8PCAiIHRvb2sgIiA8PCAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBzdGFydFRpbWUp
Lm1pbGxpc2Vjb25kcygpIDw8ICJtcyIpOwogfQogCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNh
bGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQpAQCAtMzM5LDcgKzM2MSw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0
UmVmIGNvbnRleHQpCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaGVpZ2h0KTsKICNlbmRpZgotICAg
IENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91
bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwg
aGVpZ2h0KSksIGltYWdlKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0Q0coY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwgMCwg
Q0dJbWFnZUdldFdpZHRoKGltYWdlKSwgaGVpZ2h0KSksIGltYWdlKTsKIH0KIAogc3RhdGljIHZv
aWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQpAQCAtMzQ3LDE2ICszNjksMTgg
QEAgc3RhdGljIHZvaWQgcGF0dGVyblJlbGVhc2VDYWxsYmFjayh2b2lkKiBpbmZvKQogICAgIGNh
bGxPbk1haW5UaHJlYWQoW2ltYWdlID0gYWRvcHRDRihzdGF0aWNfY2FzdDxDR0ltYWdlUmVmPihp
bmZvKSldIHsgfSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1QYXR0
ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdQYXR0ZXJuKE5h
dGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhcGF0dGVyblRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKKyAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGF1dG8gaW1hZ2UgPSBuYXRpdmVJbWFnZS5wbGF0
Zm9ybUltYWdlKCk7CisKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGRlc3RSZWN0KTsKIAotICAgIHNldFBsYXRmb3Jt
Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5i
bGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9zaXRl
T3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CiAKICAgICBDR0NvbnRleHRUcmFuc2xh
dGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWln
aHQoKSk7CiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwpAQCAtNDIzLDE2
ICs0NDcsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25z
dCBQbGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRgogfQogCiAvLyBEcmF3cyBhIGZpbGxl
ZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdS
ZWN0KHJlY3QsIGJvcmRlclRoaWNrbmVzcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICAvLyBGSVhNRTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdy
YWRpZW50cyBsaWtlIGRyYXdQYXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NF
UlQoIXJlY3QuaXNFbXB0eSgpKTsKIApAQCAtNDU4LDE5ICs0NzQsMTEgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludDIpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZShj
b25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3Ry
b2tlU3R5bGUoKSA9PSBOb1N0cm9rZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lKHBvaW50MSwgcG9pbnQyKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQogICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygp
OwogICAgIGJvb2wgaXNWZXJ0aWNhbExpbmUgPSAocG9pbnQxLngoKSArIHRoaWNrbmVzcyA9PSBw
b2ludDIueCgpKTsKICAgICBmbG9hdCBzdHJva2VXaWR0aCA9IGlzVmVydGljYWxMaW5lID8gcG9p
bnQyLnkoKSAtIHBvaW50MS55KCkgOiBwb2ludDIueCgpIC0gcG9pbnQxLngoKTsKQEAgLTUyNiwz
MSArNTM0LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBv
aW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50CiAgICAgICAgIENHQ29udGV4dFNl
dFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCB0cnVlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwogICAgIGRyYXdQ
YXRoKHBhdGgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJu
KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPmFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOwogICAgIEFmZmluZVRyYW5zZm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3Jt
KGdldFVzZXJUb0Jhc2VDVE0oY2dDb250ZXh0KSk7CiAKQEAgLTU2NSwxNiArNTU3LDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAgICAgQ0dDb250ZXh0U2V0
U3Ryb2tlUGF0dGVybihjZ0NvbnRleHQsIHBsYXRmb3JtUGF0dGVybi5nZXQoKSwgJnBhdHRlcm5B
bHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5RmlsbFBhdHRlcm4oKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5hcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBBZmZpbmVUcmFuc2Zvcm0oZ2V0VXNlclRv
QmFzZUNUTShjZ0NvbnRleHQpKTsKIApAQCAtNjE2LDE1ICs2MDAsMTAgQEAgc3RhdGljIGlubGlu
ZSBib29sIGNhbGN1bGF0ZURyYXdpbmdNb2RlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgQ0dQYXQKICAgICByZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1BhdGgocGF0aCk7CisgICAg
aWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwpAQCAtNjU0LDE2ICs2MzMsMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgfQogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKKyAgICBpZiAocGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5maWxsUGF0aChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxs
R3JhZGllbnQpIHsKQEAgLTcxOCwxNSArNjkyLDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENH
OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCkgewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIApAQCAtNzk0LDE2ICs3NjMsOCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogI2VuZGlmCiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsK
IAogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkgewpAQCAtODMzLDcgKzc5NCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
aWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pCiAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKIAot
ICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYmIGhhc0Js
dXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgLy8gRG9u
J3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3duU2hhZG93
ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSAmJiBo
YXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CiAg
ICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25TaGFkb3cp
OwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENHIHNoYWRv
d3MuCkBAIC04NDYsMjMgKzgwNywxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJl
Y3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKICAgICBDb2xvciBvbGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKIAogICAgIGlmIChvbGRG
aWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9y
KTsKIAotICAgIGJvb2wgZHJhd093blNoYWRvdyA9ICFpc0FjY2VsZXJhdGVkQ29udGV4dCgpICYm
IGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtczsg
Ly8gRG9uJ3QgdXNlIFNoYWRvd0JsdXIgZm9yIGNhbnZhcyB5ZXQuCisgICAgYm9vbCBkcmF3T3du
U2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9y
bXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdPd25T
aGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIENH
IHNoYWRvd3MuCkBAIC04ODEsMjAgKzgzNCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiAgICAgICAg
IHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29sb3Igb2xkRmlsbENvbG9y
ID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQogICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBib29sIGRyYXdPd25TaGFk
b3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFkb3dCbHVyIGZv
ciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJpbmdNb2RlKCkg
PT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYm
ICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAoZHJhd093blNo
YWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtOTI0LDE2ICs4NzIs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29ucwogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250
ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29s
b3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIFBh
dGggcGF0aDsKQEAgLTk1MSw3ICs4OTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdAogICAg
IHNldEZpbGxDb2xvcihjb2xvcik7CiAKICAgICAvLyBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgp
IGFzc3VtZXMgdGhhdCB0aGUgZWRnZXMgb2YgcmVjdCBhcmUgY2xpcHBlZCBvdXQsIHNvIHdlIG9u
bHkgY2FyZSBhYm91dCBzaGFkb3dzIGNhc3QgYXJvdW5kIGluc2lkZSB0aGUgaG9sZS4KLSAgICBi
b29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVk
U2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7CisgICAgYm9vbCBk
cmF3T3duU2hhZG93ID0gKHJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSAmJiBoYXNCbHVycmVkU2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM7CiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRy
YXdPd25TaGFkb3cpOwogICAgIGlmIChkcmF3T3duU2hhZG93KSB7CiAgICAgICAgIC8vIFR1cm4g
b2ZmIENHIHNoYWRvd3MuCkBAIC05NzAsNTIgKzkxMCwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBG
bG9hdAogICAgIHNldEZpbGxDb2xvcihvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+Y2xpcChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4
dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogICAgIG1fZGF0YS0+Y2xpcChy
ZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBPdXQocmVjdCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KICAgICAvLyBGSVhNRTogVXNpbmcgQ0dSZWN0SW5maW5pdGUg
aXMgbXVjaCBmYXN0ZXIgdGhhbiBnZXR0aW5nIHRoZSBjbGlwIGJvdW5kaW5nIGJveC4gSG93ZXZl
ciwgZHVlCiAgICAgLy8gdG8gPHJkYXI6Ly9wcm9ibGVtLzEyNTg0NDkyPiwgQ0dSZWN0SW5maW5p
dGUgY2FuJ3QgYmUgdXNlZCB3aXRoIGFuIGFjY2VsZXJhdGVkIGNvbnRleHQgdGhhdAogICAgIC8v
IGhhcyBjZXJ0YWluIHRyYW5zZm9ybXMgdGhhdCBhcmVuJ3QganVzdCBhIHRyYW5zbGF0aW9uIG9y
IGEgc2NhbGUuIEFuZCBkdWUgdG8gPHJkYXI6Ly9wcm9ibGVtLzE0NjM0NDUzPgogICAgIC8vIHdl
IGNhbm5vdCB1c2UgaXQgaW4gZm9yIGEgcHJpbnRpbmcgY29udGV4dCBlaXRoZXIuCiAgICAgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0gPSBnZXRDVE0oKTsKLSAgICBib29sIGNhblVzZUNHUmVj
dEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9ybUNvbnRleHQoKSkgIT0ga0NHQ29u
dGV4dFR5cGVQREYgJiYgKCFpc0FjY2VsZXJhdGVkQ29udGV4dCgpIHx8ICghY3RtLmIoKSAmJiAh
Y3RtLmMoKSkpOworICAgIGJvb2wgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPSBDR0NvbnRleHRHZXRU
eXBlKHBsYXRmb3JtQ29udGV4dCgpKSAhPSBrQ0dDb250ZXh0VHlwZVBERiAmJiAocmVuZGVyaW5n
TW9kZSgpID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfHwgKCFjdG0uYigpICYmICFj
dG0uYygpKSk7CiAgICAgQ0dSZWN0IHJlY3RzWzJdID0geyBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA/
IENHUmVjdEluZmluaXRlIDogQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29u
dGV4dCgpKSwgcmVjdCB9OwogICAgIENHQ29udGV4dEJlZ2luUGF0aChwbGF0Zm9ybUNvbnRleHQo
KSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdHMocGxhdGZvcm1Db250ZXh0KCksIHJlY3RzLCAyKTsK
ICAgICBDR0NvbnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5jbGlwT3V0KHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250
ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDR0NvbnRleHRBZGRSZWN0KHBs
YXRmb3JtQ29udGV4dCgpLCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250
ZXh0KCkpKTsKICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQpAQCAtMTAyMywxNiArOTM5LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKICAgICBDR0Nv
bnRleHRFT0NsaXAocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcFBhdGgocGF0aCwgY2xpcFJ1
bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgQ0dSZWN0WmVybyk7CkBAIC0xMDQ5LDIzICs5NTcs
MTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdp
bmRSdWxlIGNsaXBSdWxlKQogICAgIG1fZGF0YS0+Y2xpcChwYXRoKTsKIH0KIAotSW50UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAorSW50UmVjdCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJl
dHVybiBtX2ltcGwtPmNsaXBCb3VuZHMoKTsKLQogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0
KENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKGZsb2F0
IG9wYWNpdHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAKICAgICBzYXZlKCk7
CiAKQEAgLTEwNzUsMTIgKzk3NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRm
b3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKICAgICBtX2RhdGEtPm1fdXNlclRv
RGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDRzo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogCiAg
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRl
eHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKQEAgLTEwODgsMTEgKzk4NCw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKICAgICBy
ZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5j
eUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIGFwcGx5U2hh
ZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgQ0dGbG9hdCYgeE9mZnNldCwgQ0dGbG9hdCYgeU9mZnNldCkKIHsKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCkBAIC0xMTAwLDcgKzk5MSw3IEBAIHN0YXRpYyB2
b2lkIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3VuZElmTmVlZGVkKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwKICAgICBVTlVTRURfUEFSQU0oeE9mZnNldCk7CiAgICAgVU5VU0VEX1BB
UkFNKHlPZmZzZXQpOwogI2Vsc2UKLSAgICBpZiAoY29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQorICAgIGlmIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKENHQ29udGV4dERyYXdzV2l0
aENvcnJlY3RTaGFkb3dPZmZzZXRzKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQpAQCAtMTEy
MSwyMSArMTAxMiwyMiBAQCBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJ
Zk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsCiAjZW5kaWYKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zm
c2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgdm9pZCBzZXRDR1No
YWRvdyhjb25zdCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRT
aXplJiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3ND
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKG9mZnNldC5pc1plcm8oKSAmJiAh
Ymx1cikgeworICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dT
aXplWmVybywgMCwgMCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotICAgIAogICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBhdm9pZCB0
aGUgc2hhZG93IHNldHVwIGNvc3Qgd2hlbiB3ZSBrbm93IHdlJ2xsIHJlbmRlciB0aGUgc2hhZG93
IG91cnNlbHZlcy4KIAogICAgIENHRmxvYXQgeE9mZnNldCA9IG9mZnNldC53aWR0aCgpOwogICAg
IENHRmxvYXQgeU9mZnNldCA9IG9mZnNldC5oZWlnaHQoKTsKICAgICBDR0Zsb2F0IGJsdXJSYWRp
dXMgPSBibHVyOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7
CiAKLSAgICBpZiAoIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICBpZiAo
IWdyYXBoaWNzQ29udGV4dC5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKSB7CiAgICAgICAgIENH
QWZmaW5lVHJhbnNmb3JtIHVzZXJUb0Jhc2VDVE0gPSBnZXRVc2VyVG9CYXNlQ1RNKGNvbnRleHQp
OwogCiAgICAgICAgIENHRmxvYXQgQSA9IHVzZXJUb0Jhc2VDVE0uYSAqIHVzZXJUb0Jhc2VDVE0u
YSArIHVzZXJUb0Jhc2VDVE0uYiAqIHVzZXJUb0Jhc2VDVE0uYjsKQEAgLTExNTYsNyArMTA0OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNp
emUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgLy8gRXh0cmVtZSAiYmx1ciIgdmFsdWVz
IGNhbiBtYWtlIHRleHQgZHJhd2luZyBjcmFzaCBvciB0YWtlIGNyYXp5IGxvbmcgdGltZXMsIHNv
IGNsYW1wCiAgICAgYmx1clJhZGl1cyA9IHN0ZDo6bWluKGJsdXJSYWRpdXMsIG5hcnJvd1ByZWNp
c2lvblRvQ0dGbG9hdCgxMDAwLjApKTsKIAotICAgIGFwcGx5U2hhZG93T2Zmc2V0V29ya2Fyb3Vu
ZElmTmVlZGVkKCp0aGlzLCB4T2Zmc2V0LCB5T2Zmc2V0KTsKKyAgICBhcHBseVNoYWRvd09mZnNl
dFdvcmthcm91bmRJZk5lZWRlZChncmFwaGljc0NvbnRleHQsIHhPZmZzZXQsIHlPZmZzZXQpOwog
CiAgICAgLy8gQ2hlY2sgZm9yIGFuIGludmFsaWQgY29sb3IsIGFzIHRoaXMgbWVhbnMgdGhhdCB0
aGUgY29sb3Igd2FzIG5vdCBzZXQgZm9yIHRoZSBzaGFkb3cKICAgICAvLyBhbmQgd2Ugc2hvdWxk
IHRoZXJlZm9yZSBqdXN0IHVzZSB0aGUgZGVmYXVsdCBzaGFkb3cgY29sb3IuCkBAIC0xMTY2LDUw
ICsxMDU4LDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25z
dCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgY29uCiAgICAgICAgIENHQ29udGV4dFNl
dFNoYWRvd1dpdGhDb2xvcihjb250ZXh0LCBDR1NpemVNYWtlKHhPZmZzZXQsIHlPZmZzZXQpLCBi
bHVyUmFkaXVzLCBjYWNoZWRDR0NvbG9yKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFNldFNoYWRvd1dpdGhDb2xvcihw
bGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgMCk7Ci19CisgICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxp
bWl0KGZsb2F0IGxpbWl0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZVRoaWNrbmVzc0NoYW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250
ZXh0LCBzdGQ6Om1heChzdGF0ZS5zdHJva2VUaGlja25lc3MsIDAuZikpOwogCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICAvLyBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBzdGF0
ZS4KLSAgICAgICAgbV9pbXBsLT5zZXRNaXRlckxpbWl0KGxpbWl0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
cm9rZUNvbG9yQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29s
b3IoY29udGV4dCwgY2FjaGVkQ0dDb2xvcihzdGF0ZS5zdHJva2VDb2xvcikpOwogCi0gICAgQ0dD
b250ZXh0U2V0TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOwotfQorICAgIGlm
IChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbENvbG9yQ2hhbmdlKSkK
KyAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgc3RhdGUuZmlsbENvbG9yKTsKIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6QWxwaGFDaGFuZ2UpKQorICAgICAgICBDR0Nv
bnRleHRTZXRBbHBoYShjb250ZXh0LCBzdGF0ZS5hbHBoYSk7CiAKLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChmbGFncy5jb250YWluc0FueSh7IEdyYXBoaWNzQ29udGV4dFN0YXRlOjpDb21wb3Np
dGVPcGVyYXRpb25DaGFuZ2UsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpCbGVuZE1vZGVDaGFuZ2Ug
fSkpCisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LCBzZWxlY3RDR0JsZW5k
TW9kZShzdGF0ZS5jb21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKSk7CiAKLSAgICBD
R0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1Db250ZXh0KCksIHIpOworICAgIGlmIChmbGFncy5j
b250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6VGV4dERyYXdpbmdNb2RlQ2hhbmdlKSkKKyAg
ICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGNnVGV4dERyYXdpbmdN
b2RlKHN0YXRlLnRleHREcmF3aW5nTW9kZSkpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRBbnRpYWxpYXNDaGFuZ2UpKQorICAgICAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFzKTsK
KworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkU21v
b3RoRm9udHNDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhj
b250ZXh0LCBzdGF0ZS5zaG91bGRTbW9vdGhGb250cyk7CisKKyAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2Up
KQorICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LCBjZ0lu
dGVycG9sYXRpb25RdWFsaXR5KHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpKTsKKwor
ICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KSkKKyAgICAgICAgc2V0Q0dTaGFkb3coKnRoaXMsIHN0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0
ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRl
eHRTZXRNaXRlckxpbWl0KHBsYXRmb3JtQ29udGV4dCgpLCBsaW1pdCk7Cit9CiAKLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xlYXJSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcikKK3sKKyAgICBDR0NvbnRleHRDbGVhclJlY3QocGxhdGZvcm1D
b250ZXh0KCksIHIpOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzdHJva2VSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAobV9zdGF0ZS5zdHJva2VH
cmFkaWVudCkgewpAQCAtMTI2OSwxNiArMTE2NCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQogICAgIENH
Q29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUNh
cChMaW5lQ2FwIGNhcCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUNhcChj
YXApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChjYXApIHsKICAgICBj
YXNlIEJ1dHRDYXA6CiAgICAgICAgIENHQ29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVDYXBCdXR0KTsKQEAgLTEyOTIsMTYgKzExNzksOCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFz
aE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVEYXNoKGNvbnN0IERhc2hB
cnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRhc2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgaWYgKGRhc2hPZmZzZXQgPCAwKSB7CiAgICAgICAgIGZsb2F0IGxlbmd0aCA9
IDA7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGFzaGVzLnNpemUoKTsgKytpKQpA
QCAtMTMxMiwxNiArMTE5MSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChj
b25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAgICBDR0NvbnRleHRT
ZXRMaW5lRGFzaChwbGF0Zm9ybUNvbnRleHQoKSwgZGFzaE9mZnNldCwgZGFzaGVzLmRhdGEoKSwg
ZGFzaGVzLnNpemUoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihM
aW5lSm9pbiBqb2luKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZUpvaW4oTGluZUpv
aW4gam9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGluZUpvaW4oam9pbik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBzd2l0Y2ggKGpvaW4pIHsKICAgICBjYXNl
IE1pdGVySm9pbjoKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUpvaW4ocGxhdGZvcm1Db250ZXh0
KCksIGtDR0xpbmVKb2luTWl0ZXIpOwpAQCAtMTMzNSw5NCArMTIwNiw0MyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKICAgICB9CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGZp
bGxSdWxlKQotewotICAgIGNsaXBQYXRoKHBhdGgsIGZpbGxSdWxlKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+c2NhbGUoc2l6ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBD
R0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKICAgICBtX2RhdGEtPnNjYWxlKHNpemUpOwogICAgIG1fZGF0YS0+bV91c2VyVG9E
ZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5yb3RhdGUo
YW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Um90YXRlQ1RN
KHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7CiAgICAgbV9kYXRhLT5yb3RhdGUoYW5nbGUpOwog
ICAgIG1fZGF0YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZh
bHNlOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0
IHkpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKHBsYXRmb3JtQ29udGV4
dCgpLCB4LCB5KTsKICAgICBtX2RhdGEtPnRyYW5zbGF0ZSh4LCB5KTsKICAgICBtX2RhdGEtPm1f
dXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RN
KHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRDb25j
YXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5jb25jYXRD
VE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25U
b0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0g
ICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBDR0NvbnRleHRTZXRDVE0ocGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiAg
ICAgbV9kYXRhLT5zZXRDVE0odHJhbnNmb3JtKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNKEluY2x1ZGVEZXZpY2VTY2FsZSBpbmNsdWRlU2NhbGUp
IGNvbnN0CitBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0Q0c6OmdldENUTShJbmNsdWRl
RGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChtX2lt
cGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPmdldENUTShpbmNsdWRlU2NhbGUpOwotCiAgICAg
Ly8gVGhlIENUTSB1c3VhbGx5IGluY2x1ZGVzIHRoZSBkZXZpY2VTY2FsZUZhY3RvciBleGNlcHQg
aW4gV2ViS2l0IDEgd2hlbiB0aGUKICAgICAvLyBjb250ZW50IGlzIG5vbi1jb21wb3NpdGVkLCBz
aW5jZSB0aGUgc2NhbGUgZmFjdG9yIGlzIGludGVncmF0ZWQgYXQgYSBsb3dlcgogICAgIC8vIGxl
dmVsLiBUbyBndWFyYW50ZWUgdGhlIGRldmljZVNjYWxlIGlzIGluY2x1ZGVkLCB3ZSBjYW4gdXNl
IHRoaXMgQ0cgQVBJLgpAQCAtMTQzMiwxNCArMTI1Miw4IEBAIEFmZmluZVRyYW5zZm9ybSBHcmFw
aGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25z
dAogICAgIHJldHVybiBDR0NvbnRleHRHZXRDVE0ocGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi1G
bG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKK0Zsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHRDRzo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJv
dW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIHJlY3Q7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4g
bV9pbXBsLT5yb3VuZFRvRGV2aWNlUGl4ZWxzKHJlY3QsIHJvdW5kaW5nTW9kZSk7Ci0KICAgICAv
LyBJdCBpcyBub3QgZW5vdWdoIGp1c3QgdG8gcm91bmQgdG8gcGl4ZWxzIGluIGRldmljZSBzcGFj
ZS4gVGhlIHJvdGF0aW9uIHBhcnQgb2YgdGhlCiAgICAgLy8gYWZmaW5lIHRyYW5zZm9ybSBtYXRy
aXggdG8gZGV2aWNlIHNwYWNlIGNhbiBtZXNzIHdpdGggdGhpcyBjb252ZXJzaW9uIGlmIHdlIGhh
dmUgYQogICAgIC8vIHJvdGF0aW5nIGltYWdlIGxpa2UgdGhlIGhhbmRzIG9mIHRoZSB3b3JsZCBj
bG9jayB3aWRnZXQuIFdlIGp1c3QgbmVlZCB0aGUgc2NhbGUsIHNvCkBAIC0xNDgyLDI3ICsxMjk2
LDExIEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3Vu
ZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Ym9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUp
Ci17Ci0gICAgRGFzaEFycmF5IHdpZHRoczsKLSAgICB3aWR0aHMuYXBwZW5kKDApOwotICAgIHdp
ZHRocy5hcHBlbmQocmVjdC53aWR0aCgpKTsKLSAgICBkcmF3TGluZXNGb3JUZXh0KHJlY3QubG9j
YXRpb24oKSwgcmVjdC5oZWlnaHQoKSwgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMsIHN0
cm9rZVN0eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lc0ZvclRleHQo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5
JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0
cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmVzRm9yVGV4dChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdp
ZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUgc3Ryb2tl
U3R5bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaWYgKCF3aWR0aHMuc2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmVzRm9yVGV4dChwb2ludCwgdGhpY2tuZXNz
LCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICBDb2xvciBsb2NhbFN0cm9rZUNvbG9yKHN0cm9rZUNvbG9yKCkpOwogCiAgICAgRmxv
YXRSZWN0IGJvdW5kcyA9IGNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQoRmxvYXRSZWN0KHBvaW50LCBGbG9hdFNpemUod2lkdGhzLmxhc3QoKSwgdGhpY2tuZXNzKSks
IHByaW50aW5nLCBsb2NhbFN0cm9rZUNvbG9yKTsKQEAgLTE1NTYsMTYgKzEzNTQsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpY2tuZXNzLAogICAgICAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNvbnRl
eHQoKSwgZmlsbENvbG9yKCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9y
UmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3Jh
cGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGgg
cmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNw
bGF5IGxpc3RzLgotICAgIH0KLQogICAgIFJldGFpblB0cjxDRlVSTFJlZj4gdXJsUmVmID0gbGlu
ay5jcmVhdGVDRlVSTCgpOwogICAgIGlmICghdXJsUmVmKQogICAgICAgICByZXR1cm47CkBAIC0x
NTc5LDM2ICsxMzY5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29u
c3QgVVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogICAgIENHUERGQ29udGV4
dFNldFVSTEZvclJlY3QoY29udGV4dCwgdXJsUmVmLmdldCgpLCBDR1JlY3RBcHBseUFmZmluZVRy
YW5zZm9ybShyZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtSW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSBtb2RlKQotewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgpKTsK
LQotICAgIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25E
ZWZhdWx0OwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxp
dHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RG9Ob3RJbnRl
cnBvbGF0ZToKLSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25Ob25lOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpMb3c6Ci0gICAgICAgIHF1
YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTG93OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBv
bGF0aW9uTWVkaXVtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFs
aXR5OjpIaWdoOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkhpZ2g7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShw
bGF0Zm9ybUNvbnRleHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gU2hvdWxk
IGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KICAgICBBU1NFUlQobV9kYXRhKTsKICAgICBpZiAo
aXNMYXllckNvbnRleHQpCkBAIC0xNjE3LDEyOSArMTM3OSwyOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogICAgICAgICBt
X2RhdGEtPm1fY29udGV4dEZsYWdzICY9IH5Jc0xheWVyQ0dDb250ZXh0OwogfQogCi1ib29sIEdy
YXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29u
dGV4dENHOjppc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhICYm
IChtX2RhdGEtPm1fY29udGV4dEZsYWdzICYgSXNMYXllckNHQ29udGV4dCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0
ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
IGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmb3IgQ0EgQ29udGV4dC4KLSAgICBB
U1NFUlQobV9kYXRhKTsKICAgICBpZiAoaXNBY2NlbGVyYXRlZCkKICAgICAgICAgbV9kYXRhLT5t
X2NvbnRleHRGbGFncyB8PSBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0OwogICAgIGVsc2UKICAgICAg
ICAgbV9kYXRhLT5tX2NvbnRleHRGbGFncyAmPSB+SXNBY2NlbGVyYXRlZENHQ29udGV4dDsKIH0K
IAotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3QKLXsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBsLT5yZW5kZXJpbmdNb2RlKCkgPT0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5tX2NvbnRl
eHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2Rl
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgIAotICAgIGJvb2wgZmlsbCA9IG1vZGUuY29udGFp
bnMoVGV4dERyYXdpbmdNb2RlOjpGaWxsKTsKLSAgICBib29sIHN0cm9rZSA9IG1vZGUuY29udGFp
bnMoVGV4dERyYXdpbmdNb2RlOjpTdHJva2UpOwotICAgIGlmIChmaWxsICYmIHN0cm9rZSkKLSAg
ICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRGaWxsU3Ry
b2tlKTsKLSAgICBlbHNlIGlmIChmaWxsKQotICAgICAgICBDR0NvbnRleHRTZXRUZXh0RHJhd2lu
Z01vZGUoY29udGV4dCwga0NHVGV4dEZpbGwpOwotICAgIGVsc2UgaWYgKHN0cm9rZSkKLSAgICAg
ICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHQsIGtDR1RleHRTdHJva2UpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIHNldENHU3Ry
b2tlQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKLXsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKHBsYXRm
b3JtQ29udGV4dCgpLCBzdGQ6Om1heCh0aGlja25lc3MsIDAuZikpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR0ZpbGxDb2xvcihwbGF0Zm9ybUNv
bnRleHQoKSwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQotICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5h
YmxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3Ro
Rm9udHMoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENH
Q29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKHBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1BbHBoYShmbG9hdCBhbHBoYSkK
LXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEocGxh
dGZvcm1Db250ZXh0KCksIGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJh
dG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQorUmVuZGVyaW5nTW9kZSBHcmFwaGljc0NvbnRleHRD
Rzo6cmVuZGVyaW5nTW9kZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUocGxhdGZvcm1Db250ZXh0KCksIHNlbGVjdENHQmxlbmRN
b2RlKGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpKTsKKyAgICByZXR1cm4gbV9kYXRhLT5t
X2NvbnRleHRGbGFncyAmIElzQWNjZWxlcmF0ZWRDR0NvbnRleHQgPyBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNl
U2NhbGVGYWN0b3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjphcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjphcHBseURldmljZVNjYWxlRmFjdG9yKGRldmljZVNjYWxl
RmFjdG9yKTsKIAogICAgIC8vIENvcmVHcmFwaGljcyBleHBlY3RzIHRoZSBiYXNlIENUTSBvZiBh
IEhpRFBJIGNvbnRleHQgdG8gaGF2ZSB0aGUgc2NhbGUgZmFjdG9yIGFwcGxpZWQgdG8gaXQuCiAg
ICAgLy8gRmFpbGluZyB0byBjaGFuZ2UgdGhlIGJhc2UgbGV2ZWwgQ1RNIHdpbGwgY2F1c2UgY2Vy
dGFpbiBDRyBmZWF0dXJlcywgc3VjaCBhcyBmb2N1cyByaW5ncywKQEAgLTE3NDcsMTMgKzE0MDgs
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9y
KGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKQogICAgIENHQ29udGV4dFNldEJhc2VDVE0ocGxhdGZv
cm1Db250ZXh0KCksIENHQWZmaW5lVHJhbnNmb3JtU2NhbGUoQ0dDb250ZXh0R2V0QmFzZUNUTShw
bGF0Zm9ybUNvbnRleHQoKSksIGRldmljZVNjYWxlRmFjdG9yLCBkZXZpY2VTY2FsZUZhY3Rvcikp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpmaWxsRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQog
ICAgIC8vIENHQ29udGV4dEZpbGxFbGxpcHNlSW5SZWN0IG9ubHkgc3VwcG9ydHMgc29saWQgY29s
b3JzLgogICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJu
KSB7CiAgICAgICAgIGZpbGxFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwpAQCAtMTc2NCwxMyArMTQy
MCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgZWxsaXBzZSkKICAgICBDR0NvbnRleHRGaWxsRWxsaXBzZUluUmVjdChjb250ZXh0
LCBlbGxpcHNlKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
dHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwotCiAgICAgLy8gQ0dDb250ZXh0U3Ryb2tlRWxsaXBzZUluUmVjdCBvbmx5IHN1
cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBpZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCB8fCBt
X3N0YXRlLnN0cm9rZVBhdHRlcm4pIHsKICAgICAgICAgc3Ryb2tlRWxsaXBzZUFzUGF0aChlbGxp
cHNlKTsKQEAgLTE3ODEsMTggKzE0MzIsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiAgICAgQ0dDb250ZXh0
U3Ryb2tlRWxsaXBzZUluUmVjdChjb250ZXh0LCBlbGxpcHNlKTsKIH0KIAotYm9vbCBHcmFwaGlj
c0NvbnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0Citib29sIEdyYXBoaWNzQ29u
dGV4dENHOjpzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAogewogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBGbG9hdFJl
Y3QgcmVjdCA9IGRlc3RSZWN0OwpAQCAtMTgwMiwxNSArMTQ0OCw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFJlY3QmCiAgICAgQ0dQREZDb250ZXh0U2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnRleHQs
IG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRSZWN0KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6
YWRkRGVzdGluYXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLQogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0KICAgICBDR1BvaW50IHRyYW5zZm9y
bWVkUG9pbnQgPSBDR1BvaW50QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocG9zaXRpb24sIENHQ29udGV4
dEdldENUTShjb250ZXh0KSk7CiAgICAgQ0dQREZDb250ZXh0QWRkRGVzdGluYXRpb25BdFBvaW50
KGNvbnRleHQsIG5hbWUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgdHJhbnNmb3JtZWRQb2ludCk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaAppbmRleCAyNWEwODY2ZTJmMzg2OWUxZTdlMWY5ZTY2MjZiZWMyMDVi
YjBkYzc1Li5mOTY2ZTI3OWFiODZmNThjZmRkYWExMzE4MzM4ZDE0MGE0ZmFjYjk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmgKQEAgLTcyLDUgKzcyLDExMCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9zYXZlQW5k
UmVzdG9yZTsKIH07CiAKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENHIDog
cHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0Q0co
Q0dDb250ZXh0UmVmKTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRD
RyhIREMsIGJvb2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgor
I2VuZGlmCisKKyAgICB+R3JhcGhpY3NDb250ZXh0Q0coKTsKKworICAgIGJvb2wgaGFzUGxhdGZv
cm1Db250ZXh0KCkgY29uc3Q7CisgICAgQ0dDb250ZXh0UmVmIHBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCBzYXZlKCkgZmluYWw7CisgICAgdm9pZCByZXN0b3JlKCkg
ZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGJvcmRl
clRoaWNrbmVzcyA9IDEpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2lu
dCYsIGNvbnN0IEZsb2F0UG9pbnQmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBmaW5h
bDsKKyAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXRo
KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5h
bDsKKyAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAgIHZvaWQgZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCBmYWN0b3IpIGZpbmFsOworCisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0
IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0
IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmlu
YWw7CisgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0
aCkgZmluYWw7CisKKyAgICB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7CisgICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBz
ZSkgZmluYWw7CisKKyAgICB2b2lkIHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWw7Cisg
ICAgYm9vbCBpc0NBTGF5ZXJDb250ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsOworICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAg
IHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdpbmRSdWxlOjpFdmVuT2RkKSBmaW5hbDsKKworICAgIElu
dFJlY3QgY2xpcEJvdW5kcygpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExp
bmVDYXApIGZpbmFsOworICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxv
YXQgZGFzaE9mZnNldCkgZmluYWw7CisgICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbikgZmlu
YWw7CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5hbDsKKworICAgIHZvaWQgZHJh
d05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBzZWxmU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFsOworICAgIHZvaWQgZHJhd1BhdHRlcm4o
TmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pIGZpbmFs
OworCisgICAgdXNpbmcgR3JhcGhpY3NDb250ZXh0OjpzY2FsZTsKKyAgICB2b2lkIHNjYWxlKGNv
bnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRp
YW5zKSBmaW5hbDsKKyAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KSBmaW5hbDsK
KworICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAg
IHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworCisgICAgQWZmaW5l
VHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QgZmluYWw7CisKKyAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFsbFNpZGVzKSBmaW5hbDsK
KworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wm
LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0
b3I8RmxvYXRSZWN0PiYsIGRvdWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisjZW5k
aWYKKworICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVMaW5lcywgU3Ryb2tlU3R5bGUpIGZpbmFsOworCisgICAgdm9pZCBkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBm
aW5hbDsKKworICAgIHZvaWQgc2V0VVJMRm9yUmVjdChjb25zdCBVUkwmLCBjb25zdCBGbG9hdFJl
Y3QmKSBmaW5hbDsKKworICAgIHZvaWQgc2V0RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGREZXN0aW5hdGlv
bkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisK
KyAgICBib29sIHN1cHBvcnRzSW50ZXJuYWxMaW5rcygpIGNvbnN0IGZpbmFsOworCisgICAgdm9p
ZCB1cGRhdGVTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKSBmaW5hbDsKKworI2lmIE9TKFdJTkRPV1MpCisgICAg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZSogbV9kYXRhIHsgbnVsbHB0ciB9OworfTsKKwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKaW5kZXggNWZmY2UxMmZlYTIxOWYzMTAwYThiZWI5NjIz
MzA4MDg3OGNhN2JhNi4uNjg2NWYwYmQ0MWJiNDg0NjBkYmExZjRmNmJhNTgwNzg0Y2NhZWU2MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtODUsNyArODUsNyBAQCBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpjcmVhdGUoYwogICAgIGlmICghY2dDb250ZXh0KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0Q0c+KGNnQ29udGV4dC5nZXQoKSk7CiAKICAgICBhdXRvIGRhdGFQcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBkYXRhLCBu
dW1CeXRlcywgW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKICAgICAgICAg
ZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKaW5kZXggY2VkM2FkYmEyYjRjMTJmMGU4MjNh
MDg4ZDI1ZmMxNWFhODg5YTQyNy4uZjMzZGNlOTE2ZGViMzZlOWIyNTJhMjViODI4NGVkNWQxYThh
YjFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0
aENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cu
Y3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CkBAIC0yNDQsNyArMjQ0LDcgQEAgYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0MKICAgICBDR0Nv
bnRleHRCZWdpblBhdGgoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBw
bGF0Zm9ybVBhdGgoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNv
bnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsK
ICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAogICAgIGJvb2wgaGl0
U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBrQ0dQ
YXRoU3Ryb2tlKTsKQEAgLTMwNSw3ICszMDUsNyBAQCBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91
bmRpbmdSZWN0KGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiBzdHJvawog
ICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1QYXRoKCkpOwogCiAgICAgaWYg
KHN0cm9rZVN0eWxlQXBwbGllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRl
eHQoY29udGV4dCk7CiAgICAgICAgIHN0cm9rZVN0eWxlQXBwbGllcihncmFwaGljc0NvbnRleHQp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dHRlcm5DRy5jcHAKaW5kZXggNzZlYTlhZjRkNDIzMjQ5NDFhODk3ZmFhM2U1ZGZkYWIyM2RmODEz
NC4uMDVhMzkxNjU0MGJiNzZkYTNmMGFiYWEzMzk0ZmM4ZGQwODhjOGRhOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC0zMCw3
ICszMCw3IEBACiAjaWYgVVNFKENHKQogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CiAjaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgpA
QCAtNDMsNyArNDMsNyBAQCBzdGF0aWMgdm9pZCBwYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywg
Q0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgaWYgKCFwbGF0Zm9ybUltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5yb3Vu
ZFRvRGV2aWNlUGl4ZWxzKAorICAgIENHUmVjdCByZWN0ID0gR3JhcGhpY3NDb250ZXh0Q0coY29u
dGV4dCkucm91bmRUb0RldmljZVBpeGVscygKICAgICAgICAgRmxvYXRSZWN0KDAsIDAsIENHSW1h
Z2VHZXRXaWR0aChwbGF0Zm9ybUltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChwbGF0Zm9ybUltYWdl
KSkpOwogICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCByZWN0LCBwbGF0Zm9ybUltYWdl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0ZvbnRDYXNjYWRlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Gb250Q2FzY2FkZUNvY29hLm1tCmluZGV4IGUyOWFlY2RmYmZlNjgwMDY3ZmNiYTE5Mzlm
YWU1MWVkYzg3OTJkNGMuLmUxZTViNDQ4Y2IyNmZjN2UwMTc4YWJjYTg3YmU0MjJmYjU4MWNmNzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRD
YXNjYWRlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvRm9udENhc2NhZGVDb2NvYS5tbQpAQCAtMjMsNyArMjMsNyBAQAogI2ltcG9ydCAiY29uZmln
LmgiCiAjaW1wb3J0ICJGb250Q2FzY2FkZS5oIgogCi0jaW1wb3J0ICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3ND
b250ZXh0Q29jb2EubW0KaW5kZXggMTQyMWViOTBkN2E0OWQxZTQ4MjRiNWFjODk2ODgxM2EzMDU0
M2Y3ZC4uMzg4YWZjZDZmNDZhZmM0NTIyMWY4MDcxZDM1MDk2N2YwZTUzNTUwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3JhcGhpY3NDb250ZXh0
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvR3Jh
cGhpY3NDb250ZXh0Q29jb2EubW0KQEAgLTEwNiw0OCArMTA2LDMzIEBAIHN0YXRpYyB2b2lkIGRy
YXdGb2N1c1JpbmdUb0NvbnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1
c1JpbmdQYXRoCiAgICAgZHJhd0ZvY3VzUmluZyhjb250ZXh0LCBjb2xvcik7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQsIGZsb2F0LCBjb25z
dCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlz
TnVsbCgpKQorICAgIGlmIChwYXRoLmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0aCwg
b2Zmc2V0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBkcmF3Rm9jdXNS
aW5nVG9Db250ZXh0KHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCBjb2xv
cik7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCiAKLXN0YXRpYyBib29sIGRyYXdGb2N1c1JpbmdU
b0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1JpbmdQ
YXRoLCBkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIGJvb2wg
ZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0VGltZShDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dQYXRo
UmVmIGZvY3VzUmluZ1BhdGgsIGRvdWJsZSwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIFVO
VVNFRF9QQVJBTSh0aW1lT2Zmc2V0KTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7
CiAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBmb2N1c1JpbmdQYXRoKTsKICAgICByZXR1
cm4gZHJhd0ZvY3VzUmluZ0F0VGltZShjb250ZXh0LCBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46Om1heCgpLCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNS
aW5nKGNvbnN0IFBhdGgmIHBhdGgsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJh
dywgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0ZvY3Vz
UmluZyhjb25zdCBQYXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRy
YXcsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8
IHBhdGguaXNOdWxsKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgYW5pbWF0ZWQgZm9jdXMgcmluZyBkcmF3aW5nLgorICAgIGlmIChwYXRo
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBuZWVkc1JlZHJhdyA9IGRyYXdGb2N1
c1JpbmdUb0NvbnRleHRBdFRpbWUocGxhdGZvcm1Db250ZXh0KCksIHBhdGgucGxhdGZvcm1QYXRo
KCksIHRpbWVPZmZzZXQsIGNvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBkb3VibGUgdGltZU9mZnNl
dCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBk
b3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJiBjb2xvcikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSAvLyBGSVhNRTogaW1wbGVtZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2lu
Zy4KLSAgICAgICAgcmV0dXJuOwotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IGZv
Y3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9yIChj
b25zdCBhdXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5n
UGF0aC5nZXQoKSwgMCwgQ0dSZWN0KHJlY3QpKTsKQEAgLTE1NywxNiArMTQyLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RzLCBkb3VibGUgdGltZU8KIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3Rz
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBSZXRhaW5QdHI8Q0dNdXRhYmxl
UGF0aFJlZj4gZm9jdXNSaW5nUGF0aCA9IGFkb3B0Q0YoQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpKTsK
ICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZWN0cykKICAgICAgICAgQ0dQYXRoQWRkUmVjdChmb2N1
c1JpbmdQYXRoLmdldCgpLCAwLCBDR1JlY3RJbnNldChyZWN0LCAtb2Zmc2V0LCAtb2Zmc2V0KSk7
CkBAIC0xOTksMTEgKzE3Niw4IEBAIHN0YXRpYyBDR0NvbG9yUmVmIGNvbG9yRm9yTWFya2VyTGlu
ZVN0eWxlKERvY3VtZW50TWFya2VyTGluZVN0eWxlOjpNb2RlIHN0eWxlLCBiCiAgICAgfQogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFdlIHdhbnQgdG8gZmluZCB0
aGUgbnVtYmVyIG9mIGZ1bGwgZG90cywgc28gd2UncmUgc29sdmluZyB0aGUgZXF1YXRpb25zOgog
ICAgIC8vIGRvdERpYW1ldGVyID0gaGVpZ2h0CiAgICAgLy8gZG90RGlhbWV0ZXIgLyBkb3RHYXAg
PSAxMy4yNDcgLyA5LjQ1NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IDU4YzUxMjRkNGI2YzYxMzY0ZThkMzY5NmYzNDk1
ZmRiMjY0NTk3YTAuLmUxMzhjMzIwMWRkZTY0NTAwNWI4NmQwYTlmNjFhOGY0MGY3NDY4N2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0KQEAgLTM3MSw3ICszNzEsNyBAQCBHcmFwaGljc0NvbnRleHQmIElPU3VyZmFjZTo6ZW5z
dXJlR3JhcGhpY3NDb250ZXh0KCkKICAgICBpZiAobV9ncmFwaGljc0NvbnRleHQpCiAgICAgICAg
IHJldHVybiAqbV9ncmFwaGljc0NvbnRleHQ7CiAKLSAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihlbnN1cmVQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAg
bV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dENHPihlbnN1cmVQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgbV9ncmFwaGljc0NvbnRleHQtPnNldElzQWNjZWxlcmF0
ZWRDb250ZXh0KHRydWUpOwogCiAgICAgcmV0dXJuICptX2dyYXBoaWNzQ29udGV4dDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgKaW5kZXgg
MjBkYWVmNGJiNDFmNTA2NGYzYzFiZGEzYzJmYzM2NzMyMDA0ZjNmNy4uZDc3Zjc0MTZkZDU2NWMz
ZDNmOWI0NTU4ODYzMDhiNmEzOWI1ZWY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiVGV4
dEZsYWdzLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiAjaWYgVVNFKENPUkVfVEVY
VCkKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CkBAIC01OCw3ICs1OSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5
cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlKTsK
IAotI2lmIFVTRShDT1JFX1RFWFQpCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJ
TikKICAgICB2b2lkIHJlY29yZEJlZ2luTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYsIENHUmVjdCk7CiAgICAgdm9pZCByZWNvcmRFbmRMYXllcihDR1JlbmRlcmluZ1N0YXRl
UmVmLCBDR0dTdGF0ZVJlZik7CiAgICAgdm9pZCByZWNvcmREcmF3R2x5cGhzKENHUmVuZGVyaW5n
U3RhdGVSZWYsIENHR1N0YXRlUmVmLCBjb25zdCBDR0FmZmluZVRyYW5zZm9ybSosIGNvbnN0IENH
R2x5cGhbXSwgY29uc3QgQ0dQb2ludCBwb3NpdGlvbnNbXSwgc2l6ZV90IGNvdW50KTsKQEAgLTY4
LDcgKzY5LDkgQEAgcHVibGljOgogICAgIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbjsgfQogCiBwcml2YXRlOgotICAgIEdyYXBoaWNzQ29udGV4dCBjcmVhdGVJbnRlcm5hbENv
bnRleHQoKTsKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0oV0lOKQorICAgIFVuaXF1
ZVJlZjxHcmFwaGljc0NvbnRleHQ+IGNyZWF0ZUludGVybmFsQ29udGV4dCgpOworI2VuZGlmCiAK
ICAgICB2b2lkIHBvcHVsYXRlSW50ZXJuYWxTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0
ZSYpOwogICAgIHZvaWQgcG9wdWxhdGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKTsKQEAgLTg1LDEzICs4OCwxNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdm9p
ZCB1cGRhdGVTaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZzZXQsIGZsb2F0IHNoYWRv
d0JsdXIsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgU2hhZG93c0lnbm9yZVRyYW5zZm9ybXMp
OwogCi0jaWYgVVNFKENPUkVfVEVYVCkKKyNpZiBVU0UoQ09SRV9URVhUKSAmJiAhUExBVEZPUk0o
V0lOKQogICAgIHZvaWQgdXBkYXRlU2hhZG93KENHU3R5bGVSZWYpOwogI2VuZGlmCiAKICAgICBS
ZWNvcmRlciYgbV9vd25lcjsKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gbV9kcmF3R2x5
cGhzRGVjb25zdHJ1Y3Rpb247Ci0gICAgR3JhcGhpY3NDb250ZXh0IG1faW50ZXJuYWxDb250ZXh0
OworCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBVbmlxdWVSZWY8
R3JhcGhpY3NDb250ZXh0PiBtX2ludGVybmFsQ29udGV4dDsKKyNlbmRpZgorCiAgICAgY29uc3Qg
Rm9udCogbV9vcmlnaW5hbEZvbnQgeyBudWxscHRyIH07CiAgICAgRm9udFNtb290aGluZ01vZGUg
bV9zbW9vdGhpbmdNb2RlIHsgRm9udFNtb290aGluZ01vZGU6OkF1dG9TbW9vdGhpbmcgfTsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9vcmlnaW5hbFRleHRNYXRyaXg7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5j
cHAKaW5kZXggYzA0ODY1MmY5YjBlNjVhYjVjMmM5Y2U1OThiNTI3NzAyYzhhYTMzZC4uY2FjZjc2
NGY1ZGUyYzhjZjZkM2Y0MDAwMmZlYWY1ZTEyMTY5MWM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBo
c1JlY29yZGVyQ29yZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNvcmVUZXh0LmNw
cApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2Fz
Y2FkZS5oIgogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKIAogI2luY2x1ZGUgPENvcmVUZXh0L0NvcmVUZXh0Lmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMgQ0dFcnJvciBkcmF3SW1hZ2UoQ0dD
b250ZXh0RGVsZWdhdGVSZWYgZGVsZWdhdGUsIENHUmVuZGVyaW5nU3RhdGVSZWYgcnN0YQogICAg
IHJldHVybiBrQ0dFcnJvclN1Y2Nlc3M7CiB9CiAKLUdyYXBoaWNzQ29udGV4dCBEcmF3R2x5cGhz
UmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCitVbmlxdWVSZWY8R3JhcGhpY3NDb250
ZXh0PiBEcmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiB7CiAgICAg
YXV0byBjb250ZXh0RGVsZWdhdGUgPSBhZG9wdENGKENHQ29udGV4dERlbGVnYXRlQ3JlYXRlKHRo
aXMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNrKGNvbnRleHREZWxlZ2F0ZS5n
ZXQoKSwgZGVCZWdpbkxheWVyLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVnYXRlQ2Fs
bGJhY2s+KCZiZWdpbkxheWVyKSk7CkBAIC04NCw3ICs4NSw3IEBAIEdyYXBoaWNzQ29udGV4dCBE
cmF3R2x5cGhzUmVjb3JkZXI6OmNyZWF0ZUludGVybmFsQ29udGV4dCgpCiAgICAgQ0dDb250ZXh0
RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlRHJhd0dseXBocywg
cmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OmRyYXdHbHlwaHMpKTsKICAgICBDR0NvbnRleHREZWxlZ2F0ZVNldENhbGxiYWNr
KGNvbnRleHREZWxlZ2F0ZS5nZXQoKSwgZGVEcmF3SW1hZ2UsIHJlaW50ZXJwcmV0X2Nhc3Q8Q0dD
b250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJmRyYXdJbWFnZSkpOwogICAgIGF1dG8gY29udGV4dCA9
IGFkb3B0Q0YoQ0dDb250ZXh0Q3JlYXRlV2l0aERlbGVnYXRlKGNvbnRleHREZWxlZ2F0ZS5nZXQo
KSwga0NHQ29udGV4dFR5cGVVbmtub3duLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dChjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJl
ZjxHcmFwaGljc0NvbnRleHRDRz4oY29udGV4dC5nZXQoKSk7CiB9CiAKIERyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc1JlY29yZGVyKFJlY29yZGVyJiBvd25lciwgRHJhd0dseXBoc0RlY29u
c3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTExOSwzNCArMTIwLDMxIEBA
IHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpwb3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIGNvbnRlCiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cG9wdWxh
dGVJbnRlcm5hbENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIGNvbnRleHRTdGF0
ZSkKIHsKICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5jb2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxDb2xvcihtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmNvbG9yKTsKKyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZpbGxDb2xv
cihtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlmIChtX29yaWdp
bmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50KQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5z
ZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnQsIG1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5zZm9ybSk7CisgICAgICAgIG1f
aW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5
bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuZ3JhZGllbnRTcGFjZVRyYW5z
Zm9ybSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX29yaWdpbmFsU3RhdGUuZmlsbFN0
eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0
ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbFBhdHRlcm4oKm1fb3Jp
Z2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0RmlsbFBhdHRlcm4oKm1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybik7
CiAgICAgfQogCiAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvci5pc1Zh
bGlkKCkpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFN0cm9rZUNvbG9yKG1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5jb2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IpOwogICAgIGVs
c2UgaWYgKG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9p
bnRlcm5hbENvbnRleHQuc2V0U3Ryb2tlR3JhZGllbnQoKm1fb3JpZ2luYWxTdGF0ZS5zdHJva2VT
dHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0pOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQo
Km1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudCwgbV9vcmlnaW5hbFN0YXRlLnN0
cm9rZVN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgICAgICBpZiAo
bV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pCi0gICAgICAgICAgICBtX2ludGVy
bmFsQ29udGV4dC5zZXRTdHJva2VQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUu
cGF0dGVybik7CisgICAgICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlUGF0dGVy
bigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwogICAgIH0KIAotICAgIG1f
aW50ZXJuYWxDb250ZXh0LnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKKyAgICBtX2ludGVy
bmFsQ29udGV4dC0+c2V0Q1RNKG1fb3JpZ2luYWxTdGF0ZS5jdG0pOwogCi0gICAgbV9pbnRlcm5h
bENvbnRleHQuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5hbFN0YXRlLnNoYWRv
dy5pZ25vcmVUcmFuc2Zvcm1zKTsKLSAgICBpZiAoY29udGV4dFN0YXRlLnNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMpCi0gICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldExlZ2FjeVNoYWRvdyhtX29y
aWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBt
X29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKLSAgICBlbHNlCi0gICAgICAgIG1faW50ZXJu
YWxDb250ZXh0LnNldFNoYWRvdyhtX29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmln
aW5hbFN0YXRlLnNoYWRvdy5ibHVyLCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yKTsKKyAg
ICBtX2ludGVybmFsQ29udGV4dC0+c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9vcmlnaW5h
bFN0YXRlLnNoYWRvdy5pZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2ludGVybmFsQ29udGV4dC0+
c2V0U2hhZG93KG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cub2Zmc2V0LCBtX29yaWdpbmFsU3RhdGUu
c2hhZG93LmJsdXIsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuY29sb3IsIGNvbnRleHRTdGF0ZS5z
aGFkb3dSYWRpdXNNb2RlKTsKIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNldFRleHREcmF3aW5n
TW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKKyAgICBtX2ludGVybmFsQ29udGV4
dC0+c2V0VGV4dERyYXdpbmdNb2RlKGNvbnRleHRTdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwogfQog
CiB2b2lkIERyYXdHbHlwaHNSZWNvcmRlcjo6cHJlcGFyZUludGVybmFsQ29udGV4dChjb25zdCBG
b250JiBmb250LCBGb250U21vb3RoaW5nTW9kZSBzbW9vdGhpbmdNb2RlKQpAQCAtMzAyLDcgKzMw
MCw3IEBAIHZvaWQgRHJhd0dseXBoc1JlY29yZGVyOjpyZWNvcmREcmF3R2x5cGhzKENHUmVuZGVy
aW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmIGdzdGF0CiAgICAgICAgIHJldHVybjsKIAogI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgYXV0byB0ZXh0UG9zaXRpb24gPSBDR0NvbnRleHRHZXRUZXh0UG9z
aXRpb24obV9pbnRlcm5hbENvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpOworICAgIGF1dG8gdGV4
dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50ZXJuYWxDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQVNTRVJUKCF0ZXh0UG9zaXRpb24ueCk7CiAgICAgQVNT
RVJUKCF0ZXh0UG9zaXRpb24ueSk7CiAjZW5kaWYKQEAgLTMyMSw3ICszMTksNyBAQCB2b2lkIERy
YXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiBnc3RhdAogICAgIC8vIElmIHlvdSBzZXQgdGhlc2UgdHdvIGVxdWFsIHRvIGVh
Y2ggb3RoZXIsIGFuZCBzb2x2ZSBmb3IgWCwgeW91IGdldAogICAgIC8vIENUTSAqIGN1cnJlbnRU
ZXh0TWF0cml4ID0gQ1RNICogWCAqIG1fb3JpZ2luYWxUZXh0TWF0cml4CiAgICAgLy8gY3VycmVu
dFRleHRNYXRyaXggKiBpbnZlcnNlKG1fb3JpZ2luYWxUZXh0TWF0cml4KSA9IFgKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gY3VycmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1f
aW50ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0g
Y3VycmVudFRleHRNYXRyaXggPSBDR0NvbnRleHRHZXRUZXh0TWF0cml4KG1faW50ZXJuYWxDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bUZpeHVwOwog
ICAgIGlmIChhdXRvIGludmVydGVkT3JpZ2luYWxUZXh0TWF0cml4ID0gbV9vcmlnaW5hbFRleHRN
YXRyaXguaW52ZXJzZSgpKQogICAgICAgICBjdG1GaXh1cCA9IGN1cnJlbnRUZXh0TWF0cml4ICog
aW52ZXJ0ZWRPcmlnaW5hbFRleHRNYXRyaXgudmFsdWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcAppbmRleCA1NGQ4NTQ3MTIzZjg5NDdkNmYy
ZmFjZDdmY2E2Zjk5NTE4MWEyNjcxLi4zOTU3YzQ1NzZmZTkxMmQ2ODEwMjA3NjEwMDFjYzI0ZjY4
Njg4NjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuY3BwCkBAIC0zNCw5ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CiAKIERyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIFJl
Y29yZGVyOjpEZWxlZ2F0ZSogZGVsZWdhdGUpCi0gICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNz
Q29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVs
ZWdhdGUpOwotICAgIH0pCisgICAgOiBtX2NvbnRleHQobV9kaXNwbGF5TGlzdCwgR3JhcGhpY3ND
b250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBpbml0aWFsQ1RNLCBk
ZWxlZ2F0ZSkKIHsKIH0KIApAQCAtNDYsMTMgKzQ0LDYgQEAgdm9pZCBEcmF3aW5nQ29udGV4dDo6
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkK
ICAgICBtX3JlcGxheWVkRGlzcGxheUxpc3QucmVzZXQoKTsKIH0KIAotUmVjb3JkZXImIERyYXdp
bmdDb250ZXh0OjpyZWNvcmRlcigpCi17Ci0gICAgYXV0byogZ3JhcGhpY3NDb250ZXh0SW1wbCA9
IGNvbnRleHQoKS5pbXBsKCk7Ci0gICAgQVNTRVJUKGdyYXBoaWNzQ29udGV4dEltcGwpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxSZWNvcmRlciY+KCpncmFwaGljc0NvbnRleHRJbXBsKTsKLX0K
LQogdm9pZCBEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCkKIHsKICAgICBpZiAobV9kaXNwbGF5TGlzdC5pc0VtcHR5KCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAppbmRleCBkMzdjMDcz
NWJlYjU1NDkyZDkwZmY5ZWNlNGNhNGRiNzk5NWQ1ZjU4Li45NjU2MzYzNGQ1N2Y0MDk0YjNjMmNi
YTZmMDY3NDBmNTA2M2RkNGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQ
T1JUIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSA9IHsgfSwgUmVjb3JkZXI6OkRlbGVnYXRlKiA9IG51
bGxwdHIpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7IH0KLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWNvcmRlciYgcmVjb3JkZXIoKTsKKyAgICBSZWNvcmRlciYgcmVjb3JkZXIo
KSB7IHJldHVybiBtX2NvbnRleHQ7IH07CiAgICAgRGlzcGxheUxpc3QgdGFrZURpc3BsYXlMaXN0
KCkgeyByZXR1cm4gc3RkOjpleGNoYW5nZShtX2Rpc3BsYXlMaXN0LCB7IH0pOyB9CiAgICAgRGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAgIGNv
bnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxp
c3Q7IH0KQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0Jik7CiAKIHByb3RlY3RlZDoKLSAgICBH
cmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIFJlY29yZGVyIG1fY29udGV4dDsKICAgICBE
aXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbk1lbW9yeURp
c3BsYXlMaXN0PiBtX3JlcGxheWVkRGlzcGxheUxpc3Q7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmNw
cAppbmRleCAxYTRlYTZkZTNiNWE4Y2UzNWQ4ZTc3OWZjZWNlZmI0NmIxODJjMGEzLi5mMjIyZTIx
ODNhMzkxMDNiZDY5ODUzNDQ2NGRmM2NiMGE4ZmY5MDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0SXRlbXMuY3BwCkBAIC02MDUsMTEgKzYwNSw3IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBEcmF3RWxsaXBzZSYgaXRlbSkKIAogdm9p
ZCBEcmF3UGF0aDo6YXBwbHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAogewotI2lm
IFVTRShDRykKICAgICBjb250ZXh0LmRyYXdQYXRoKG1fcGF0aCk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShjb250ZXh0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd1BhdGgmKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdEl0ZW1zLmgKaW5kZXggMDc0MDQxZjI2YTFlOTY0ZGM0Yzc2ZjQ4MmJjNGM5OTNlODdlZTMx
NS4uZjExN2NmYTgzOTM2MDg5ZTcxZmQwNWFiNzg2NDhiZDI0OGQ1ZTc5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SXRlbXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCkBAIC0yNzksMTAgKzI3OSw2IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgc3Ryb2tlUGF0dGVybkltYWdlSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAg
ICAgUmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIGZpbGxQYXR0ZXJuSW1hZ2VJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV9maWxsUGF0dGVybi50aWxlSW1hZ2VJZGVudGlmaWVyOyB9CiAK
LSAgICBzdGF0aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFn
cyk7Ci0KLSAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpOwotCiAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUo
RW5jb2RlciYpIGNvbnN0OwogICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRp
b25hbDxTZXRTdGF0ZT4gZGVjb2RlKERlY29kZXImKTsKIApAQCAtMzM1LDkgKzMzMSw3IEBAIHZv
aWQgU2V0U3RhdGU6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICBlbmNv
ZGVyIDw8IHN0YXRlLnNoYWRvd09mZnNldDsKICAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFk
b3dCbHVyOwogICAgICAgICBlbmNvZGVyIDw8IHN0YXRlLnNoYWRvd0NvbG9yOwotI2lmIFVTRShD
RykKLSAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotI2Vu
ZGlmIC8vIFVTRShDRykKKyAgICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dSYWRpdXNNb2Rl
OwogICAgIH0KIAogICAgIGlmIChjaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkKQEAgLTQ2MywxNCArNDU3LDEyIEBAIE9wdGlv
bmFsPFNldFN0YXRlPiBTZXRTdGF0ZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAKICAgICAg
ICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dDb2xvciA9ICpzaGFkb3dDb2xvcjsKIAotI2lm
IFVTRShDRykKLSAgICAgICAgT3B0aW9uYWw8Ym9vbD4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsK
LSAgICAgICAgZGVjb2RlciA+PiBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzOwotICAgICAgICBpZiAo
IXNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCisgICAgICAgIE9wdGlvbmFsPFNoYWRvd1JhZGl1c01v
ZGU+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAgIGRlY29kZXIgPj4gc2hhZG93UmFkaXVzTW9k
ZTsKKyAgICAgICAgaWYgKCFzaGFkb3dSYWRpdXNNb2RlKQogICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgICAgICBzdGF0ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd3NVc2VMZWdh
Y3lSYWRpdXMgPSAqc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0UoQ0cpCisg
ICAgICAgIHN0YXRlQ2hhbmdlLm1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSA9IFdURk1vdmUoKnNo
YWRvd1JhZGl1c01vZGUpOwogICAgIH0KIAogICAgIGlmIChzdGF0ZUNoYW5nZS5tX2NoYW5nZUZs
YWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2Up
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKaW5kZXggNjk0NDgy
OGRmYzY0Yjg3NGI5MzdjZWVhZGYyYWVkYzJhNjczODExNS4uODJiMmM3YWI2NTEzODIxMGJmM2I2
NTRlNTkyZWQzMDcxZTRmODEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcApAQCAtMzMsMTUgKzMzLDE1IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2Ug
RGlzcGxheUxpc3QgewogCi1SZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRl
JiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBpbml0aWFsQ1RNLCBEZWxlZ2F0ZSogZGVsZWdhdGUsIERyYXdHbHlwaHNSZWNvcmRlcjo6
RHJhd0dseXBoc0RlY29uc3RydWN0aW9uIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKLSAgICA6
IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QoZGlzcGxh
eUxpc3QpCitSZWNvcmRlcjo6UmVjb3JkZXIoRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENs
aXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSwgRGVsZWdhdGUqIGRlbGVnYXRl
LCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhz
RGVjb25zdHJ1Y3Rpb24pCisgICAgOiBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQogICAgICwg
bV9kZWxlZ2F0ZShkZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQoZmFsc2UpCiAgICAgLCBtX2Ry
YXdHbHlwaHNSZWNvcmRlcigqdGhpcywgZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKQpAQCAtNTAs
OSArNTAsOCBAQCBSZWNvcmRlcjo6UmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBE
aXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdyYQogICAgIG1fc3RhdGVTdGFjay5hcHBl
bmQoeyBzdGF0ZSwgaW5pdGlhbENUTSwgaW5pdGlhbENsaXAgfSk7CiB9CiAKLVJlY29yZGVyOjpS
ZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xp
cCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKQotICAgIDogR3JhcGhpY3NDb250
ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9kaXNwbGF5TGlzdChwYXJlbnQubV9kaXNwbGF5TGlz
dCkKK1JlY29yZGVyOjpSZWNvcmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKKyAgICA6IG1fZGlzcGxheUxpc3QocGFyZW50Lm1f
ZGlzcGxheUxpc3QpCiAgICAgLCBtX2RlbGVnYXRlKHBhcmVudC5tX2RlbGVnYXRlKQogICAgICwg
bV9pc05lc3RlZCh0cnVlKQogICAgICwgbV9kcmF3R2x5cGhzUmVjb3JkZXIoKnRoaXMsIHBhcmVu
dC5tX2RyYXdHbHlwaHNSZWNvcmRlci5kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24oKSkKQEAgLTE2
NiwxMSArMTY1LDYgQEAgUmVuZGVyaW5nTW9kZSBSZWNvcmRlcjo6cmVuZGVyaW5nTW9kZSgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZGVsZWdhdGUgPyBtX2RlbGVnYXRlLT5yZW5kZXJpbmdNb2RlKCkg
OiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIFJlY29yZGVyOjpjbGVh
clNoYWRvdygpCi17Ci0gICAgYXBwZW5kPENsZWFyU2hhZG93PigpOwotfQotCiB2b2lkIFJlY29y
ZGVyOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKIHsKICAgICBhcHBlbmQ8U2V0TGluZUNh
cD4obGluZUNhcCk7CkBAIC0yMDYsNiArMjAwLDEwIEBAIHZvaWQgUmVjb3JkZXI6OmFwcGVuZERy
YXdHbHlwaHNJdGVtV2l0aENhY2hlZEZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgR2x5cGhC
CiAKIHZvaWQgUmVjb3JkZXI6OmRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFnZUJ1ZmZlciYg
aW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7CisgICAgaWYg
KCFjYW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2VCdWZmZXIpKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlQnVmZmVyKGltYWdlQnVmZmVyLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbV9kaXNwbGF5TGlzdC5jYWNoZUlt
YWdlQnVmZmVyKGltYWdlQnVmZmVyKTsKICAgICBhcHBlbmQ8RHJhd0ltYWdlQnVmZmVyPihpbWFn
ZUJ1ZmZlci5yZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIoKSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMpOwogfQpAQCAtMjcwLDcgKzI2OCw3IEBAIHZvaWQgUmVjb3JkZXI6OnNldENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBhcHBlbmQ8U2V0Q1RNPih0cmFu
c2Zvcm0pOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkKK0FmZmluZVRyYW5zZm9ybSBSZWNvcmRlcjo6Z2V0
Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBjb25zdAogewogICAgIC8v
IEZJWE1FOiBSZXNwZWN0IHRoZSBnaXZlbiB2YWx1ZSBvZiBJbmNsdWRlRGV2aWNlU2NhbGUuCiAg
ICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKQEAgLTI5OCw3ICsyOTYsNyBAQCB2b2lkIFJl
Y29yZGVyOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50MikKICAgICBhcHBlbmQ8RHJhd0xpbmU+KHBvaW50MSwgcG9pbnQyKTsKIH0KIAot
dm9pZCBSZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
ZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywg
Ym9vbCBkb3VibGVMaW5lcykKK3ZvaWQgUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0
aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKQogewogICAg
IGFwcGVuZDxEcmF3TGluZXNGb3JUZXh0PihGbG9hdFBvaW50KCksIHRvRmxvYXRTaXplKHBvaW50
KSwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVMaW5lcyk7CiB9CkBAIC0zMjgs
NiArMzI2LDE4IEBAIHZvaWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQKICAgICBhcHBlbmQ8RHJhd0ZvY3Vz
UmluZ1JlY3RzPihyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwogfQogCisjaWYgUExBVEZP
Uk0oTUFDKQordm9pZCBSZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91Ymxl
LCBib29sJiwgY29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBkb3Vi
bGUsIGJvb2wmLCBjb25zdCBDb2xvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKyNl
bmRpZgorCiB2b2lkIFJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
CiAgICAgYXBwZW5kPEZpbGxSZWN0PihyZWN0KTsKQEAgLTQ0MCwxMCArNDUwLDkgQEAgdm9pZCBS
ZWNvcmRlcjo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgd2luZFJ1bGUpCiAg
ICAgYXBwZW5kPENsaXBQYXRoPihwYXRoLCB3aW5kUnVsZSk7CiB9CiAKLUludFJlY3QgUmVjb3Jk
ZXI6OmNsaXBCb3VuZHMoKQorSW50UmVjdCBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7
Ci0gICAgV1RGTG9nQWx3YXlzKCJHZXR0aW5nIHRoZSBjbGlwIGJvdW5kcyBub3QgeWV0IHN1cHBv
cnRlZCB3aXRoIERpc3BsYXlMaXN0OjpSZWNvcmRlci4iKTsKLSAgICByZXR1cm4gSW50UmVjdCgt
MjA0OCwgLTIwNDgsIDQwOTYsIDQwOTYpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGN1
cnJlbnRTdGF0ZSgpLmNsaXBCb3VuZHMpOwogfQogCiB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QpCkBAIC00NTIsMzUgKzQ2MSwzNCBAQCB2b2lkIFJlY29yZGVyOjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdAogICAgIGFw
cGVuZDxDbGlwVG9JbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJZGVu
dGlmaWVyKCksIGRlc3RSZWN0KTsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0Nv
bW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBk
cmF3aW5nRnVuY3Rpb24pCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jl
c3VsdCBSZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgRnVuY3Rp
b248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJiBkcmF3aW5nRnVuY3Rpb24pCiB7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0IG5lc3RlZENvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
ewotICAgICAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgZGVz
dGluYXRpb24uc2l6ZSgpKTsKKyAgICBhdXRvIGluaXRpYWxDbGlwID0gRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgZGVzdGluYXRpb24uc2l6ZSgpKTsKIAotICAgICAgICAvLyBUaGUgaW5pdGlhbCBD
VE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RNLgotICAgICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1
ZGVEZXZpY2VTY2FsZSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0u
eFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Ci0gICAgICAgIGF1dG8gc2NhbGVkU2l6ZSA9
IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rvcik7Ci0gICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBpbml0aWFsQ1RNOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxl
KDEsIC0xKTsKLSAgICAgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVp
Z2h0KCkpOwotICAgICAgICBpbml0aWFsQ1RNLnNjYWxlKHNjYWxlZFNpemUgLyBkZXN0aW5hdGlv
bi5zaXplKCkpOworICAgIC8vIFRoZSBpbml0aWFsIENUTSBtYXRjaGVzIEltYWdlQnVmZmVyJ3Mg
aW5pdGlhbCBDVE0uCisgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdldENUTShHcmFw
aGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOworICAgIEZsb2F0U2l6
ZSBzY2FsZUZhY3Rvcih0cmFuc2Zvcm0ueFNjYWxlKCksIHRyYW5zZm9ybS55U2NhbGUoKSk7Cisg
ICAgYXV0byBzY2FsZWRTaXplID0gZXhwYW5kZWRJbnRTaXplKGRlc3RpbmF0aW9uLnNpemUoKSAq
IHNjYWxlRmFjdG9yKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW5pdGlhbENUTTsKKyAgICBpbml0
aWFsQ1RNLnNjYWxlKDEsIC0xKTsKKyAgICBpbml0aWFsQ1RNLnRyYW5zbGF0ZSgwLCAtc2NhbGVk
U2l6ZS5oZWlnaHQoKSk7CisgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGlu
YXRpb24uc2l6ZSgpKTsKIAotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlY29yZGVy
PihuZXcgUmVjb3JkZXIoKnRoaXMsIGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGlu
aXRpYWxDbGlwLCBpbml0aWFsQ1RNKSk7Ci0gICAgfSk7CisgICAgUmVjb3JkZXIgbmVzdGVkQ29u
dGV4dCgqdGhpcywgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIGluaXRpYWxD
VE0pOwogICAgIGFwcGVuZDxCZWdpbkNsaXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24s
IGNvbG9yU3BhY2UpOwogICAgIGRyYXdpbmdGdW5jdGlvbihuZXN0ZWRDb250ZXh0KTsKICAgICBh
cHBlbmQ8RW5kQ2xpcFRvRHJhd2luZ0NvbW1hbmRzPihkZXN0aW5hdGlvbik7Ci19CiAKLSNpZiBF
TkFCTEUoVklERU8pCi1ib29sIFJlY29yZGVyOjpjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3Qg
TWVkaWFQbGF5ZXImIHBsYXllcikgY29uc3QKLXsKLSAgICByZXR1cm4gISFwbGF5ZXIuaWRlbnRp
ZmllcigpOworICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7
CiB9CiAKKyNpZiBFTkFCTEUoVklERU8pCiB2b2lkIFJlY29yZGVyOjpwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImIHBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbikKIHsK
KyAgICBpZiAoIXBsYXllci5pZGVudGlmaWVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgQVNTRVJUKHBsYXllci5pZGVudGlmaWVyKCkpOwogICAgIGFwcGVuZDxQ
YWludEZyYW1lRm9yTWVkaWE+KHBsYXllciwgZGVzdGluYXRpb24pOwogfQpAQCAtNTE3LDcgKzUy
NSw3IEBAIEZsb2F0UmVjdCBSZWNvcmRlcjo6ZXh0ZW50RnJvbUxvY2FsQm91bmRzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKICAgICBGbG9hdFNpemUgc2hhZG93T2Zmc2V0OwogICAgIGZs
b2F0IHNoYWRvd1JhZGl1czsKICAgICBDb2xvciBzaGFkb3dDb2xvcjsKLSAgICBpZiAoZ3JhcGhp
Y3NDb250ZXh0KCkuZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dD
b2xvcikpIHsKKyAgICBpZiAoZ2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBz
aGFkb3dDb2xvcikpIHsKICAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0V4dGVudCA9IGJvdW5kczsK
ICAgICAgICAgc2hhZG93RXh0ZW50Lm1vdmUoc2hhZG93T2Zmc2V0KTsKICAgICAgICAgc2hhZG93
RXh0ZW50LmluZmxhdGUoc2hhZG93UGFpbnRpbmdFeHRlbnQoc2hhZG93UmFkaXVzKSk7CkBAIC01
NDUsMTEgKzU1Myw2IEBAIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgUmVjb3JkZXI6OmN0bSgpIGNv
bnN0CiAgICAgcmV0dXJuIGN1cnJlbnRTdGF0ZSgpLmN0bTsKIH0KIAotY29uc3QgRmxvYXRSZWN0
JiBSZWNvcmRlcjo6Y2xpcEJvdW5kcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGN1cnJlbnRTdGF0
ZSgpLmNsaXBCb3VuZHM7Ci19Ci0KIHZvaWQgUmVjb3JkZXI6OkNvbnRleHRTdGF0ZTo6dHJhbnNs
YXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7CiAgICAgY3RtLnRyYW5zbGF0ZSh4LCB5KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdFJlY29yZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oCmluZGV4IGI4NzZkNmFkYjUxNDczZjFmMzBh
YWJkYzJiYTI1YWEzYjYwMjQxOWIuLjBkODY2MWMxNzljN2NhOWM3YzlkMjFmMTk0MzQwYzk3YmI5
OTQ1ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaApAQCAtMjgsNyAr
MjgsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RE
cmF3R2x5cGhzUmVjb3JkZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIkltYWdlLmgiIC8vIEZvciBJbWFnZTo6VGlsZVJ1bGUuCiAjaW5jbHVkZSAi
VGV4dEZsYWdzLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC01MCwxMiArNTAs
MTIgQEAgc3RydWN0IEltYWdlUGFpbnRpbmdPcHRpb25zOwogCiBuYW1lc3BhY2UgRGlzcGxheUxp
c3QgewogCi1jbGFzcyBSZWNvcmRlciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKK2Ns
YXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVjb3JkZXIpOwogcHVibGlj
OgogICAgIGNsYXNzIERlbGVnYXRlOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKEdyYXBo
aWNzQ29udGV4dCYsIERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBj
b25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBEZWxl
Z2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVj
dGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uOjpEZWNv
bnN0cnVjdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgUmVjb3JkZXIoRGlzcGxheUxpc3QmLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIERlbGVnYXRlKiA9IG51bGxwdHIsIERyYXdHbHlwaHNSZWNv
cmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9uID0gRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3
R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRlY29uc3RydWN0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIH5SZWNvcmRlcigpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBnZXRQaXhlbEJ1
ZmZlcihjb25zdCBQaXhlbEJ1ZmZlckZvcm1hdCYgb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0KTsKQEAgLTc3LDE1ICs3NywyNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIERyYXdHbHlwaHNSZWNvcmRlcjsKLSAgICBSZWNvcmRlcihSZWNvcmRl
ciYgcGFyZW50LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYs
IGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5p
dGlhbENUTSk7CisgICAgUmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIGluaXRpYWxDVE0pOwogCiAgICAgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVm
ZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgLy8gRklYTUU6IE1h
eWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2FuRHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdl
QnVmZmVyJikgY29uc3Q7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29udGV4dChib29sKSBvdmVycmlkZSB7
IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCkgb3ZlcnJpZGUg
eyB9CisjZW5kaWYKKworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisgICAgdm9pZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9v
bCwgU3Ryb2tlU3R5bGUpIG92ZXJyaWRlIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAg
IHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNo
YWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIG92ZXJyaWRl
OwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNl
dCkgb3ZlcnJpZGU7CkBAIC0xMDUsNyArMTE0LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN0cm9r
ZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAKLSNpZiBVU0UoQ0cpCisjaWYgVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpCiAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKSBvdmVycmlkZTsK
ICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSBvdmVycmlkZTsKICNlbmRpZgpAQCAtMTIwLDE0
ICsxMjksMjAgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0
IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0
IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wg
ZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUp
IG92ZXJyaWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJp
ZGU7CisKICAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwg
Y29uc3QgQ29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVj
dG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYp
IG92ZXJyaWRlOwogCisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBQYXRoJiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8Rmxv
YXRSZWN0PiYsIGRvdWJsZSB0aW1lT2Zmc2V0LCBib29sJiBuZWVkc1JlZHJhdywgY29uc3QgQ29s
b3ImKSBvdmVycmlkZTsKKyNlbmRpZgorCiAgICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7CiAgICAg
dm9pZCByZXN0b3JlKCkgb3ZlcnJpZGU7CiAKQEAgLTEzNiw3ICsxNTEsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb25j
YXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDVE0o
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdl
dENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7CisgICAg
QWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2Fs
ZSkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxv
YXQgb3BhY2l0eSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92
ZXJyaWRlOwpAQCAtMTQ1LDEyICsxNjAsMTIgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsaXBPdXQo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgm
KSBvdmVycmlkZTsKICAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgb3Zl
cnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBj
bGlwQm91bmRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNv
bnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0
Jik+JiYpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3Qm
IGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKwogI2lmIEVOQUJMRShWSURFTykKICAg
ICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFpbnRGcmFtZUZvck1lZGlhKGNv
bnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKIAogICAgIHZvaWQgYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgb3ZlcnJpZGU7CkBAIC0xNzMsNyArMTg4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGF1dG8gaXRl
bSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAgIGlmIChhdXRv
IHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAgICAgICAgICAg
IGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkKICAgICAgICAgICAgICAg
ICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21Mb2NhbEJvdW5k
cygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRlbS5nbG9iYWxC
b3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0
ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBl
eHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAgICAgCiAgICAg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAgICBjb25zdCBGbG9hdFJlY3Qm
IGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250ZXh0U3RhdGUgewogICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjkyODZkMjVhMTk1MTkyMWI4NWYw
YTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAxZjMzZDJmYjIwMzFmMzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0K
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAKKyNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKICNp
bXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYvTG9jay5oPgpA
QCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+IG1ha2VTaW1w
bGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAgICAgICBSZXRhaW5QdHI8TlNC
aXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFwSW1hZ2VSZXAg
YWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZToxIHBpeGVsc0hp
Z2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBsZXNQZXJQaXhlbDo0IGhhc0Fs
cGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2Ug
Ynl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAgICAgICBHcmFwaGljc0NvbnRl
eHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEJp
dG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsK
ICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChiaXRtYXBD
b250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01ha2VSZWN0KDAs
IDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9X
ZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1ZDliM2NhNGQxY2UwZmViOWVm
Li41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1NDJjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBAIC0yNiw3ICsy
Niw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCiAKLSNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNp
bXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCiAj
aW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUxLDcgKzUxLDcgQEAgLSAodm9p
ZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1dG8gbGF5ZXIg
PSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxheWVyKChfX2Jy
aWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCByZWN0c1RvUGFpbnQgPSBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFpbnQoZ3JhcGhpY3NDb250ZXh0
LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6ZHJhd0xh
eWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSwgcmVjdHNUb1BhaW50LCBz
ZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50U25h
cHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsKTsKICAgICB9CkBA
IC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBsYXllciA9IFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9fYnJpZGdlIHZv
aWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewotICAgICAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgICAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwogICAgICAg
ICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXItPmFjY2VsZXJh
dGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWly
b09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1MWNjN2UwMWQ0NzBjNTcwZDlk
OWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQwOTJkODRiNzMyZTk4NDM5MDYzNjNlMDU2MjY3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJv
L05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29y
ZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAtPiBzdGQ6OmVu
YWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2YQogICAgIHJl
dHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OkNhaXJv
T3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWludGluZ09wZXJh
dGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQot
ICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJiBjb21tYW5kTGlzdCkK
KyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFw
cGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwogfQpAQCAtMTU0
LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0ZVN0YXRlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAogICAgIH0KIH0KIAotdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgc3Ry
dWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxM
aW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4o
cmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUp
KSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAg
ICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxSZWN0PihyZWN0
LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9yLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKQEAg
LTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8Rmls
bFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5maWxsR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3IsIGNvbXBvc2l0
ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSksIHN0YXRlLmNv
bXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEsNyBAQCB2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBy
b3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAg
ICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVkUmVjdCwgY29s
b3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0
ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBwZW5kKGNyZWF0
ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwg
Q2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7CisgICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM4Niw3ICsz
ODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNvbnN0IFBhdGgm
IHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0Nv
bnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBh
cHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3Rh
dGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQwOCw3ICs0MDMsNyBA
QCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNz
Q29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6RmlsbFNvdXJj
ZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDI4LDcgKzQy
Myw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUg
PSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9rZVJlY3Q+KHJl
Y3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICB9CiAgICAg
fTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8U3Ry
b2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAg
IH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29t
bWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwgQ2Fp
cm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMsNyArNTE4LDcgQEAgdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8mIHN0YXRlID0g
Z3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86OkZpbGxTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAgQ2Fpcm86OlNo
YWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0cjxjYWlyb19zY2FsZWRfZm9u
dF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCkBAIC01NTMsNyArNTQ4LDcg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1h
Z2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAgICAgVU5VU0VEX1BBUkFNKGlt
YWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwor
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFu
ZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkp
OwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmUKICAgICAg
ICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVD
b21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZpbGxDb2xvciwg
c3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAgLTYxMywxMSAr
NjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUoY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0
YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZT4o
cG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3Rh
dGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0KIAotdm9pZCBD
YWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
VW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5lc0ZvclRleHQg
ZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBvaW50LCBmbG9h
dCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAgICAgICB2aXJ0dWFsIH5EcmF3
TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYyOCw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFw
aGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsK
ICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2ludCwgdGhpY2tu
ZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xv
cikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPERyYXdF
bGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQgQ2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgc3RydWN0IERy
YXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxQYXRo
LCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKICAgICBz
dGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQogCi1BZmZpbmVUcmFuc2Zvcm0g
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENU
TShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMyLDcgKzEwMjMsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRS
dWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5k
cygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFzdCgpOwogICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVjdChzdGF0ZS5j
bGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlvbj4mJiBjb21t
YW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CiB9CiAKLXZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9p
ZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhNRTogTm90IGltcGxlbWVudGVk
LgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9CiAK
ICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENhaXJvT3Bl
cmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYgcGxheWVyLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVt
ZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEocGxheWVyLCBk
ZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNv
c2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYxZmY2MzY1NmFkYTQwOWYwZDVm
NTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhmZGY3YzVjMzM5OTcyNzdiYmM1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
Y2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJl
Y29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAogbmFtZXNwYWNlIE5pY29zaWEg
ewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlciBmaW5h
bCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewogcHVibGljOgotICAgIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFpbnRpbmdPcGVy
YXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09wZXJhdGlvbnMm
KTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRm
b3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogICAgIHZv
aWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRMaW5lQ2FwKFdl
YkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgV2Vi
Q29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAtNTMsNiArNTIsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29uc3Qg
V2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBm
aWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3JlOjpDb2xvciYs
IFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpIG92ZXJyaWRl
OworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
b3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6QmxlbmRNb2RlKSBv
dmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBXZWJD
b3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgV2ViQ29yZTo6
UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
ZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwogICAg
IHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2ViQ29yZTo6RGFz
aEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IFdlYkNv
cmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxlKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwogICAg
IHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAKICAgICB2
b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IFdlYkNv
cmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKICAgICB2b2lkIGNv
bmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKICAgICB2
b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlkZTsKLSAg
ICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpBZmZpbmVUcmFu
c2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwpA
QCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25zdCBXZWJDb3Jl
OjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJDb3JlOjpQYXRo
JiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgY2xp
cEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJvdW5kcygpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VC
dWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRlc3RpbmF0aW9u
LCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgV2ViQ29y
ZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZvaWQgcGFp
bnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9y
TWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdD
b250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1YjhjMWQ4N2EyYzZjMzdjY2U4
YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBjZmJkMDZhZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3Np
YVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWlyby5jcHAKQEAg
LTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIuaCIKICNpbmNs
dWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgogI2luY2x1ZGUgIk5pY29zaWFQ
YWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3ICs3MSw3IEBAIFBhaW50aW5n
Q29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmcoQnVmZmVyJiBidWZmZXIpCiAK
ICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jYWlyby5zdXJm
YWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFdlYkNvcmU6
OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQuZ2V0KCkpOwotICAgIG1fZ3Jh
cGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+KFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSgqbV9wbGF0Zm9ybUNv
bnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIFBhaW50aW5nQ29u
dGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkKQEAgLTEwNCwxMSArMTA0LDcg
QEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OnJlcGxheShjb25zdCBQ
YWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJl
Y29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRpbmdPcGVyYXRp
b25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0aW9uc10oV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0LCBwYWludGluZ09wZXJhdGlv
bnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8Q2Fp
cm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25zKTsKIH0KIAogUGFpbnRpbmdD
b250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGluZygpID0gZGVmYXVsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJmNTc1ZDUyYzhiZGJkMWNlMjgy
YjhlYmE3ZDUwYmIuLmQ5NzlmM2RmMDRiOWRlYzU5NGZlNTkzZWMxNjE3ODJhM2JhODA1NzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lmIFVTRShDRykK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIlBhdGguaCIKIApAQCAtNjcs
MzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBDR0NvbnRleHRXaXRo
SERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKLUdy
YXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitH
cmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERDIGhkYywgYm9vbCBoYXNBbHBo
YSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdpdGhIREMoaGRjLCBoYXNBbHBo
YSkuZ2V0KCkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCi17
Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9IG5ldyBHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMsIGhhc0FscGhh
KSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRhLT5tX2NnQ29udGV4
dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5bmMgd2l0
aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxDb2xvcigpKTsK
LSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKLSAgICB9CiB9
CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dzQ29udGV4dCBh
bmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3VpdGFibGUgZm9y
IGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4
dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5k
KQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRhLT5tX2hkYyB8
fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSAhZGVw
cmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVuY3lMYXllcigp
OwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsK
KyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBi
b28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IDog
a0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpKSk7Ci0gICAg
Q0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRzdFJlY3QsIGlt
YWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFByaXZhdGVDb250
ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7CiAgICAgCiAg
ICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhkYyk7CkBAIC0xMjQs
MjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXAoV2lu
ZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUoKS53aWR0aCgpLCBp
bWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVyUm93KCksIHNSR0JD
b2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxw
aGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0
KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lkdGgo
KSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAorICAgIENHQ29u
dGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9jZ0NvbnRleHQuZ2V0
KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXplKCkud2lkdGgo
KSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhlIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRleHRNYWMubW0u
CiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNwcCBhbmQgYmUg
c2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4wZjsKICAgICBvZmZz
ZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5pc1ZhbGlkKCkg
PyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEgKzE0OCw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoc3R5bGUubW9k
ZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcgJiYgc3R5bGUubW9k
ZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRleHQuZ2V0KCkpOwog
fQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29udGV4dENHOjpk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGE7Cit9
CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKaW5kZXggZjE0NDI1
NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjNjOGYxZGQxMTQ1YjIxZWM1NjFk
YWY5MGExM2UzNmNmMzdkNGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9XaW4uY3BwCkBA
IC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNs
dWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNjYsMjggKzY2LDkgQEAgc3RhdGljIGNhaXJvX3QqIGNy
ZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkKICAgICByZXR1
cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoSERDIGRj
LCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENh
aXJvKEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENhaXJvKGNy
ZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0FscGhhKSkKIHsKLSAgICBwbGF0Zm9ybUlu
aXQoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5p
dChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFkYykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY2Fpcm9fdCogY3IgPSBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERDKGRjLCBoYXNB
bHBoYSk7Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNyKSk7Ci0gICAgbV9kYXRhLT5wbGF0
Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwotICAgIG1fZGF0
YS0+bV9oZGMgPSBkYzsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmNyKCkpIHsKLSAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGggb3VyIHN0YXRl
LgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0gICAgICAgIHNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQotICAgIGlmIChjcikK
LSAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CiB9CiAjZW5kaWYKIApAQCAtMTI3LDkgKzEwOCw5
IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxl
YXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBz
dXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwg
IW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVh
dGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8fCBpc0luVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1hcCkgewotICAg
ICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4LDQgKzE1OSw5
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiB9CiAjZW5k
aWYKIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0NvbnRleHRDYWly
bzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAppbmRleCAy
OWE4MmE4OTc4MjI5YjBmNTg3M2FiZGY4MmJmYWY4MDZjZjE2NTk4Li42NWU5N2Y5NzM0NjkyMjgy
ZDI3ZmMxZWQ3ODQ4OGQxODE3M2MxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5j
cHAKQEAgLTQ3LDE3ICs0NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUdyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCitHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhkYywgYm9vbCBo
YXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7CiB9CiAKLUdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5kZXJUYXJnZXQq
KiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKK0dyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJEMURDUmVuZGVy
VGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEpCiB7CiAgICAg
Ly8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAgICBhdXRvIHRhcmdldFByb3BlcnRpZXMg
PSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCi0gICAgSFJFU1VMVCBociA9
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRlclRhcmdldCgm
dGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKKyAgICBIUkVTVUxUIGhyID0gR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5kZXJUYXJnZXQo
JnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMsICZyZWN0KTsK
QEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChIREMg
aGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRQogICAgIG1fZGF0YS0+
bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6Okdy
YXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQog
ewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVuZGVyZXJUeXBl
KTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKQor
SUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSgpCiB7
CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVsbHB0cjsKICAg
ICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODksNyBAQCBJRDJEMUZhY3Rvcnkq
IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAgcmV0dXJuIGRpcmVjdDJERmFj
dG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJl
bmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJRDJEMVJlbmRlclRhcmdldCog
ZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYgKCFkZWZhdWx0UmVuZGVyVGFy
Z2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29u
dGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIGRlZmF1bHRSZW5kZXJUYXJn
ZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERDIGhkYywgYm9v
bCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtSW5pdChI
REMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRjKQogICAgICAgICByZXR1cm47
CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0
KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRH
ZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0
Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0Zm9ybUluaXQo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKIHsKICAgICBwbGF0Zm9y
bUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1J
bml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFwbGF0Zm9ybUNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEzIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29u
dGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRlcnBvbGF0aW9u
UXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVBsYXRmb3JtQ29udGV4
dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CitQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtQ29u
dGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+
cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwogICAg
IHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIApAQCAtMTk1LDMzICsxOTIs
MjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJyZW50R2xvYmFs
QWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1Db250ZXh0KCkp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKTsKICAgICBE
aXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0bWFwPiYgaW1h
Z2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdlKE5h
dGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdOYXRp
dmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFnZVNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRl
KHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0
KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0
KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERD
IGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsK
LSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJ
blRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0gIW1fZGF0YS0+
bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVhdGVkQml0bWFw
KSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIERpcmVj
dDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRv
d3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogICAgIDo6RGVs
ZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5kb3dzQml0bWFw
KFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0bWFwKiBpbWFn
ZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJEOjpkcmF3RG90
c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKK0dyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQogICAg
IDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9yZW5kZXJlclR5
cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAg
IGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVu
ZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBvd25lZFBs
YXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGlj
c0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6IG1fb3duZWRQ
bGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAgICAgLCBtX3Bs
YXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1fcmVuZGVyZXJU
eXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVf
cHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmIChtX3JlbmRlcmVy
VHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5
cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMxMCw5ICszMDMs
OCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0
Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29saWRDb2xvckJy
dXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikK
K0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YnJ1c2hXaXRo
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhDb2xvcihjb2xv
cldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMgKzM2NCw2MCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZsb2F0IGFuZ2xl
KQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldpdGhHbG9iYWxB
bHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBjb2xvcikgY29u
c3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3NzeTxmbG9hdD4o
KTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEtPmN1cnJlbnRH
bG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0Ojpzb2xpZFN0
cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
b2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCkt
Pm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250
ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUNv
bnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhp
Y3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVzaCogR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQoKTsKIH0KIAot
SUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkgY29uc3QKK0lE
MkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJydXNoKCkgY29u
c3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZpbGxCcnVzaC5n
ZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgpCiB7CiAgICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1c2goKnBsYXRm
b3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBh
dHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd1Bh
dHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1h
Z2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBh
dHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3Jt
LmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAgRGlyZWN0MkQ6
OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1hZ2UpLCBJbnRT
aXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7
CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIu
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlz
LT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwg
c3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJEMV9TVFJPS0Vf
U1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnN0cm9rZVN0
eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0aWVzKG1fcGxh
dGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5lQ2FwLCBtX3Bs
YXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUpvaW4sIG1f
cGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NPTElELCAwLjBm
KTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9r
ZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7CiB9CiAKIC8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJva2VTdHlsZSgp
ID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0
ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xv
ciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBzZShyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZp
bGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0
ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQordm9pZCBH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRvIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsg
Ly8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU0Mywx
MSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRvcHRDT00obV9z
dGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5B
bHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlG
aWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBseUZpbGxQYXR0
ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
ICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBX
aW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFw
cGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5GaWxsQnJ1
c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4o
KnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChwYXRo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdQYXRo
KGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGly
ZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQYXRoKHBhdGgp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4
dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4
dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgoY29udGV4dCwg
cGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRo
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
ICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpw
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250ZXh0LCBwYXRo
LCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxs
UmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1
dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0
KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNv
bnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3Qo
cmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAg
YXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFJl
Y3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFkaWVu
dCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBhdXRvIGJy
dXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0
KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVCghbV9p
bXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9z
aXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21wb3NpdGVPcGVy
YXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRl
eHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJl
dmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1Db250ZXh0KCks
IHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3Vu
ZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAg
bV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9sZVJlY3QsIGNv
bG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGF1dG8mIGNv
bnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0MkQ6OkZpbGxT
b3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6
Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAg
ICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBs
YXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91
dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCBw
YXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0
MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUpOwogfQogCi1J
bnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRSZWN0IEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlw
Qm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEzLDEzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFyZW5jeUxheWVy
KGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBsYXRm
b3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIW1f
aW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3Bh
Y2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNpdHk7CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAKQEAgLTc1NCwx
MTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OmVuZFRy
YW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRm
b3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZW5k
VHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3Jh
cGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVjdDJEOjplbmRU
cmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNTRVJUKCFtX2lt
cGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2JhbEFscGhhKCk7
CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1Ry
YW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgKHZvaWQp
b2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tl
VGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNr
bmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQor
ICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkK
KyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4
dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNv
bnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAorICAgICAg
ICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2
ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0
X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsK
KyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKKyAg
ICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0
aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0U3Ry
b2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkKKyAgICAgICAg
RGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMgc2hv
dWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGltaXQo
bGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3Rh
dGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9z
b2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7ICAgIAorICAg
IH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZp
bGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNv
bG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1c2ggPSBicnVz
aFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0
KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hv
dWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290aGluZ01vZGUg
PSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDogRDJEMV9URVhU
X0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZW5k
ZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01vZGUpOworICAg
IH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJlY3QocmVjdCk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5hbHBoYSA9PSBh
bHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0KIAotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFyUmVjdCgqcGxh
dGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsKKyAgICAgICAg
RDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RF
X05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNh
c2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBxdWFsaXR5ID0g
RDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRl
OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX05FQVJFU1Rf
TkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9N
T0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRp
b25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFU
SU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRlcnBv
bGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVSUE9M
QVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1D
b250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBEaXJlY3QyRDo6
c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGVh
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpjbGVhclJlY3Qo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8mIHN0YXRlID0g
dGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgRGlyZWN0
MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3Rh
dGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBjYXAp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERp
cmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9h
dCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0TGluZURhc2go
Y29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAgICAgICAgZmxv
YXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXNoZXMuc2l6
ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKICAg
ICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkgKyBsZW5ndGg7
CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3Qy
RDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hPZmZzZXQpOwog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9pbikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBE
aXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
ZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShjb25zdCBGbG9h
dFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnNjYWxl
KCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0YS0+bV91c2Vy
VG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0Zm9ybUNvbnRl
eHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZSgqcGxhdGZv
cm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0Q1RNKHRyYW5z
Zm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29udGV4dCgpLCB0
cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNmb3Jt
S25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERp
cmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNmb3JtKTsKICAg
ICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50
aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENU
TShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5lVHJhbnNmb3Jt
IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1
ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RNKCpwbGF0Zm9y
bUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZp
Y2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91bmRpbmdNb2Rl
KQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9kZSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsKLQotICAgIGlm
IChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQaXhlbHMocmVj
dCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJp
bnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAg
IERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMuYXBw
ZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCks
IHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHls
ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlIHN0cm9r
ZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkm
IHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBTdHJva2VTdHls
ZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0KHBvaW50LCB0
aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBE
aXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBvaW50LCB0aGlj
a25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zdCBV
UkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygiR3JhcGhpY3ND
b250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdpdGggcmVjb3Jk
aW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBkaXNwbGF5IGxp
c3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0KLSAg
ICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01P
REVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQxX0lOVEVS
UE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFsaXR5
ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xB
VElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSwgcXVh
bGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJv
b2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0NB
TGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5lZWRlZC4KICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVy
Q29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5IG5vdCBuZWVk
ZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0
ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4
dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICghaGFzUGxhdGZv
cm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVybiBEaXJlY3Qy
RDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJh
d2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICAodm9pZClt
b2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBU1NFUlQo
bV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1
c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBE
aXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhp
Y2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmZp
bGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NFUlQobV9zdGF0
ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNldFN0cm9rZVRo
aWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCB8fCBt
X3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVzIGluIEQyRC4K
KyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09IGNvbG9yKTsK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkpOworICAgIERp
cmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUu
ZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0
YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwg
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4g
RDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMoKnBs
YXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxsaXBzZSgqcGxh
dGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ry
b2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUpCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUgZm9udFNtb290
aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNFRF9QQVJBTShm
b250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6ZSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4T2Zmc2V0ID0g
cG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51bUdseXBocyk7
CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhzKTsKKyAgICBW
ZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBocyk7CiAKLSAg
ICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FOVElBTElBU19N
T0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VEOwotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9u
dFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlw
aHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIuYWR2YW5jZXND
b3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2
YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAgICBtX2RhdGEt
PnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5cGhBdChpICsg
ZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2UtPndpZHRoKCk7
CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5jZS0+d2lkdGgo
KTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2YW5jZS0+aGVp
Z2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJsZSBzeW50aGV0
aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9k
ZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIERp
cmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRl
LCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0
ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhvcml6b250YWxB
ZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50ZXh0RHJhd2lu
Z01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0LCBzdGF0ZS5z
aGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGljc0NvbnRleHQ6
OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xp
cFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29s
b3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7Ci0gICAgLy8g
VGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nlc3M7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNT
RVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8IG1fc3RhdGUu
ZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIGZp
bGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJELgotICAgICAg
ICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
YnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgZWxsaXBz
ZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3RhdGUuc3Ryb2tl
Q29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250ZXh0ID0gJmdy
YXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3QgRmxv
YXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVj
dCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwg
bV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4g
RDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJl
Y3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBtX3N0YXRlLnN0
cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJE
aXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlRGly
ZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERp
cmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0OjpHcmFw
aGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0
ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAg
ICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFj
dG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0pOwotfQotCi1H
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9y
bUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX3Bs
YXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewot
ICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRl
LmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAgICwgbV9vd25l
ZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihyZW5k
ZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdy
YXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5
bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBtX3BsYXRmb3Jt
Q29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAgICBpZiAoZmxh
Z3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQotICAgICAg
ICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRT
dHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwotCi0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgewotICAgICAg
ICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgICAgIC8vIE1l
YW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAgICAgICAgICAg
IGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNl
dCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dP
ZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29tcG9zaXRlT3Bl
cmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6
OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsZWFyU2hhZG93
KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1fcGxhdGZvcm1D
b250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQot
ewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwgZGFzaGVzLCBk
YXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldExp
bmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lSm9pbiht
X3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewotICAgIERpcmVj
dDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBEaXJlY3Qy
RDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVj
dDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3Jl
YXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAgIGlmICghYnJ1
c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhHcmFkaWVu
dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBC
bGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0
KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gc3Rh
dGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0
ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3IsIGJsZW5kTW9k
ZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBjb2xv
ciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3Is
IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJh
dG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNoYWRvd1N0YXRl
KHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGlyZWN0MkQ6OmZp
bGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNoYWRvd1N0YXRl
KTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJlY3QyRDo6U3Rh
dGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVy
YXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0KLSAg
ICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQo
KSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENv
bG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZShtX3Bs
YXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNlLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsK
LSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0
MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6RmlsbFNvdXJj
ZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUp
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxp
cHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxp
bmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxpbmVX
aWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBhdXRvJiBz
dGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVBh
dGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUs
IGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJl
Y3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIERpcmVj
dDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25z
dCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUds
eXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9v
dGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAgIGlmICghZm9u
dC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8geE9m
ZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGdseXBocyhudW1H
bHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51bUdseXBocyk7
Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhudW1HbHlwaHMp
OwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAg
ICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZlci5hZHZhbmNl
cyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSArIGZyb20pOwot
ICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgpOwotICAgICAg
ICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRoKCk7Ci0gICAg
ICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhlaWdodCgpOwot
ICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNC
b2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQsIERpcmVjdDJE
OjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJEOjpTdHJva2VT
b3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0MkQ6OlNoYWRv
d1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGdseXBocywg
aG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRl
LnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZz
ZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGF1
dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJh
d05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0
KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRlLmFscGhhLCBE
aXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gaW1hZ2UucGxh
dGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9wbGF0Zm9ybUNv
bnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVzdFJlY3QsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3NpdGVPcGVyYXRv
cigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVyVGhp
Y2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGJvcmRlclRo
aWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tl
Q29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCi17Ci0g
ICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVjdDJE
OjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9r
ZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsK
LSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQs
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgc3RhdGUuc3Ry
b2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2Vy
TGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIERpcmVj
dDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRlLmZpbGxDb2xv
ciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlj
a25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd1BhdGgo
Y29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQs
IGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRo
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0o
b2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9wbGF0Zm9ybUNv
bnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cmVzdG9yZSgp
Ci17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkp
Ci17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgeCwgeSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29udGV4dCwgYW5n
bGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2FsZShtX3BsYXRm
b3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJE
Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17Ci0gICAgRGly
ZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTShtX3BsYXRmb3Jt
Q29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxl
KQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRmb3JtQ29udGV4
dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewotICAgIERpcmVj
dDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
LXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IFBh
dGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNvbnRleHQsIHBh
dGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xpcFBhdGgoY29u
c3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBQ
YXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUludFJlY3QgR3Jh
cGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICByZXR1cm4gRGly
ZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAg
IGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRleHQgPSAmZ3Jh
cGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5uYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRl
eHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpyb3VuZFRv
RGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJl
Y3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0
Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQotI2lmIEVOQUJM
RShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWludEZyYW1lRm9y
TWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5MGVlYTdiNDJm
MjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotCi1j
bGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNz
Q29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9yeShQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHcmFwaGljc0Nv
bnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5k
ZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0Nv
bnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNzQ29udGV4dElt
cGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCopOwotICAgIHZp
cnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxv
YXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVu
ZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBm
aWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlw
aEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3Vy
Y2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBkcmF3
TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oKE5h
dGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9p
bnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2lu
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50
JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29sKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0Jiwg
RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0VsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0
LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdGb2N1c1Jpbmco
Y29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3RvcmUoKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxv
YXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNm
b3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikg
b3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0NvbnRleHQ6Oklu
Y2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBv
dmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlw
T3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgm
LCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0
UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rpb248dm9pZChH
cmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZv
aWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29uc3Qg
TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQotI2VuZGlmCi0g
ICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVycmlkZTsKLQot
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBo
aWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0Zm9ybUNvbnRl
eHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250ZXh0OwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2
YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVD
VDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dy
YXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3NzVhNjJiYWVh
MjJmOTkwNjA3ZWI0Y2JkLi43N2RhZmUzMjBiYjA3MzA4OTAxMDBkN2M0YWYxMDQxNjM2OWU3MjM0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0YXRpYyB2b2lk
IGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9STShXSU4pCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyhib29sIGlu
Y2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgPSBpbmNs
dWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZEluY2x1ZGVDaGls
ZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6c2hvdWxkSW5j
bHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9zaG91bGRJ
bmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQo
KS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0NvbnRleHQ6Oldp
bmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
QEAgLTk1LDE1ICs5NSwxMyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRtYXA6On5XaW5k
b3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6V2luZG93c0Jp
dG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0IEludFNpemUm
IHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4obV9kYXRhLT5t
X2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4oZGVwcmVj
YXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgogCiBIREMgR3Jh
cGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBi
b29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIEhEQyBoZGMgPSBudWxscHRyOwotICAgIGlm
ICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEtPm1faGRjOworICAgIEhEQyBoZGMgPSBk
ZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiAgICAgLy8gRklYTUU6IFNob3VsZCBh
IGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAgICAgaWYgKCFo
ZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgaWYgKGRzdFJlY3QuaXNF
bXB0eSgpKQpAQCAtMTM1LDE3ICsxMzMsMTcgQEAgSERDIEdyYXBoaWNzQ29udGV4dDo6Z2V0V2lu
ZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGEKICAg
ICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAgICB9CiAKLSAgICBtX2RhdGEtPmZsdXNo
KCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAg
ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpoZGMoKSBjb25zdAogewotICAg
IGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7CisgICAgcmV0
dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogI2lmIFBMQVRGT1JN
KFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNTk5
YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNjNzljMGNiYzBjNDc2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5o
CkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGljc0NvbnRleHRD
RworCisjZWxpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHREaXJl
Y3QyRC5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQKKworI2VsaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENhaXJvCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXggYThlZTM1YzUy
Nzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJlMTBlYzE1MzU5
ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3Bw
CkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjCiAgICAgaWYgKCFwbGF0
Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBjb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3Jh
cGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAg
ICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVjdDJEPihwbGF0
Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0NjQxY2UyYmRm
NTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHAKQEAg
LTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQ
IGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcEluZm8uYm1CaXRzLCBibXBJbmZvLmJtV2lkdGgsIGJt
cEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVzLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGNnQ29udGV4
dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ2MoY2dDb250ZXh0LmdldCgpKTsKIAog
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwogICAgIGlmIChz
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJkZmM0ZWQ3YWYw
OTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNhaXJvV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDYWlyb1dp
bi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
bWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNs
dWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8Y2Fpcm8t
d2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9m
U2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBjYWlyb190KiB0YXJn
ZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOwogICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShp
bWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikpOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvIGdj
KHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFwSW1hZ2U6OnNp
emUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5kZXggZDk2MjAzMDBhYmNlYmE0OTRjYTY2
MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWExN2I3NzhhMjQ4MGNkZjNjMGViZmEyZDZlNzI3MWE2
MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bh
dGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNv
bnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBo
aWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAgIEdyYXBoaWNz
Q29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4
dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJELCBHcmFwaGlj
c0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogICAgIHN0
cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRfRU5BQkxFRApA
QCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoY29u
c3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAgICAgIHJldHVy
biBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNjcmF0Y2hDb250
ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHNjcmF0
Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29udGV4dDo6Qml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5
bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENvbnRleHQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNzM1OTMz
ZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0ZmIxNmNiZTJh
N2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJh
Z0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uCiAK
ICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMo
W1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXpl
OmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2UgKmltYWdlQ29weSA9IFtyZW5kZXIuZ2V0KCkgaW1h
Z2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJD
b250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4
dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVy
Q29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVNp
emUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IGFkanVzdGVkSW1hZ2VTY2FsZSwg
LWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmltYWdl
LCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2LDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQsIFVS
TCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6
OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFn
ZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9u
czpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7Ci0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQp
OworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0Nv
bnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1h
Z2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29u
dGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3QsIEZsb2F0Um91
bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6OndoaXRlKTsKQEAgLTIwNCw3ICsyMDQsNyBAQCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSwgVGV4
dEluZGljYXRvckRhdGEmIGluZGljYQogCiAgICAgYXV0byByZW5kZXJlciA9IGFkb3B0TlMoW1BB
TDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmlt
YWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6
XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAg
ICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBzaG91bGQgbm90
IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIHJl
Z3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0aWF0aW9uIGZsb3csIHdlIHVubmVjZXNzYXJpbHkg
ZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwg
aW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1hZ2VSZWYgY3Jl
YXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0gKnRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgp
OwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJl
bmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAgICAgVUlJbWFn
ZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpbJmltYWdlXShV
SUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAg
ICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0
KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQoKSk7CiAgICAg
fV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9y
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFJlY3QmIGVsZW1lbgogCiAgICAg
YXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJ
bnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAgVUlJbWFnZSAq
aW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJl
ckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29u
dGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKICAgICAgICAgY29u
dGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBj
b250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0
KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2NvYS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFt
VHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCAwOWZhZWVlZTllYWNiNTAzMmYxYTc5ZDczYmEw
MThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZkZmI0MTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRp
b01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNv
Y29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkxp
YldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIyZTdlMTkxZGFjODE2MzZkNTI5NTFkNDBkNTNiODg3
M2Y1NTA5Li5hYzZlMjQ0ZDA0MWU5ZmU2YmY2MmYxZTYxNWFmOTllNmNmMjUwMmU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAtMzIsNiArMzIs
NyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFdpbi5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5j
bHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCkBAIC0xODYsNyArMTg3LDcgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IGluTGFiZWwsIFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6U2VsZWN0T2Jq
ZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KGNvbnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250ZXh0KGNvbnRl
eHRSZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywgMC44fSwgaG93
ZXZlciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1hZ2VzIG9uIHdp
biwgc28gd2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29sb3IgPSBTUkdC
QTx1aW50OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5ZmVmN2FiNmIx
M2FmODM0NzJlNy4uMjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2ZiYWIzZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRXaW4uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25kREMuaCIKICNp
bmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQb3B1cE1lbnVX
aW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAgICAgICAgIDo6
U2VsZWN0T2JqZWN0KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAKLSAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4g
Y29udGV4dChtX0RDLmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBkYW1hZ2VSZWN0
IHRyYW5zbGF0ZWQgaW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBtZW51IGxpc3Qg
KHdoaWNoIGlzIGxpc3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQogICAgIEludFJl
Y3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNjZmEyZmI2YzA5
YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4Yzg1NDM1ZjQz
Yjc2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250ZW50ZnVsUGFp
bnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29udGVudGZ1bFBh
aW50Q2hlY2tlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM4LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpxdWFsaWZpZXNG
b3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJhbWVWaWV3LnNl
dFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5nTGF5ZXJzKTsK
ICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAKLSAgICBHcmFw
aGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRh
dGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVsbEdyYXBoaWNz
Q29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRh
dGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJhbWVWaWV3LnBh
aW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1bWVudFJlY3Qo
KSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xkRW50aXJlQ29u
dGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9i
amVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZmYjBiN2MwYi4u
MTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC02OTAsMTAg
KzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3VuZChHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNoYWRvdyA9IGJv
eFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChib3hTaGFkb3ct
PngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dlYmtpdEJveFNo
YWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRv
dy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+
Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hh
ZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBwbHlpbmdDb2xv
ckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFk
b3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9y
RmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3co
KSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQp
OwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2hvb3Nl
SW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJbWFnZSYgaW1h
Z2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpAQCAtMjQzOSwx
MCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94U2hhZG93KGNv
bnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAgICBGbG9hdFBv
aW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZpY2VQaXhlbChz
aGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRvRGV2aWNlUGl4
ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgICAgICAg
ICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dPcmlnaW4gLSBw
aXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAgICAgICAgaWYg
KHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNl
dExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0Nv
bG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldFNoYWRv
dyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9yKTsKKyAgICAg
ICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1
cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1
c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAgICAg
ICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGJveCBp
cyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dldmVyLCBkb2lu
ZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5kZXJCb3hNb2Rl
bE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBMYXlv
dXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0KTsKICAgICAg
ICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAgICAgaWYgKHNo
YWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250ZXh0LnNldExl
Z2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09m
ZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAgIGNvbnRleHQu
c2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvciwgc2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5IDogU2hhZG93
UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0V2l0aFJv
dW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9sZVJlY3QsIGZp
bGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYyMWU3NmQ2N2Nj
NjZlZTVhMjVjNzRkZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNjYzYwNTdjNmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
CkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBwaW5nU3RhY2su
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNpbmNsdWRlICJO
dWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBlcmZv
cm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCkBAIC0x
Nzg5LDcgKzE3OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlRXZlbnRSZWdp
b24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5ZXIgPSBbJl0o
R3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGljc0NvbnRleHQg
bnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQgbnVsbENv
bnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25l
KTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxFKEVESVRBQkxF
X1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1aWxkRWRpdGFi
bGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJl
YWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJvL1NoYXJlYWJs
ZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1MmEzMWYxNTU4
ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3Bw
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFnZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWly
b1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdElt
cGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQogewogICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CiAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUo
aW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250ZXh0LmdldCgp
KSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KGJpdG1hcENv
bnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVC
aXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVCaXRtYXBDRy5j
cHAKaW5kZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRhNy4uMWQwNmY0
NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhp
Y3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29udGV4dC5nZXQo
KSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShiaXRtYXBDb250
ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFyZWFibGVCaXRt
YXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UG9p
bnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcAppbmRleCAwOGY2
ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2NDc2YmQyNDhm
OTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93
aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRP
cGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGllcy5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJE
Lmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRl
eHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkpKTsKKyAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFjZUNvbnRleHQu
Z2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3Rv
cmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVD
YWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5NDI5MjRmNi4u
NGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNwcApAQCAtMzIs
NyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
QmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9V
dGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJD
YWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgQmFja2lu
Z1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1hcCwgY29uc3Qg
VXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAgIEludFBvaW50
IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5kcy5sb2NhdGlv
bigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhp
Y3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShjYWlyb0Nv
bnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0NvbnRleHQo
Y2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJveHkuZHJhd3NC
YWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVudCBwYXJ0cyBh
cyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2ggY2FzZSwgYml0
bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkgdG8gb3Zlcndy
aXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIwMjgxMjg1Y2Yw
ZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJhYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0KQEAgLTMwLDE1
ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCi0j
aW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgiCiAjaW1wb3J0
ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgogI2ltcG9ydCA8
UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvTG9j
YWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxvb3AuaD4KIAor
I2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRPcmln
aW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1hcmdpbiI7CiBO
U1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJnaW5LZXkgPSBA
IldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3IEBAIC0gKHZv
aWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2ViS2l0OjpTaGFy
ZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVlOwogCi0gICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cg
Y29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0NvbnRleHRdKTsK
ICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFnZSgpLT5kZXZp
Y2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2luKSwgYml0bWFw
LT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFj
a2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mvd2luL0JhY2tp
bmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJjM2ZmMTY0YTMz
NGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUyZDBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3Qy
RC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tpbmdTdG9yZUJh
Y2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJE
Lmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCmluZGV4
IDNjYWNiOWFlYzY0Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzExZjNlYjA4NjI5
ZjYxM2QzMWI4NDczOTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcEluZm8uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsYmFy
VGhlbWUuaD4KQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpw
YWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAgICA6OlNlbGVj
dE9iamVjdChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRl
eHQobV9EQy5nZXQoKSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJlMkQ+IGJhY2tC
dWZmZXI7IAogICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVyKDAsIF9fdXVp
ZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmYmFja0J1ZmZl
cikpOyAKQEAgLTg2Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpwYWlu
dChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7CiAgICAgcGxh
dGZvcm1Db250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRt
YXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRleHRX
aW4gY29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRl
cmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRSZWN0IHRyYW5z
bGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0NzQ0OGY1Yjk4
Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2YzVhMmNkZjZm
MGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9Q
REZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BE
RlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9y
dCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQREZDb250ZXh0
TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBERkxheWVyQ29u
dHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgogI2ltcG9ydCAi
UERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2ltcG9ydCA8V2Vi
Q29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVudC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUsOCBAQAogI2lt
cG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZFKElOQ1JFTUVO
VEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0YW5jZXR5cGUp
aW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVyOwpAQCAtMTk0
NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxheWVySW5Db250
ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2NhbERlZmF1bHRT
eXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBwZWFyYW5jZSgp
KTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAg
R3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAK
ICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODllLi5mN2JkYjk1
NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC00Miw2
ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBvcnQgPFdlYkNv
cmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2lt
cG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1M
Q29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQuaD4KICNpbXBv
cnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3IEBAIFJldGFp
blB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJlY3QgcmVjdCwg
SW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5QYWdlKHBkZkNv
bnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFw
aGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFu
c2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29v
cmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAKaW5k
ZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5NDU3Yzc0MjMy
MWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
b3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNzLmNwcApAQCAt
NDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAogI2lmIFVTRShE
SVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgog
I2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2MzUxNzQxYzVj
My4uOTY4MmYwOTNhZTBkNDRjZGVjODY5OTFjZDA0OWY3MmZiZWU3MTc4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2ICszNzIsMTEg
QEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIKICNlbmRpZgog
CisjaWYgVVNFKENHKQorLy8gRklYTUU6IE1vdmUgdGhlIENHLXNwZWNpZmljIFBERiBwYWludGlu
ZyBjb2RlIG91dCBvZiBXZWJQYWdlLmNwcC4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dENHLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01Mzc1LDcgKzUzODAsNyBAQCB2b2lk
IFdlYlBhZ2U6OmRyYXdQYWdlc1RvUERGSW1wbChGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgY29u
c3QgUHJpbnRJbmZvJiBwcmludAogICAgICAgICAgICAgICAgIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+IHBhZ2VJbmZvID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRhYmxlKDAsIDAs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKICAgICAgICAgICAgICAgICBDR1BERkNvbnRleHRCZWdpblBhZ2UoY29udGV4
dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCi0gICAgICAgICAgICAgICAgR3JhcGhpY3NDb250
ZXh0IGN0eChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRD
RyBjdHgoY29udGV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKEZsb2F0U2l6
ZSgxLCAtMSkpOwogICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLW1fcHJpbnRDb250
ZXh0LT5wYWdlUmVjdChwYWdlKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgbV9wcmludENv
bnRleHQtPnNwb29sUGFnZShjdHgsIHBhZ2UsIG1fcHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdl
KS53aWR0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCmluZGV4IGRlMWYwNmRkOGFkYThm
ZGZmYzVhMDk4NzM5YzRhZWFiOWJiMzNhODUuLjM5OWIxZTgwYTNkODRkMWQwZDMwMDk2YWM0NDY1
MGFjOThmNTgxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAtMzQsNyArMzQsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q29udGV4dENhaXJvLmg+CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBXZWJQcmludE9wZXJhdGlv
bkd0azo6cmVuZGVyUGFnZShpbnQgcGFnZU51bWJlcikKICAgICBwcmVwYXJlQ29udGV4dFRvRHJh
dygpOwogCiAgICAgZG91YmxlIHBhZ2VXaWR0aCA9IGd0a19wYWdlX3NldHVwX2dldF9wYWdlX3dp
ZHRoKG1fcGFnZVNldHVwLmdldCgpLCBHVEtfVU5JVF9JTkNIKSAqIG1feERQSTsKLSAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2NhaXJvQ29udGV4dC5nZXQoKSkpOworICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvIGdyYXBoaWNzQ29udGV4dChtX2NhaXJvQ29u
dGV4dC5nZXQoKSk7CiAgICAgbV9wcmludENvbnRleHQtPnNwb29sUGFnZShncmFwaGljc0NvbnRl
eHQsIHBhZ2VOdW1iZXIsIHBhZ2VXaWR0aCAvIG1fc2NhbGUpOwogCiAgICAgY2Fpcm9fcmVzdG9y
ZShtX2NhaXJvQ29udGV4dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCBkNTQxYzRjMDRmMmQ3NWQwNmJlZTA4MGVi
Y2ZlNjZiMGE0NWZiZWY2Li45MjhhZTdkNTFlM2YwYjdkOTEwMjBjN2RhMjg4ZWRlMjQ1YzM4NTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0
aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW0KQEAgLTM5LDcgKzM5LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KICNpbXBv
cnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0dseXBoUGFnZS5o
PgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5kb3cuaD4KICNp
bXBvcnQgPFdlYkNvcmUvUGFnZUNvbnNvbGVDbGllbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUHJp
bnRDb250ZXh0Lmg+CkBAIC0zMDUsNyArMzA1LDcgQEAgLSAodm9pZClwcmludFRvQ0dDb250ZXh0
OihDR0NvbnRleHRSZWYpY2dDb250ZXh0IHBhZ2VXaWR0aDooZmxvYXQpcGFnZVdpZHRoSW5QaXgK
ICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdy
YXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOwogICAgIFByaW50Q29udGV4dDo6c3Bvb2xBbGxQYWdl
c1dpdGhCb3VuZGFyaWVzKCpjb3JlRnJhbWUsIGdyYXBoaWNzQ29udGV4dCwgRmxvYXRTaXplKHBh
Z2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMubW0KaW5kZXgg
MmJhMDA2ZGQzZTdiMmFmYzUwZWZmMjg0NTMyMGQ5NjUwNWJhNzFiYS4uNzgzMjU2MTljMWFjNzc0
NGU4OGZkNDkyNTM2Yzk1N2EwNDI0NGY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCkBAIC0zMCw3ICszMCw3IEBACiAK
ICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm9udENhc2Nh
ZGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvYWRlck5TVVJMRXh0
cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+CkBAIC03OCw3ICs3OCw3IEBAIC0gKHZvaWQpX3dlYl9kcmF3QXRQ
b2ludDooTlNQb2ludClwb2ludCBmb250OihOU0ZvbnQgKilmb250IHRleHRDb2xvcjooTlNDb2xv
ciAqCiAKICAgICAgICAgTlNHcmFwaGljc0NvbnRleHQgKm5zQ29udGV4dCA9IFtOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF07CiAgICAgICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQg
PSBbbnNDb250ZXh0IENHQ29udGV4dF07Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhp
Y3NDb250ZXh0IHsgY2dDb250ZXh0IH07CiAKICAgICAgICAgLy8gV2ViQ29yZSByZXF1aXJlcyBh
IGZsaXBwZWQgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgYm9vbCBmbGlwcGVkID0gW25zQ29u
dGV4dCBpc0ZsaXBwZWRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
SW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCmluZGV4IGQzOTczZTI5NDQ1
OWVjZjFkYmRlZjQ0OWVmMmNmZDJjYWNiOGVkMzUuLjk1MGFlOGUwMGQzMGE0NTIwOWY5YWRkYTNj
MmIzM2YxMzEwMDIyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYklu
c3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KQEAgLTI5LDcgKzI5LDcg
QEAKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHRWaWV3LmgiCiAjaW1wb3J0ICJXZWJOb2RlSGln
aGxpZ2h0LmgiCiAKLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1wb3J0
IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTk4LDcgKzk4
LDcgQEAgLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKIAogICAgICAgICBBU1NFUlQoW1tO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CiAKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gQ0dDb250ZXh0XSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRleHQoW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAgICAgIFtfd2Vi
Tm9kZUhpZ2hsaWdodCBpbnNwZWN0b3JDb250cm9sbGVyXS0+ZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKICAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBm
MzVkN2JkNWEyMzUxYjJiMDFiNjhiYjFlMjE2Zjc0NTdlNDE4YTcxLi45NWJkYTM5MGNhNjliYTZi
OTYyMGY1MWJlZTY5NmIyMTIzOWFiMTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KQEAgLTgxLDcgKzgxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWVMb2FkZXJTdGF0ZU1hY2hpbmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2lt
cG9ydCA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CkBAIC02MTMsNyAr
NjEzLDcgQEAgLSAodm9pZClfZHJhd1JlY3Q6KE5TUmVjdClyZWN0IGNvbnRlbnRzT25seTooQk9P
TCljb250ZW50c09ubHkKICNlbHNlCiAgICAgQ0dDb250ZXh0UmVmIGN0eCA9IFdLR2V0Q3VycmVu
dEdyYXBoaWNzQ29udGV4dCgpOwogI2VuZGlmCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
IGNvbnRleHQoY3R4KTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KGN0
eCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFt
ZSA9IGNvcmUoc2VsZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9GdWxs
c2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxz
Y3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCmluZGV4IDUxOWE1NzM2ZDJhMzUwZDcyNzg2NzY1ZmIx
OGZjZjMzOWM1ZWM2OGUuLmFkNjYwN2U0NTEwZTU5ZjUxOGZlZWYxZDhjYzYzNjU2YTg0ZWQ0NDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3JlZW5WaWRlb0Nv
bnRyb2xsZXIuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Gb250Q2Fz
Y2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udFNlbGVjdG9yLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Q
YWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0UnVuLmg+CkBAIC00OTAsNyArNDkxLDcgQEAg
dm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpkcmF3KCkKICAgICBhdXRvIGJpdG1hcERD
ID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoSFduZERDKG1faHVkV2luZG93
KSkpOwogICAgIEhHRElPQkogb2xkQml0bWFwID0gU2VsZWN0T2JqZWN0KGJpdG1hcERDLmdldCgp
LCBtX2JpdG1hcC5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChiaXRtYXBE
Qy5nZXQoKSwgdHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQoYml0bWFwREMu
Z2V0KCksIHRydWUpOwogCiAgICAgY29udGV4dC5zYXZlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYkZyYW1lLmNwcAppbmRleCAyZjUxMTAzMTM2MTk0NTdjZGFjM2IzMWNhNWJkNTM3NmFiY2Iy
MTc3Li44ZGE5MTk0ODNiMGRhYTcxMGQ2MjM2MmU5YjNhMDQ2OWQ1MDJiZGNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9GcmFtZVdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0RJT2JqZWN0Q291bnRlci5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0NvbnRleHRXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CkBAIC0zMjEsNyArMzIyLDcgQEAgSFJF
U1VMVCBXZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQoUkVDVCByZWN0LCBfSW5f
IEhEQyBkZXZpY2VDb250ZXh0KQogICAgIC8vIFdlIGNhbid0IHBhaW50IHdpdGggYSBsYXlvdXQg
c3RpbGwgcGVuZGluZy4KICAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVj
dXJzaXZlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoZGV2aWNlQ29udGV4dCk7CisgICAg
R3JhcGhpY3NDb250ZXh0V2luIGdjKGRldmljZUNvbnRleHQpOwogICAgIGdjLnNldFNob3VsZElu
Y2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAgICAgZ2Muc2F2ZSgpOwogICAgIExPTkcgd2lkdGgg
PSByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwpAQCAtMzUyLDcgKzM1Myw3IEBAIEhSRVNVTFQgV2Vi
RnJhbWU6OnBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KFJFQ1QgcmVjdCwgUE9J
TlQgcHQsIF9Jbl8KICAgICAvLyBXZSBjYW4ndCBwYWludCB3aXRoIGEgbGF5b3V0IHN0aWxsIHBl
bmRpbmcuCiAgICAgdmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgp
OwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGRldmljZUNvbnRleHQpOworICAgIEdyYXBoaWNz
Q29udGV4dFdpbiBnYyhkZXZpY2VDb250ZXh0KTsKICAgICBnYy5zZXRTaG91bGRJbmNsdWRlQ2hp
bGRXaW5kb3dzKHRydWUpOwogICAgIGdjLnNhdmUoKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdChy
ZWN0KTsKQEAgLTE4MDgsNyArMTgwOSw3IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnNwb29sUGFnZXMo
SERDIHByaW50REMsIFVJTlQgc3RhcnRQYWdlLCBVSU5UIGVuZFBhZ2UsIHZvaWQqIGN0CiAgICAg
ZmxvYXQgaGVhZGVySGVpZ2h0ID0gMCwgZm9vdGVySGVpZ2h0ID0gMDsKICAgICBoZWFkZXJBbmRG
b290ZXJIZWlnaHRzKCZoZWFkZXJIZWlnaHQsICZmb290ZXJIZWlnaHQpOwogI2lmIFVTRShDRykg
fHwgVVNFKENBSVJPKQotICAgIEdyYXBoaWNzQ29udGV4dCBzcG9vbEN0eChwY3R4KTsKKyAgICBH
cmFwaGljc0NvbnRleHRXaW4gc3Bvb2xDdHgocGN0eCk7CiAgICAgc3Bvb2xDdHguc2V0U2hvdWxk
SW5jbHVkZUNoaWxkV2luZG93cyh0cnVlKTsKIAogICAgIGZvciAoVUlOVCBpaSA9IHN0YXJ0UGFn
ZTsgaWkgPCBlbmRQYWdlOyBpaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2Rl
SGlnaGxpZ2h0LmNwcAppbmRleCAwN2EyZjYwNGYzOTdhMmE1OGIyZDc3NTFjNDRlYTkyMTk0MzE4
NzMwLi40OGU5ZDFhOGQ3NjY3MjViNTc5YzM0MTFjM2VjZDQ1YjZkYmY0Y2Y5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcApAQCAtMzIsNiArMzIsNyBA
QAogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1BhZ2UuaD4KQEAgLTE1Nyw3ICsxNTgsNyBAQCB2b2lkIFdlYk5vZGVIaWdobGlnaHQ6OnVw
ZGF0ZSgpCiAKICAgICA6OlNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0KCkpOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoaGRjLmdldCgpKTsKKyAgICBHcmFwaGljc0NvbnRl
eHRXaW4gY29udGV4dChoZGMuZ2V0KCkpOwogICAgIGNvbnRleHQuc2NhbGUobV9pbnNwZWN0ZWRX
ZWJWaWV3LT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIG1faW5zcGVjdGVkV2Vi
Vmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hsaWdodChjb250ZXh0
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBjMTFhYzlkOTdkYmFmZTJh
M2YyODQ3N2NjZTA0NDFkOWI5NzcwMzYwLi43ZTE3ZjcxZDE0MmMxNmRhNTNmZTcyNjZmNDRjODg5
Y2Q0MzgyZTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtMTE2LDYgKzEx
Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxWaWRl
b0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgpAQCAtMTI1MCw3ICsxMjUx
LDcgQEAgdm9pZCBXZWJWaWV3OjpwYWludFdpdGhEaXJlY3QyRCgpCiAKICAgICBSRUNUIGNsaWVu
dFJlY3QgPSB7fTsKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBwbGF0Zm9ybUNvbnRleHQo
bV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBnYygmcGxhdGZvcm1D
b250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVN
ZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYygmcGxhdGZvcm1Db250ZXh0LCBHcmFw
aGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogCiAg
ICAgewogICAgICAgICBtX3JlbmRlclRhcmdldC0+U2V0VGFncyhXRUJLSVRfRFJBV0lORywgX19M
SU5FX18pOwpAQCAtMTQwNyw3ICsxNDA4LDcgQEAgdm9pZCBXZWJWaWV3OjpwYWludEludG9CYWNr
aW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEhEQyBiaXRtYXBEQywgY29uc3QgSW4KICAg
ICBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAjZW5kaWYKIAotICAgIEdy
YXBoaWNzQ29udGV4dCBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CisgICAgR3JhcGhpY3ND
b250ZXh0V2luIGdjKGJpdG1hcERDLCBtX3RyYW5zcGFyZW50KTsKICAgICBnYy5zZXRTaG91bGRJ
bmNsdWRlQ2hpbGRXaW5kb3dzKHdpbmRvd3NUb1BhaW50ID09IFBhaW50V2ViVmlld0FuZENoaWxk
cmVuKTsKICAgICBnYy5zYXZlKCk7CiAgICAgaWYgKG1fdHJhbnNwYXJlbnQpCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2EwOGE0NDRjMTg4NzEz
N2EwOGZjYTc1MWVhMmNkNmQ5YzUxNzhlOS4uNDIxZGE5ZjUzMjgxZWUyZWFkZDI5MjY5NzczMzIw
ZWJhNmFjNTUyNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA1LTI1ICBUaW0gSG9ydG9uICA8dGltb3RoeV9o
b3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYxNzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDUtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFN3aXRjaCBmcm9tIFdURjo6T3B0aW9uYWwgdG8gc3RkOjpv
cHRpb25hbApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2Nn
L0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcAppbmRleCA4N2EzNmFjZmU2YTEwMGNjMzIzZTI0
ODk3ZmNlMzgwM2YyMzRhNzc4Li5hNTk4ZDU0YTI3NTI5NThjNDJlNGUyYjc5ZTUzMzdjNTdiMTc0
YjQ2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlz
cGxheUxpc3RUZXN0c0NHLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxp
c3RSZXBsYXllci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhZGllbnQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAKIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDksNyArNTAsNyBAQCBURVNUKERpc3BsYXlM
aXN0VGVzdHMsIFJlcGxheVdpdGhNaXNzaW5nUmVzb3VyY2UpCiAKICAgICBhdXRvIGNvbG9yU3Bh
Y2UgPSBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IoKTsKICAgICBhdXRvIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRleHRXaWR0aCwgY29u
dGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5wbGF0Zm9ybUNvbG9y
U3BhY2UoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3ND
b250ZXh0IGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRD
RyBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CiAKICAgICBhdXRvIGltYWdlQnVmZmVySWRl
bnRpZmllciA9IFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKIApAQCAt
MTEzLDcgKzExNCw3IEBAIFRFU1QoRGlzcGxheUxpc3RUZXN0cywgT3V0T2ZMaW5lSXRlbURlY29k
aW5nRmFpbHVyZSkKIAogICAgIGF1dG8gY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNl
Q3JlYXRlV2l0aE5hbWUoa0NHQ29sb3JTcGFjZVNSR0IpKTsKICAgICBhdXRvIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG51bGxwdHIsIGNvbnRleHRXaWR0aCwgY29u
dGV4dEhlaWdodCwgOCwgNCAqIGNvbnRleHRXaWR0aCwgY29sb3JTcGFjZS5nZXQoKSwga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQg
eyBjZ0NvbnRleHQuZ2V0KCkgfTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0IHsgY2dD
b250ZXh0LmdldCgpIH07CiAKICAgICBEaXNwbGF5TGlzdCBvcmlnaW5hbExpc3Q7CiAgICAgV3Jp
dGluZ0NsaWVudCB3cml0ZXI7CkBAIC0xNDQsNyArMTQ1LDcgQEAgVEVTVChEaXNwbGF5TGlzdFRl
c3RzLCBJbmxpbmVJdGVtVmFsaWRhdGlvbkZhaWx1cmUpCiAKICAgICBhdXRvIGNvbG9yU3BhY2Ug
PSBhZG9wdENGKENHQ29sb3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7
CiAgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxs
cHRyLCBjb250ZXh0V2lkdGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNv
bG9yU3BhY2UuZ2V0KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0byBydW5UZXN0
V2l0aEludmFsaWRJZGVudGlmaWVyID0gWyZdKEZsdXNoSWRlbnRpZmllciBpZGVudGlmaWVyKSB7
CiAgICAgICAgIEVYUEVDVF9GQUxTRShpZGVudGlmaWVyLmlzVmFsaWQoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429698</attachid>
            <date>2021-05-25 15:17:59 -0700</date>
            <delta_ts>2021-05-25 17:01:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226170-20210525151758.patch</filename>
            <type>text/plain</type>
            <size>432740</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MDM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjVmNDJkMWM1OWUwNWM4
MmEzYWIxNGZkZDBlOGQ3M2Y0OWFhMzVkNS4uMjYzYzAwM2FiNzNiOWQyNzA0NDNhMWVlNTk4NjY2
ZTM1MTIzNmM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxNSBAQAorMjAyMS0wNS0yNSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXpl
IEdyYXBoaWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgIEluIHBy
ZXBhcmF0aW9uIGZvciBmdXR1cmUgcGF0Y2hlcyB3aGljaCBpbnRyb2R1Y2UgbmV3IGtpbmRzIG9m
IEdyYXBoaWNzQ29udGV4dHMsCisgICAgICAgIHZpcnR1YWxpemUgR3JhcGhpY3NDb250ZXh0LCBt
b3ZpbmcgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25zIGludG8gc3ViY2xhc3NlcworICAgICAgICBH
cmFwaGljc0NvbnRleHR7Q0csQ2Fpcm8sRGlyZWN0MkR9LCBOdWxsR3JhcGhpY3NDb250ZXh0LCBE
aXNwbGF5TGlzdDo6UmVjb3JkZXIsCisgICAgICAgIGFuZCBOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dEltcGwgZGlzc29sdmVzIGF3YXk7
IHBsYXRmb3JtIGNvbnRleHRzIHRoYXQgd2VyZQorICAgICAgICB1bm5lY2Vzc2FyaWx5IGltcGxl
bWVudGVkIGJvdGggYXMgYEdyYXBoaWNzQ29udGV4dGAgYW5kIGFzIGEgc3ViY2xhc3MKKyAgICAg
ICAgb2YgR3JhcGhpY3NDb250ZXh0SW1wbCAoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvIGFuZCBH
cmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQpCisgICAgICAgIGFyZSBmb2xkZWQgaW50byB0aGVp
ciBHcmFwaGljc0NvbnRleHQgc3ViY2xhc3MuCisKKyAgICAgICAgYHBhaW50aW5nRGlzYWJsZWQo
KWAgaXMgbm8gbG9uZ2VyIHJlbGV2YW50IGluIEdyYXBoaWNzQ29udGV4dCBpbXBsZW1lbnRhdGlv
bnMsCisgICAgICAgIHNvIHdlIG5vIGxvbmdlciBoYXZlIHRvIGNoZWNrIGl0IGV2ZXJ5d2hlcmU7
IE51bGxHcmFwaGljc0NvbnRleHQgb3ZlcnJpZGVzCisgICAgICAgIGV2ZXJ5dGhpbmcgd2l0aCBh
biBlbXB0eSBpbXBsZW1lbnRhdGlvbi4gV2Uga2VlcCBgcGFpbnRpbmdEaXNhYmxlZCgpYCBmb3IK
KyAgICAgICAgdXNlIGluIGNvZGUgb3V0c2lkZSBvZiBHcmFwaGljc0NvbnRleHQsIHdoZXJlIGl0
IGp1c3QgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuCisgICAgICAgIE51bGxHcmFwaGljc0NvbnRleHQg
YW5kIHRoZSBvdGhlcnMuCisKKyAgICAgICAgQWxzbywgYSBmZXcgYml0cyBvZiBjbGVhbnVwIHRv
IG1ha2UgdGhpcyBlYXNpZXI6CisKKyAgICAgICAgLSBMZWdhY3kgc2hhZG93IHJhZGl1cyBiZWhh
dmlvciBiZWNvbWVzIGEgcGFyYW1ldGVyIHRvIHNldFNoYWRvdyBpbnN0ZWFkIG9mIGEgc2VwYXJh
dGUgbWV0aG9kLgorICAgICAgICAtIGNhbnZhc0NsaXAoKSwgd2hpY2ggaGFzbid0IGRvbmUgYW55
dGhpbmcgZGlmZmVyZW50IHRoYW4gY2xpcCgpIHNpbmNlIFNraWEsIGlzIHJlbW92ZWQuCisgICAg
ICAgIC0gR3JhcGhpY3NDb250ZXh0IGdhaW5zIHJlbmRlcmluZ01vZGUoKSBpbiBwbGFjZSBvZiBp
c0FjY2VsZXJhdGVkQ29udGV4dCgpLgorICAgICAgICAtIFN1YmNsYXNzZXMgb3ZlcnJpZGUgdXBk
YXRlU3RhdGUoKSB0byByZXNwb25kIHRvIEdyYXBoaWNzQ29udGV4dCBzdGF0ZSBjaGFuZ2VzLAor
ICAgICAgICAgIGFzIHdhcyBhbHJlYWR5IGRvbmUgZm9yIEdyYXBoaWNzQ29udGV4dEltcGwsIHRv
IGtlZXAgc3ViY2xhc3Npbmcgc2ltcGxlLgorICAgICAgICAtIGJ1aWxkZXJTdGF0ZSgpLCB3aGlj
aCB3YXMgdW51c2VkLCBpcyByZW1vdmVkLgorICAgICAgICAtIGRyYXdQYXRoKCkgaXMgaW50cm9k
dWNlZCBvbiBhbGwgcGxhdGZvcm1zLCB3aXRoIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0aGF0
IGp1c3QgZmlsbHMgYW5kIHN0cm9rZXMuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBh
aW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50
ZXI6OnBhaW50Qm94U2hhZG93IGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmlzQWNjZWxlcmF0ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xpcEludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjphcHBseVNoYWRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmRyYXdUZXh0VW5jaGVja2VkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjphZGp1c3RQYWdlSGVpZ2h0RGVwcmVjYXRlZCk6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL3dpbi9GcmFtZUNH
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlRnJvbVJlY3QpOgorICAgICAgICAqIHBh
Z2Uvd2luL0ZyYW1lR2RpV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlRnJvbVJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL0NhaXJvLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL1Nv
dXJjZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2Eu
bW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXh0UnVuIGNvbnN0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphY2N1bXVsYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dFN0YXRlQ2hhbmdlOjphcHBseSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZTo6ZHVtcCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6On5HcmFwaGljc0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdSYWlzZWRFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0U3Ryb2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclNoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3QmlkaVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
VGlsZWRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1p
bmdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBS
b3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRS
b3VuZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJv
dW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAg
ICAgIChXZWJDb3JlOjpOdWxsR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0Zm9y
bUNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTdHJva2VUaGlja25lc3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNldExlZ2FjeVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkQW50aWFs
aWFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hv
dWxkU21vb3RoRm9udHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZl
SW1hZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
UGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFRleHREcmF3aW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldEFscGhhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VT
Y2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1TdHJva2VFbGxpcHNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YnVpbGRlclN0YXRlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRl
cm5hbExpbmtzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0RGVzdGluYXRpb25Gb3JSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGluYXRpb25BdFBvaW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6aGFzUGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGFpbnRpbmdEaXNhYmxlZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBlcmZvcm1pbmdQYWludEludmFsaWRh
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmludmFsaWRh
dGluZ0NvbnRyb2xUaW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VUaGlja25lc3Mp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEFudGlhbGlhcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFNtb290aEZvbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkU3VicGl4ZWxRdWFu
dGl6ZUZvbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmFscGhhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29t
cG9zaXRlT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6YmxlbmRNb2RlT3BlcmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0RHJhd0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3THVtaW5hbmNlTWFzayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnRleHREcmF3aW5nTW9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6Omhhc1Zpc2libGVTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNTaGFkb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpoYXNCbHVycmVkU2hhZG93IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0VXNlRGFya0FwcGVhcmFuY2UpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp1c2VEYXJrQXBwZWFyYW5jZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmRyYXdJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRyYXdUaWxlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Nv
bnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojppc0luVHJh
bnNwYXJlbmN5TGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxG
b3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RGVzdGluYXRp
b25Gb3JSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkRGVzdGlu
YXRpb25BdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9y
dHNJbnRlcm5hbExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Ojpjb250ZW5mdWxQYWludERldGVjdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXll
cnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbXBsKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdUaWxlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0JsdXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnJlY3Vyc2l2ZUNvbW1pdENoYW5nZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyV2luOjpkcmF3VGV4dEF0UG9pbnQgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5j
cHA6CisgICAgICAgIChQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNr
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkcmF3UmVwYWludENvdW50
ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5n
TGF5ZXJXaW4uY3BwOgorICAgICAgICAoV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW46OmRpc3BsYXlD
YWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86Okdy
YXBoaWNzQ29udGV4dENhaXJvKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENh
aXJvOjp+R3JhcGhpY3NDb250ZXh0Q2Fpcm8pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86Omhhc1BsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDYWlybzo6Z2V0Q1RNIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dENhaXJvOjpwbGF0Zm9ybUNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNhdmUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJlc3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q2Fpcm86OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENhaXJvOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZp
bGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcEJvdW5kcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1Jpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdMaW5lc0ZvclRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdEb3RzRm9y
RG9jdW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWly
bzo6dXBkYXRlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0
Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpiZWdpblRyYW5z
cGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpl
bmRUcmFuc3BhcmVuY3lMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
YWlybzo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJv
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpz
ZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGlu
ZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnNldE1pdGVy
TGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJvdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSb3VuZGVkUmVjdEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6cmVuZGVyaW5nTW9kZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJhd0dseXBo
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJv
eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmdldENUTSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JU
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0Rv
dHNGb3JEb2N1bWVudE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0
cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5ZXJzKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
QWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hvdWxkQW50aWFsaWFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnN0
cm9rZUJvdW5kaW5nUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpzdHJva2VD
b250YWlucyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29yZUludGVycG9sYXRpb25RdWFsaXR5
KToKKyAgICAgICAgKFdlYkNvcmU6OmNnSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAo
V2ViQ29yZTo6Y2dUZXh0RHJhd2luZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENHKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjp+R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6Omhhc1BsYXRmb3JtQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzYXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1BhdHRlcm5DYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdHRlcm4p
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0VsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmFwcGx5U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0Q0c6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5k
ZWRSZWN0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6
OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpjbGlwQm91bmRzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjplbmRUcmFuc3BhcmVuY3lMYXllcik6
CisgICAgICAgIChXZWJDb3JlOjphcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDR1NoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRDRzo6dXBkYXRlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0c6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGlu
ZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6c2V0TGluZURhc2gp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpzY2FsZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHRDRzo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Q0c6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6
c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnJvdW5kVG9EZXZpY2VQ
aXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0Zv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldFVSTEZvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldElzQ0FMYXllckNv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OnNldElz
QWNjZWxlcmF0ZWRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENH
OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dENHOjphcHBseURldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dENHOjpmaWxsRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRDRzo6c3Ryb2tlRWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRD
Rzo6c3VwcG9ydHNJbnRlcm5hbExpbmtzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dENHOjpzZXREZXN0aW5hdGlvbkZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0aW9uQXRQb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRDR1N0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZl
cnRJbnRlcnBvbGF0aW9uUXVhbGl0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
UGxhdGZvcm1JbWFnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3UmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91
bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5k
cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJl
Z2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5zcGFyZW5j
eUxheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldE1pdGVyTGltaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDVE0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpnZXRDVE0gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVzRm9yVGV4dCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNDQUxheWVyQ29udGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldElzQWNjZWxlcmF0ZWRD
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6aXNB
Y2NlbGVyYXRlZENvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0
cm9rZVRoaWNrbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZv
bnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1BbHBoYSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxs
aXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtU3Ryb2tlRWxsaXBzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnN1cHBvcnRzSW50ZXJuYWxMaW5rcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2lu
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXRoQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0IGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGF0
dGVybkNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2Fz
Y2FkZUNvY29hLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNz
Q29udGV4dENvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0c6OmRy
YXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0ZvY3VzUmluZ1RvQ29udGV4dEF0
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
cmF3RG90c0ZvckRvY3VtZW50TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6
OmVuc3VyZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVy
Q29yZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNS
ZWNvcmRlcjo6Y3JlYXRlSW50ZXJuYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3R2x5cGhzUmVjb3JkZXI6OnJlY29yZERy
YXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZWNvcmRlcik6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVjb3Jk
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dEl0ZW1zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3UGF0aDo6YXBw
bHkgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEl0ZW1zLmg6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6
OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6U2V0U3RhdGU6
OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29y
ZGVyOjpSZWNvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6
OmRyYXdJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmdldENUTSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
Y29yZGVyOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpS
ZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6UmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6UmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3JkZXI6OmNsZWFyU2hhZG93KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Z2V0Q1RN
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6Y2xp
cEJvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVjb3Jk
ZXI6OmNhblBhaW50RnJhbWVGb3JNZWRpYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6YXBwZW5kKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjptYWtl
U2ltcGxlQ29sb3JGcm9tTlNDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYkxheWVyLm1tOgorICAgICAgICAoLVtXZWJMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAg
ICAgICAoLVtXZWJTaW1wbGVMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIu
Y3BwOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcik6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVy
OjpmaWxsUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpm
aWxsUm91bmRlZFJlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRl
cjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpzdHJva2VQYXRoKToKKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0dseXBocyk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2UpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6ZHJhd1JlY3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRp
b25SZWNvcmRlcjo6ZHJhd0xpbmUpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVyYXRpb25S
ZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dCk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJh
dGlvblJlY29yZGVyOjpnZXRDVE0gY29uc3QpOgorICAgICAgICAoTmljb3NpYTo6Q2Fpcm9PcGVy
YXRpb25SZWNvcmRlcjo6Y2xpcEJvdW5kcyBjb25zdCk6CisgICAgICAgIChOaWNvc2lhOjpDYWly
b09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMpOgorICAgICAgICAoTmlj
b3NpYTo6Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKToKKyAgICAg
ICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsZWFyU2hhZG93KTogRGVsZXRl
ZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmRyYXdQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKE5pY29zaWE6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmdldENU
TSk6IERlbGV0ZWQuCisgICAgICAgIChOaWNvc2lhOjpDYWlyb09wZXJhdGlvblJlY29yZGVyOjpj
bGlwQm91bmRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3Bw
OgorICAgICAgICAoTmljb3NpYTo6UGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclBhaW50aW5nOjpG
b3JQYWludGluZyk6CisgICAgICAgIChOaWNvc2lhOjpQYWludGluZ0NvbnRleHRDYWlybzo6Rm9y
UmVjb3JkaW5nOjpGb3JSZWNvcmRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9HcmFwaGljc0NvbnRleHRDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3V2luZG93c0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRDRzo6ZHJhd0ZvY3VzUmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDRzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRDRzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRDYWlybzo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0Q2Fpcm86OmRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdCk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERp
cmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c3lzdGVtRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZGVmYXVsdFJlbmRlclRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRmb3JtQ29udGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2F2ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2lu
ZG93c0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OmRyYXdXaW5kb3dzQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpicnVz
aFdpdGhDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Y29sb3JXaXRoR2xvYmFsQWxwaGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNvbGlkU3Ryb2tlQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNvbGlkRmlsbEJydXNoIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuU3Ryb2tlQnJ1c2gg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRl
cm5GaWxsQnJ1c2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmJlZ2luRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZW5kRHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRy
YXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpk
cmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3Ry
b2tlU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmRyYXdMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6YXBwbHlTdHJva2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjphcHBseUZpbGxQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpkcmF3UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdXBwb3J0
c1RyYW5zcGFyZW5jeUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6dXBkYXRlU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OnNldE1pdGVyTGltaXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6c2V0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjp0cmFuc2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmNvbmNhdENUTSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpn
ZXRDVE0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6
OnJvdW5kVG9EZXZpY2VQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRyYXdMaW5lc0ZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnNldFVSTEZvclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQ0FMYXllckNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmlzQ0FMYXllckNvbnRleHQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldElzQWNjZWxlcmF0ZWRD
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjppc0Fj
Y2VsZXJhdGVkQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6YXBwbHlEZXZpY2VTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbEVsbGlwc2UpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Y2xpcFRvSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVG
b3JNZWRpYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN5c3Rl
bUZhY3RvcnkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpk
ZWZhdWx0UmVuZGVyVGFyZ2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1Jbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0
Zm9ybUltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cmVsZWFzZVdpbmRvd3NDb250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NCaXRtYXApOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29sb3JXaXRoR2xv
YmFsQWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0Ojpzb2xpZFN0cm9rZUJydXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c29saWRGaWxsQnJ1c2ggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2ggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJy
dXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
YmVnaW5EcmF3KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZW5kRHJhdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZs
dXNoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1Bs
YXRmb3JtUGF0dGVybik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1TdHJva2VTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4pOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RX
aXRoUm91bmRlZEhvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcE91dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cEJvdW5kcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdXBwb3J0c1RyYW5z
cGFyZW5jeUxheWVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXApOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0Q1RNIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVs
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
Rm9yVGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lc0ZvclRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpzZXRVUkxGb3JSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVyQ29udGV4dCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmlzQ0FMYXllckNv
bnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01v
ZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybVN0cm9rZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFs
aWFzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TaG91bGRTbW9vdGhGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZp
Y2VTY2FsZUZhY3Rvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhcGhpY3NDb250ZXh0V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3MgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2V0V2luZG93c0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpoZGMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmdldEhCSVRNQVBPZlNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRo
RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQ29udGFpbnMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0IGNvbnN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURy
YWdJbWFnZUZvckxpbmspOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvckNvbG9yKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29h
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvckxpbmspOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpwYWlu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudGZ1bFBhaW50Q2hlY2tlcjo6cXVhbGlmaWVzRm9yQ29udGVu
dGZ1bFBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlCb3hTaGFkb3dGb3JCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUV2ZW50UmVnaW9uKToKKwogMjAyMS0wNS0yNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgU3dpdGNoIGZyb20gV1RG
OjpPcHRpb25hbCB0byBzdGQ6Om9wdGlvbmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGMxMTlkY2JlMjMyNjFlMTRk
MmYwOGZiZTIwOGZiZTI3MDQ4M2M1MTQuLmY5MDY2ZjljMmM3YjkzZGM0YWE5OTMzNDUxMzk0YmIx
N2UxZDY4NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjEtMDUtMjUgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmlydHVhbGl6ZSBHcmFw
aGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAgICAg
ICAqIFNoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBDYWlyby5jcHA6CisgICAgICAgIChXZWJL
aXQ6OlNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBT
aGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogU2hhcmVkL3dpbi9T
aGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlYWJsZUJp
dG1hcDo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvY2Fpcm8v
QmFja2luZ1N0b3JlQ2Fpcm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpCYWNraW5nU3RvcmU6Omlu
Y29ycG9yYXRlVXBkYXRlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3
Lm1tOgorICAgICAgICAoLVtXS1ByaW50aW5nVmlldyBfZHJhd1ByZXZpZXc6XSk6CisgICAgICAg
ICogVUlQcm9jZXNzL3dpbi9CYWNraW5nU3RvcmVEaXJlY3QyRC5jcHA6CisgICAgICAgICogVUlQ
cm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBvcHVwTWVudVByb3h5V2luOjpwYWludCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L1BERi9QREZQbHVnaW4ubW06CisgICAgICAgIChXZWJLaXQ6OlBERlBsdWdpbjo6cGFpbnRDb250
cm9sRm9yTGF5ZXJJbkNvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBkZlNuYXBzaG90
QXRTaXplKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGlj
cy9EcmF3aW5nQXJlYUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZHJhd1Bh
Z2VzVG9QREZJbXBsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50
T3BlcmF0aW9uR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJpbnRPcGVyYXRpb25HdGs6
OnJlbmRlclBhZ2UpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KIAogICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRvIHN0ZDo6b3B0aW9uYWwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBmZDYwOTI1NDRiYjI1NWExNDAwZTlkOWI0
NWFlYTBhOWFmNDg3NjNkLi4xOTc4NjE5NjMwMjVkZDg1MmVlMDJkZjMyMmIyMzJlMDI4ZmNlMDg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjEtMDUt
MjUgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgVmly
dHVhbGl6ZSBHcmFwaGljc0NvbnRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNjE3MAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNl
ci4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgtW1dl
YkZyYW1lIHByaW50VG9DR0NvbnRleHQ6cGFnZVdpZHRoOnBhZ2VIZWlnaHQ6XSk6CisgICAgICAg
ICogTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbToKKyAgICAgICAgKC1bTlNTdHJpbmcgX3dl
Yl9kcmF3QXRQb2ludDpmb250OnRleHRDb2xvcjpdKToKKyAgICAgICAgKiBXZWJJbnNwZWN0b3Iv
V2ViTm9kZUhpZ2hsaWdodFZpZXcubW06CisgICAgICAgICgtW1dlYk5vZGVIaWdobGlnaHRWaWV3
IGRyYXdSZWN0Ol0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgt
W1dlYkZyYW1lIF9kcmF3UmVjdDpjb250ZW50c09ubHk6XSk6CisKIDIwMjEtMDUtMjQgIFNhbSBX
ZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGVzdGluYXRpb25D
b2xvclNwYWNlIGZyb20gYW4gZW51bSB0byBjbGFzcyB3cmFwcGluZyBhIHBsYXRmb3JtIGNvbG9y
IHNwYWNlIChDR0NvbG9yU3BhY2VSZWYgZm9yIENHIHBvcnRzLCBldGMuKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nCmluZGV4IDQ1MDIyMzkzMDE4NmZmNTkyMzMzZGQ3ZDgyM2E2YTFmZDA5MDI2
NjIuLmY5NmE2YzRkOWRmNGI0MGNkY2JlYjc2NWY3N2U2NGU4MDNhYmU2NDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0wNS0yNSAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBWaXJ0dWFsaXplIEdyYXBo
aWNzQ29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MTcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgorCisgICAgICAg
ICogRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHA6CisgICAgICAgIChGdWxsc2NyZWVuVmlk
ZW9Db250cm9sbGVyOjpkcmF3KToKKyAgICAgICAgKiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChX
ZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQpOgorICAgICAgICAoV2ViRnJhbWU6
OnBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KToKKyAgICAgICAgKFdlYkZyYW1l
OjpzcG9vbFBhZ2VzKToKKyAgICAgICAgKiBXZWJOb2RlSGlnaGxpZ2h0LmNwcDoKKyAgICAgICAg
KFdlYk5vZGVIaWdobGlnaHQ6OnVwZGF0ZSk6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3OjpwYWludFdpdGhEaXJlY3QyRCk6CisgICAgICAgIChXZWJWaWV3OjpwYWlu
dEludG9CYWNraW5nU3RvcmUpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgU3RyaW5nQnVpbGRlcjo6YXBwZW5kTGl0ZXJhbApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggZWY4NTZiY2E5MTRiYTg0ZjJiNDY2YTRkNzg5NmY1NzIwOWNi
ZjM5Yy4uY2VjZmI1NThjMjZmNDI4YWIyNTFiYzhiYzBmOGE4MmFmMDYwZjliYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMjM5LDcgKzEyMzksNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRHTC5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRJbXBsLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xh
eWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyRmFjdG9yeS5oCkBAIC0xMjg2LDYgKzEyODUs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVVzYWdlSW5mby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvTmF0aXZlSW1hZ2UuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL051bGxHcmFwaGljc0NvbnRleHQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL09wZW5HTEVTU2hpbXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNo
aW1zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21h
a2UKaW5kZXggNGNjMzkxOTkzMTU0NzNkOWFkMzE3MmI2YWFjMWI1OWJhOGJmMTkxYy4uODY3ZDI1
MzYxMzA3ZmM5ZWQwMTE2YzdjMTFhNzgwZTQ3NmY3ZGU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcu
Y21ha2UKQEAgLTQzLDcgKzQzLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ2VuZXJpYy9LZXllZEVuY29kZXJHZW5lcmljLmNwcAogCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR0xDb250ZXh0LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dEltcGwuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZWdsL0dMQ29udGV4dEVHTC5jcHAKQEAgLTcxLDcgKzcw
LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEdMRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dERpcmVjdDJELmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3Bw
CkBAIC0xODksNyArMTg3LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09S
S19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdFdyaXRlVXRpbGl0aWVz
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01l
ZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFr
ZQppbmRleCBkMDgzMDk5ODRmYWYxNWVhYzY2OTRlYzYwNGYzZTQ1OWZlZjk3NTI0Li5iMjIwYWYy
MGJkM2I5NWE0ZTc5ZjExM2YyOGQ2ZDA4MGQwZTBjYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5j
bWFrZQpAQCAtMTE0LDYgKzExNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0xvY2FsV2luZG93c0NvbnRleHQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVGdWxsc2NyZWVuV2luZG93LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vU2hhcmVkR0RJT2JqZWN0LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYTVj
NzVkZjc5MWQ3MWJkNjczNzQ0ZmIzZjA0ODM2Yjc3MmFjOTlkOS4uZWFhZmI5ZTBiMzZiZDMwZjdk
ODE3ODk2MmVmNWYzMDA3ZDNjNGNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE5ODMsNyArMTk4Myw2
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRH
TC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3Iu
Y3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXJUcmFuc2Zvcm0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA3ZjBmZGY0MjkyODc1NGE5ZjRmMjdhYjczZThjYWFjYmQ1ODM4ZWZkLi41MWJlYjA3
M2UxMjVmZTVmODA0MDc0NTZlOWQ3NGQxZTM1ZjdjMWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NjEsNyArODYxLDcgQEAK
IAkJMkQ5QkY3NDYxREJGREM0NzAwN0E3RDk5IC8qIE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDlCRjczMzFEQkZEQzBGMDA3QTdE
OTkgLyogTWVkaWFLZXlzLmNwcCAqLzsgfTsKIAkJMkQ5QkY3NDcxREJGREM0OTAwN0E3RDk5IC8q
IE1lZGlhS2V5TWVzc2FnZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEOUJGNzJGMURCRkRDMEYwMDdBN0Q5OSAvKiBNZWRpYUtleU1lc3Nh
Z2VFdmVudC5jcHAgKi87IH07CiAJCTJEOUYwRTEzMTRGRjFDQkYwMEJBMEZGNyAvKiBsaW5lYXJT
UkdCLmljYyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkQ5RjBFMTIxNEZGMUNCRjAwQkEwRkY3IC8qIGxpbmVhclNSR0IuaWNjICovOyB9OwotCQkyREFD
QjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMDEyM0YxRkFEODdENjAwNTMx
RDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkyREEzOTdFNTI2NUM3Mzc1MDA0NjhGMzMgLyogTnVsbEdy
YXBoaWNzQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRBMzk3RTMyNjVDNzM3NDAwNDY4RjMzIC8qIE51bGxHcmFwaGljc0NvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQz
RDFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0Qz
IC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCAqLzsgfTsKIAkJMkRDOEQzOTgyNUYyRkU5NzAwQ0ZD
QkFCIC8qIE1vZGVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyREM4RDM5NzI1RjJGRTk0MDBDRkNCQUIgLyogTW9kZWwuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyREQ1QTcyNzFFQkVFNDdEMDA5QkE1
OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDJERDVBNzI2MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlv
blVuZGVybGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC02MDg4LDggKzYwODgsNiBAQAogCQkwQzQ1MzQyNjEwQ0RCQkZBMDA4NjkxNTcgLyog
SlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBFNzA1OEVEMUJDNUJDMTkwMDQ1QTUwNyAvKiBTZWFyY2hQb3B1cE1lbnVDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlYXJjaFBvcHVwTWVudUNvY29h
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRTcwNThGMzFCQzVDQ0Q3MDA0NUE1
MDcgLyogU2VhcmNoUG9wdXBNZW51Q29jb2EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VhcmNoUG9wdXBN
ZW51Q29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYwMDEyM0YxRkFEODdE
NjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhp
Y3NDb250ZXh0SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjAwMTI0MDFG
QUQ4ODEwMDA1MzFENzYgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYwM0MwNzMxODg0Njk1RTAwQTVGOENBIC8qIFN5c3RlbU1lbW9yeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTeXN0ZW1NZW1vcnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYwOTlEMDYxN0I5NjhBMTAwRkY4NEI5IC8qIFdlYkNvcmVUeXBlZEFycmF5
Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJD
b3JlVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjA5OUQwNzE3Qjk2OEExMDBGRjg0QjkgLyogV2ViQ29yZVR5cGVkQXJyYXlDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUeXBlZEFycmF5Q29u
dHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMyOSw2ICs3MzI3LDcg
QEAKIAkJMkQ5QkY3NDAxREJGREMwRjAwN0E3RDk5IC8qIE5hdmlnYXRvckVNRS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOYXZpZ2F0b3JFTUUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlCRjc0MTFEQkZEQzBGMDA3QTdEOTkgLyogTmF2aWdh
dG9yRU1FLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvckVNRS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRDlGMEUxMjE0RkYxQ0JGMDBCQTBGRjcg
LyogbGluZWFyU1JHQi5pY2MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBmaWxlOyBwYXRoID0gbGluZWFyU1JHQi5pY2M7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTJEQTM5N0UzMjY1QzczNzQwMDQ2OEYzMyAvKiBOdWxsR3JhcGhpY3NDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE51bGxHcmFwaGljc0NvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkRBQUUzMkMxOURDQUY2MDAwRTAw
MkQyIC8qIE1vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyREFBRTMyRDE5RENBRjYwMDBFMDAyRDIgLyogTW9ja1BhZ2VPdmVybGF5
Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1vY2tQYWdlT3Zlcmxh
eUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyREFGMzQzQTFFQTdFMEYx
MDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb25zdGFudFByb3BlcnR5TWFwLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTI3MDE1LDggKzI3MDE0LDYgQEAKIAkJCQk3QzMzMEEwMTFERjhGQUM2
MDBEMzM5NUMgLyogR3JhcGhpY3NDb250ZXh0R0xBdHRyaWJ1dGVzLmggKi8sCiAJCQkJN0JCMzRB
NDcyNTM3NzZDNzAwMDI5RDA4IC8qIEdyYXBoaWNzQ29udGV4dEdMSW1hZ2VFeHRyYWN0b3IuY3Bw
ICovLAogCQkJCTdCQjM0QTQ1MjUzNzc2QzYwMDAyOUQwOCAvKiBHcmFwaGljc0NvbnRleHRHTElt
YWdlRXh0cmFjdG9yLmggKi8sCi0JCQkJMEYwMDEyNDAxRkFEODgxMDAwNTMxRDc2IC8qIEdyYXBo
aWNzQ29udGV4dEltcGwuY3BwICovLAotCQkJCTBGMDAxMjNGMUZBRDg3RDYwMDUzMUQ3NiAvKiBH
cmFwaGljc0NvbnRleHRJbXBsLmggKi8sCiAJCQkJMEY1ODBCMDkwRjEyQTI2OTAwNTFENjg5IC8q
IEdyYXBoaWNzTGF5ZXIuY3BwICovLAogCQkJCTBGNTgwQjBBMEYxMkEyNjkwMDUxRDY4OSAvKiBH
cmFwaGljc0xheWVyLmggKi8sCiAJCQkJMEY1ODBCMEIwRjEyQTI2OTAwNTFENjg5IC8qIEdyYXBo
aWNzTGF5ZXJDbGllbnQuaCAqLywKQEAgLTI3MDk3LDYgKzI3MDk0LDcgQEAKIAkJCQkzMTRCRTNB
NTFCMzEwM0ZCMDAxNDE5ODIgLyogTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJ
NzI1MjM5NkIyNTRDQURDMjAwRjVGQjE1IC8qIE5hdGl2ZUltYWdlLmNwcCAqLywKIAkJCQk1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJCQkyREEzOTdFMzI2
NUM3Mzc0MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29udGV4dC5oICovLAogCQkJCUIyNzUzNTUy
MEIwNTM4MTQwMDJDRTY0RiAvKiBQYXRoLmNwcCAqLywKIAkJCQlCMjc1MzU1MzBCMDUzODE0MDAy
Q0U2NEYgLyogUGF0aC5oICovLAogCQkJCUE4OERENDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRo
VHJhdmVyc2FsU3RhdGUuY3BwICovLApAQCAtMzIzMDAsNyArMzIyOTgsNiBAQAogCQkJCTFDRThE
MTI3MjYxODVDMEUwMEZDM0FFRiAvKiBEaXNwbGF5TGlzdEl0ZW1CdWZmZXJJZGVudGlmaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjQzNzdENTcyNTUxQzlDNjAwODBBQkZFIC8q
IERpc3BsYXlMaXN0SXRlbVR5cGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDM0U2MjQzMjY1OTc5
MTgwMDU0OEFDRCAvKiBQbGF0Zm9ybUNvbG9yU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTFD
RThEMTJFMjYxODYxQzQwMEZDM0FFRiAvKiBEaXNwbGF5TGlzdEl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzI3MDUsNyArMzI3MDIsNiBAQAog
CQkJCTdCNkRDODE5MjU3MTJFOTIwMDM4MEM3MCAvKiBHcmFwaGljc0NvbnRleHRHTElPU3VyZmFj
ZVN3YXBDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RkMxMDQyRDM2NTAwMDlENDQ3
IC8qIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTlBNzI4
ODIzQzI2N0ZFMDA4NTM1M0MgLyogR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250
ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRDY3MDgwRTlFOURFQjAwRTQyMEYwIC8q
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU4MEIwRDBGMTJBMjY5MDA1MUQ2ODkgLyogR3JhcGhpY3NMYXllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zNDM2Niw2ICszNDM2Miw3IEBACiAJCQkJMUE1NjlEMTEwRDdFMkI4MjAw
N0MzOTgzIC8qIG5wcnVudGltZV9wcml2LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTkyN0ZENDE0
MTZBMTVCMDAzQTgzQzggLyogbnB0eXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1MDBGMzIx
M0ZERTNCRTAwOTlFQzI0IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkyREEzOTdFNTI2NUM3Mzc1MDA0NjhGMzMgLyogTnVsbEdyYXBoaWNzQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQzgxMjUxRjEyRDAwM0VGMjY5IC8qIE51bWJlcklucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE1NjlEMTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9i
amNfY2xhc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNTY5RDE0MEQ3RTJCODIwMDdDMzk4MyAv
KiBvYmpjX2hlYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDUzOCw2ICszNDUzNSw3IEBACiAJ
CQkJNDk5QjNFQzUxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDkzRTVFMDkxMkQ2NDIwNTAwMDIwMDgxIC8qIFBsYXRmb3JtQ0FMYXllckNs
aWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQ3MEJBMTMxODA3NERERjAwMDE5MDhBIC8qIFBs
YXRmb3JtQ0FMYXllckNvY29hLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQzNFNjI0MzI2NTk3OTE4
MDA1NDhBQ0QgLyogUGxhdGZvcm1Db2xvclNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ5
Nzg3MTFBQkFGM0E1MDBDRUY3RTQgLyogUGxhdGZvcm1Db250ZW50RmlsdGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzVDNzYyQjE0OTdGRTE0MDBCQzQ3NzUgLyogUGxhdGZvcm1FdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZl
bnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBhaW50ZXIuY3BwCmluZGV4IDAw
OTc5ZDAwOWI4NTU2M2U1MjdmODI4MWZlNzJhOWQxNzk5MzBhZTMuLmQ0NjhmYmMwZjc2YWIwYjJk
YjIyMmFkNjBhY2NkZTRjNjY1ZGYyMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rpc3Bs
YXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25QYWludGVyLmNwcApAQCAtMTI5OCwx
MCArMTI5OCw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBh
aW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIGF1dG8gc2hhZG93
UmVjdE9yaWdpbiA9IGZpbGxSZWN0LnJlY3QoKS5sb2NhdGlvbigpICsgc2hhZG93T2Zmc2V0Owog
ICAgICAgICBhdXRvIGFkanVzdGVkU2hhZG93T2Zmc2V0ID0gc2hhZG93UmVjdE9yaWdpbiAtIGFk
anVzdGVkRmlsbFJlY3QucmVjdCgpLmxvY2F0aW9uKCk7CiAKLSAgICAgICAgaWYgKHNoYWRvdy5p
c1dlYmtpdEJveFNoYWRvdygpKQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
c2V0TGVnYWN5U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
dy5jb2xvcigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0U2hhZG93KGFkanVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRv
dy5jb2xvcigpKTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KGFk
anVzdGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpLCBzaGFkb3cu
aXNXZWJraXRCb3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1Jh
ZGl1c01vZGU6OkRlZmF1bHQpOwogCiAgICAgICAgIGlmIChoYXNCb3JkZXJSYWRpdXMpIHsKICAg
ICAgICAgICAgIC8vIElmIHRoZSBib3ggaXMgb3BhcXVlLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBj
bGlwIGl0IG91dC4gSG93ZXZlciwgZG9pbmcgc28gc2F2ZXMgdGltZQpAQCAtMTQxMiwxMSArMTQw
OSw3IEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm94U2hhZG93KFBhaW50aW5n
Q29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBTaGFkCiAgICAgICAgIHBhaW50aW5nQ29udGV4dC5j
b250ZXh0LnRyYW5zbGF0ZShleHRyYU9mZnNldCk7CiAgICAgICAgIHNoYWRvd09mZnNldCAtPSBl
eHRyYU9mZnNldDsKIAotICAgICAgICBpZiAoc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkpCi0g
ICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMZWdhY3lTaGFkb3coc2hhZG93
T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvdy5jb2xvcigpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwg
c2hhZG93UmFkaXVzLCBzaGFkb3cuY29sb3IoKSk7Ci0KKyAgICAgICAgcGFpbnRpbmdDb250ZXh0
LmNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3cuY29s
b3IoKSwgc2hhZG93LmlzV2Via2l0Qm94U2hhZG93KCkgPyBTaGFkb3dSYWRpdXNNb2RlOjpMZWdh
Y3kgOiBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKICAgICAgICAgcGFpbnRpbmdDb250ZXh0
LmNvbnRleHQuZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoc2hhZG93Q2FzdGluZ1JlY3QsIHJvdW5k
ZWRIb2xlUmVjdCwgZmlsbENvbG9yKTsKICAgICB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmlu
ZGV4IDRmNDZmNjU5MDk1OWExZTRjZGRjZGNjMzc1MjgwNTE2ZDQyY2ExZDEuLmU3YzAyODVmNzU1
NDU0ODAzYjE0MGM5MjBiZDRiMmFmZGZlNjFmNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBA
IC0yNTIsNyArMjUyLDcgQEAgYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjppc0Fj
Y2VsZXJhdGVkKCkgY29uc3QKIHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNCYXNlKCkuZXhpc3RpbmdEcmF3aW5nQ29u
dGV4dCgpOwotICAgIHJldHVybiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCk7CisgICAgcmV0dXJuIGNvbnRleHQgJiYgY29udGV4dC0+cmVuZGVyaW5nTW9kZSgpID09
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAj
ZW5kaWYKQEAgLTExMjAsNyArMTEyMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y2xpcEludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgsIENhbnZhc0ZpbGxSdWxlCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHJlYWxpemVTYXZlcygpOwotICAgIGMtPmNhbnZhc0NsaXAocGF0
aCwgdG9XaW5kUnVsZSh3aW5kaW5nUnVsZSkpOworICAgIGMtPmNsaXBQYXRoKHBhdGgsIHRvV2lu
ZFJ1bGUod2luZGluZ1J1bGUpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpiZWdpbkNvbXBvc2l0ZUxheWVyKCkKQEAgLTEyMTIsNyArMTIxMiw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZs
b2F0IHdpZHRoLCBmbG9hCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKICAgICAgICAg
Y29udGV4dC0+c2F2ZSgpOwogICAgICAgICBzYXZlZCA9IHRydWU7Ci0gICAgICAgIGNvbnRleHQt
PnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2sp
OworICAgICAgICBjb250ZXh0LT5zZXRTaGFkb3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFu
c3BhcmVudEJsYWNrLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogICAgIH0KICAgICBpZiAo
c3RhdGUoKS5nbG9iYWxBbHBoYSAhPSAxKSB7CiAgICAgICAgIGlmICghc2F2ZWQpIHsKQEAgLTEz
NzksOSArMTM3OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6YXBwbHlT
aGFkb3coKQogICAgIGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CiAgICAgICAgIGZsb2F0IHdp
ZHRoID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKTsKICAgICAgICAgZmxvYXQgaGVpZ2h0
ID0gc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgICAgIGMtPnNldExlZ2FjeVNo
YWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgpLnNoYWRvd0JsdXIsIHN0YXRl
KCkuc2hhZG93Q29sb3IpOworICAgICAgICBjLT5zZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCAt
aGVpZ2h0KSwgc3RhdGUoKS5zaGFkb3dCbHVyLCBzdGF0ZSgpLnNoYWRvd0NvbG9yLCBTaGFkb3dS
YWRpdXNNb2RlOjpMZWdhY3kpOwogICAgIH0gZWxzZQotICAgICAgICBjLT5zZXRMZWdhY3lTaGFk
b3coRmxvYXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICAgICAgYy0+
c2V0U2hhZG93KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjaywgU2hhZG93
UmFkaXVzTW9kZTo6TGVnYWN5KTsKIH0KIAogYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzaG91bGREcmF3U2hhZG93cygpIGNvbnN0CkBAIC0yMDMwLDcgKzIwMzAsNyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+
IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKG5hdGl2ZUltYWdlLnJlbGVhc2VOb25OdWxsKCksIHJl
cGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSB9OwogI2VuZGlmCiAKLSAgICBhdXRvIHJlbmRl
cmluZ01vZGUgPSAhZHJhd2luZ0NvbnRleHQoKSB8fCBkcmF3aW5nQ29udGV4dCgpLT5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkOworICAgIGF1dG8gcmVuZGVyaW5nTW9kZSA9IGRyYXdpbmdDb250
ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwogICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSB2aWRlb0VsZW1lbnQuY3Jl
YXRlQnVmZmVyRm9yUGFpbnRpbmcoc2l6ZSh2aWRlb0VsZW1lbnQpLCByZW5kZXJpbmdNb2RlLCBj
b2xvclNwYWNlKCksIHBpeGVsRm9ybWF0KCkpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjQ3Myw3ICsyNDczLDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3VGV4dFVuY2hlY2tlZChjb25zdCBUZXh0UnVuJiB0ZXh0
UnVuLCBmbG8KIAogICAgICAgICAgICAgc2hhZG93T2Zmc2V0ICs9IG9mZnNldDsKIAotICAgICAg
ICAgICAgYy0+c2V0TGVnYWN5U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFk
b3dDb2xvcik7CisgICAgICAgICAgICBjLT5zZXRTaGFkb3coc2hhZG93T2Zmc2V0LCBzaGFkb3dS
YWRpdXMsIHNoYWRvd0NvbG9yLCBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpOwogCiAgICAgICAg
ICAgICBpZiAoZmlsbCkKICAgICAgICAgICAgICAgICBjLT5zZXRGaWxsQ29sb3IoQ29sb3I6OmJs
YWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAzZmYzYzY5OWZlZjNmNDZjZTRm
YzdlOTU2ZTMzYWQzNjBhZmE3M2VjLi5kM2M5ZWQzMmM3N2Y1MDViMGM4ZWJkMzI1M2U2ZDA0MzU5
ZDY2MTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC02OSw2ICs2OSw3IEBACiAj
aW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCisjaW5jbHVkZSAiTnVsbEdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIk92ZXJmbG93RXZlbnQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZU92ZXJsYXlDb250cm9sbGVyLmgiCkBAIC00MTg0LDEyICs0MTg1LDEyIEBAIHZv
aWQgRnJhbWVWaWV3Ojp1cGRhdGVDb250cm9sVGludHMoKQogICAgICAgICBwYWdlLT5zZXRJc0Nv
dW50aW5nUmVsZXZhbnRSZXBhaW50ZWRPYmplY3RzKGlzQ3VycmVudGx5Q291bnRpbmdSZWxldmFu
dFJlcGFpbnRlZE9iamVjdCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50
SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHBh
aW50SW52YWxpZGF0aW9uUmVhc29ucykKK3ZvaWQgRnJhbWVWaWV3Ojp0cmF2ZXJzZUZvclBhaW50
SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
cyBwYWludEludmFsaWRhdGlvblJlYXNvbnMpCiB7CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAg
ICAgICAgIGxheW91dENvbnRleHQoKS5sYXlvdXQoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CisgICAgTnVsbEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KHBhaW50SW52YWxpZGF0aW9uUmVhc29ucyk7CiAgICAgaWYgKHBsYXRmb3JtV2lk
Z2V0KCkpIHsKICAgICAgICAgLy8gRklYTUU6IGNvbnN1bHQgcGFpbnRzRW50aXJlQ29udGVudHMo
KS4KICAgICAgICAgcGFpbnRDb250ZW50cyhjb250ZXh0LCB2aXNpYmxlQ29udGVudFJlY3QoTGVn
YWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCkpOwpAQCAtNDczOSw3ICs0NzQwLDcgQEAgdm9pZCBG
cmFtZVZpZXc6OmFkanVzdFBhZ2VIZWlnaHREZXByZWNhdGVkKGZsb2F0ICpuZXdCb3R0b20sIGZs
b2F0IG9sZFRvcCwgZmxvYXQKIAogICAgIH0KICAgICAvLyBVc2UgYSBjb250ZXh0IHdpdGggcGFp
bnRpbmcgZGlzYWJsZWQuCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNvbnM6Ok5vbmUpOworICAgIE51bGxHcmFwaGljc0Nv
bnRleHQgY29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWludEludmFsaWRhdGlvblJlYXNv
bnM6Ok5vbmUpOwogICAgIHJlbmRlclZpZXctPnNldFRydW5jYXRlZEF0KHN0YXRpY19jYXN0PGlu
dD4oZmxvb3JmKG9sZEJvdHRvbSkpKTsKICAgICBJbnRSZWN0IGRpcnR5UmVjdCgwLCBzdGF0aWNf
Y2FzdDxpbnQ+KGZsb29yZihvbGRUb3ApKSwgcmVuZGVyVmlldy0+bGF5b3V0T3ZlcmZsb3dSZWN0
KCkubWF4WCgpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG9sZEJvdHRvbSAtIG9sZFRvcCkpKTsK
ICAgICByZW5kZXJWaWV3LT5zZXRQcmludFJlY3QoZGlydHlSZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlldy5oCmluZGV4IDllZDFjNzIzZTk5YzJhMmNhNjE5Y2M4ODVlZTJhY2E1NjY2ZjlhMGYuLmY4
ZTAyMTE3MDA3Y2M5ZjA2ZWRlY2U1MWZmNzlmNTgwNDg1YTE3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIkxheW91dE1pbGVzdG9uZS5oIgogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKKyNp
bmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnaW5hdGlvbi5oIgog
I2luY2x1ZGUgIlBhaW50UGhhc2UuaCIKICNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCkBAIC02
NjYsOSArNjY3LDkgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgRnJhbWVGbGF0dGVu
aW5nIGVmZmVjdGl2ZUZyYW1lRmxhdHRlbmluZygpIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCB0cmF2ZXJzZUZvclBhaW50SW52YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zKTsKLSAgICB2b2lkIGludmFsaWRhdGVDb250cm9sVGludHMo
KSB7IHRyYXZlcnNlRm9yUGFpbnRJbnZhbGlkYXRpb24oR3JhcGhpY3NDb250ZXh0OjpQYWludElu
dmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50cyk7IH0KLSAgICB2b2lk
IGludmFsaWRhdGVJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgeyB0cmF2ZXJzZUZvclBhaW50SW52
YWxpZGF0aW9uKEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpJbnZh
bGlkYXRpbmdJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnMpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRyb2xUaW50cygp
IHsgdHJhdmVyc2VGb3JQYWludEludmFsaWRhdGlvbihOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50cyk7IH0KKyAgICB2
b2lkIGludmFsaWRhdGVJbWFnZXNXaXRoQXN5bmNEZWNvZGVzKCkgeyB0cmF2ZXJzZUZvclBhaW50
SW52YWxpZGF0aW9uKE51bGxHcmFwaGljc0NvbnRleHQ6OlBhaW50SW52YWxpZGF0aW9uUmVhc29u
czo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2Rlcyk7IH0KIAogICAgIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhcnNGb3JBbGxTY3JvbGxhYmxlQXJlYXMoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS93aW4vRnJhbWVDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3dpbi9GcmFtZUNHV2luLmNwcAppbmRleCA3M2Q4YjQ5Y2VhN2NhNjU4ZDU1NDZkM2ViMTUy
MmFkMzRjMGFlYzFjLi5hMThmZTViYmFiN2UzNjQ5OTMyOWYyYWNmN2NmNmYwM2FkMjZiNmE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUNHV2luLmNwcApAQCAtNzIsNyArNzIsNyBAQCBH
RElPYmplY3Q8SEJJVE1BUD4gaW1hZ2VGcm9tUmVjdChjb25zdCBGcmFtZSogZnJhbWUsIEludFJl
Y3QmIGlyKQogICAgICAgICA4LCB3ICogc2l6ZW9mKFJHQlFVQUQpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkRmlyc3QpKTsKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQuZ2V0KCkpOwogCi0g
ICAgR3JhcGhpY3NDb250ZXh0IGdjKGNvbnRleHQuZ2V0KCkpOworICAgIEdyYXBoaWNzQ29udGV4
dENHIGdjKGNvbnRleHQuZ2V0KCkpOwogCiAgICAgZHJhd1JlY3RJbnRvQ29udGV4dChpciwgZnJh
bWUtPnZpZXcoKSwgZ2MpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9G
cmFtZUdkaVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9GcmFtZUdkaVdpbi5jcHAK
aW5kZXggMTYxYjRlOTMyNmY1YjJiMDE2OTBhZTE0OTE5N2ViZmU4MzBmZWI5Ny4uYjc5ZmViZjYz
OGE2YWI5YzQyZjNmMjQ2ZWM0MWQyYzUyYWVlZWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS93aW4vRnJhbWVHZGlXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvd2lu
L0ZyYW1lR2RpV2luLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0V2luLmgiCiAjaW5jbHVkZSA8d3RmL3dpbi9HRElPYmplY3Qu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTksNyArNjAsNyBAQCBHRElPYmplY3Q8SEJJ
VE1BUD4gaW1hZ2VGcm9tUmVjdChGcmFtZSogZnJhbWUsIEludFJlY3QmIGlyKQogICAgIEhHRElP
QkogaGJtcE9sZCA9IDo6U2VsZWN0T2JqZWN0KGJtcERDLmdldCgpLCBoQm1wLmdldCgpKTsKIAog
ICAgIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKGJtcERDLmdldCgpKTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0V2luIGdjKGJtcERDLmdldCgpKTsKICAgICAgICAgdmlldy0+cGFpbnQo
JmdjLCBpcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
YWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4IGMx
YjUzNjA1NzEzNzc0ZGMwMDZkMDI4ZWRhN2M2YTgyMTNkNmNjYTEuLjIzN2ViZmJiODAzMzhkMzEz
ZDJhNTFhNzdlMjgzMDlkNzA1ZmJmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtl
CkBAIC0xMiw3ICsxMiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRD
YWlyb1gxMS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggNWYwMTQ5NGYzY2ExZTMx
ZDc0N2JmN2M3YWZiNzZhZDBjZDdmNjcwYi4uMTk3ZTMzY2RjMzc1MzhhYzkwMGM4N2Q1NGQ5YzZj
M2YzNTY5ZjVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBA
IC0yOSw3ICsyOSw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvRHJhZ0ltYWdlQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2NvYS5tbQppbmRleCA2ZDgxMTg4ODg0NjRkODE1NWQ5ZDUw
ODMyY2NiYTY0M2IxODdkYWQ4Li5hMDdkNjQ2YTJlODBjMWZlM2U1MTU0YWQ3ZThmNmUwMTQ4OWVi
OWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9EcmFnSW1hZ2VDb2Nv
YS5tbQpAQCAtMzUsNyArMzUsNyBAQAogI2ltcG9ydCAiRm9udENhc2NhZGUuaCIKICNpbXBvcnQg
IkZvbnREZXNjcmlwdGlvbi5oIgogI2ltcG9ydCAiRm9udFNlbGVjdG9yLmgiCi0jaW1wb3J0ICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0
ICJJbWFnZS5oIgogI2ltcG9ydCAiTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oIgogI2lt
cG9ydCAiUGFnZS5oIgpAQCAtMzAwLDcgKzMwMCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGb3JMaW5rKEVsZW1lbnQmIGVsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRp
CiAgICAgUmV0YWluUHRyPE5TSW1hZ2U+IGRyYWdJbWFnZSA9IGFkb3B0TlMoW1tOU0ltYWdlIGFs
bG9jXSBpbml0V2l0aFNpemU6aW1hZ2VTaXplXSk7CiAgICAgW2RyYWdJbWFnZSBfd2ViX2xvY2tG
b2N1c1dpdGhEZXZpY2VTY2FsZUZhY3RvcjpkZXZpY2VTY2FsZUZhY3Rvcl07CiAKLSAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdLkNH
Q29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChbTlNHcmFwaGljc0NvbnRl
eHQgY3VycmVudENvbnRleHRdLkNHQ29udGV4dCk7CiAKICAgICBjb250ZXh0LmZpbGxSb3VuZGVk
UmVjdChGbG9hdFJvdW5kZWRSZWN0KGxheW91dC5ib3VuZGluZ1JlY3QsIEZsb2F0Um91bmRlZFJl
Y3Q6OlJhZGlpKGxpbmtJbWFnZUNvcm5lclJhZGl1cykpLCBjb2xvckZyb21OU0NvbG9yKFtOU0Nv
bG9yIGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlLmNwcAppbmRleCA4N2E0NGE1MzQ3YWI4NmJhOGUx
OTMwZjA0MjBlNjQ1MDk1NjBiODFkLi45NmM5ZjBlNjhkMWI5ZjRhMWE4ODVjMDBhMDNmM2IxZjVm
MzQ5Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENh
c2NhZGUuY3BwCkBAIC0yMjksOSArMjI5LDcgQEAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBGb250Q2FzY2FkZTo6ZGlzcGxheUxpc3RGb3JUZXgKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlM
aXN0OjpJbk1lbW9yeURpc3BsYXlMaXN0PiBkaXNwbGF5TGlzdCA9IG1ha2VVbmlxdWU8RGlzcGxh
eUxpc3Q6OkluTWVtb3J5RGlzcGxheUxpc3Q+KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0IHJlY29y
ZGluZ0NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7Ci0g
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERpc3BsYXlMaXN0OjpSZWNvcmRlcj4oZGlzcGxheUxp
c3RDb250ZXh0LCAqZGlzcGxheUxpc3QsIGNvbnRleHQuc3RhdGUoKSwgRmxvYXRSZWN0KCksIEFm
ZmluZVRyYW5zZm9ybSgpLCBudWxscHRyLCBEaXNwbGF5TGlzdDo6RHJhd0dseXBoc1JlY29yZGVy
OjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb246OkRvbnREZWNvbnN0cnVjdCk7Ci0gICAgfSk7Cisg
ICAgRGlzcGxheUxpc3Q6OlJlY29yZGVyIHJlY29yZGluZ0NvbnRleHQoKmRpc3BsYXlMaXN0LCBj
b250ZXh0LnN0YXRlKCksIEZsb2F0UmVjdCgpLCBBZmZpbmVUcmFuc2Zvcm0oKSwgbnVsbHB0ciwg
RGlzcGxheUxpc3Q6OkRyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29uc3RydWN0aW9u
OjpEb250RGVjb25zdHJ1Y3QpOwogICAgIAogICAgIEZsb2F0UG9pbnQgc3RhcnRQb2ludCA9IHRv
RmxvYXRQb2ludChXZWJDb3JlOjpzaXplKGdseXBoQnVmZmVyLmluaXRpYWxBZHZhbmNlKCkpKTsK
ICAgICBkcmF3R2x5cGhCdWZmZXIocmVjb3JkaW5nQ29udGV4dCwgZ2x5cGhCdWZmZXIsIHN0YXJ0
UG9pbnQsIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA5OTM2Yjc3NTNi
ZWY5ZTUxMzExOWYyOTA2M2ZjMzVhZWVkYTY5MzJlLi45NzBjMzc1Y2JkNTgxOWEyMDBiMjBiNjcx
MzI4NzBhZDVkOTE3YTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgogI2luY2x1ZGUg
IkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbC5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIk1lZGlhUGxh
eWVyLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlLmgiCisjaW5jbHVkZSAiTnVsbEdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiVGV4
dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTgyLDExICs4Miw2
IEBAIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpHcmFwaGljc0NvbnRleHRTdGF0ZSgpCiAgICAgLCBz
aG91bGRTbW9vdGhGb250cyh0cnVlKQogICAgICwgc2hvdWxkU3VicGl4ZWxRdWFudGl6ZUZvbnRz
KHRydWUpCiAgICAgLCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSNpZiBVU0UoQ0cp
Ci0gICAgLy8gQ29yZSBHcmFwaGljcyBpbmNvcnJlY3RseSByZW5kZXJzIHNoYWRvd3Mgd2l0aCBy
YWRpdXMgPiA4cHggKDxyZGFyOi8vcHJvYmxlbS84MTAzNDQyPiksCi0gICAgLy8gYnV0IHdlIG5l
ZWQgdG8gcHJlc2VydmUgdGhpcyBidWdneSBiZWhhdmlvciBmb3IgY2FudmFzIGFuZCAtd2Via2l0
LWJveC1zaGFkb3cuCi0gICAgLCBzaGFkb3dzVXNlTGVnYWN5UmFkaXVzKGZhbHNlKQotI2VuZGlm
CiAgICAgLCBkcmF3THVtaW5hbmNlTWFzayhmYWxzZSkKIHsKIH0KQEAgLTE2MCwxMCArMTU1LDEw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFjY3VtdWxhdGUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHCiAgICAgfQogCiAgICAgaWYgKGZsYWdzLmNvbnRh
aW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBEZWFsIHdpdGggc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cy4KICAgICAgICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CiAgICAgICAgIG1fc3RhdGUu
c2hhZG93Qmx1ciA9IHN0YXRlLnNoYWRvd0JsdXI7CiAgICAgICAgIG1fc3RhdGUuc2hhZG93Q29s
b3IgPSBzdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICAgICAgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2Rl
ID0gc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9CiAKICAgICBpZiAoZmxhZ3MuY29udGFp
bnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC0yMjks
MTQgKzIyNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0U3RhdGVDaGFuZ2U6OmFwcGx5KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKICAgICBpZiAobV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93c0lnbm9yZVRyYW5zZm9ybXNDaGFuZ2UpKQog
ICAgICAgICBjb250ZXh0LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpOwogCi0gICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsKLSNpZiBVU0UoQ0cpCi0gICAgICAg
IGlmIChtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpCi0gICAgICAgICAgICBjb250ZXh0
LnNldExlZ2FjeVNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dCbHVy
LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAg
ICBjb250ZXh0LnNldFNoYWRvdyhtX3N0YXRlLnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dC
bHVyLCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKLSAgICB9CisgICAgaWYgKG1fY2hhbmdlRmxhZ3Mu
Y29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCisgICAgICAgIGNv
bnRleHQuc2V0U2hhZG93KG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0JsdXIs
IG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93UmFkaXVzTW9kZSk7CiAKICAgICBp
ZiAobV9jaGFuZ2VGbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhp
Y2tuZXNzQ2hhbmdlKSkKICAgICAgICAgY29udGV4dC5zZXRTdHJva2VUaGlja25lc3MobV9zdGF0
ZS5zdHJva2VUaGlja25lc3MpOwpAQCAtMzAyLDkgKzI5MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0U3RhdGVDaGFuZ2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiAgICAgaWYgKG1fY2hh
bmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpIHsK
ICAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3ctYmx1ciIsIG1fc3RhdGUuc2hhZG93Qmx1
cik7CiAgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93LW9mZnNldCIsIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0KTsKLSNpZiBVU0UoQ0cpCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgic2hhZG93
cy11c2UtbGVnYWN5LXJhZGl1cyIsIG1fc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1cyk7Ci0j
ZW5kaWYKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJzaGFkb3dzLXVzZS1sZWdhY3ktcmFkaXVz
IiwgbV9zdGF0ZS5zaGFkb3dSYWRpdXNNb2RlID09IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSk7
CiAgICAgfQogCiAgICAgaWYgKG1fY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC0zNjEsNTUgKzM0OCwxOSBAQCBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZUNoYW5nZSYgc3RhdGVDaAogICAgIHJldHVybiB0czsKIH0KIAotR3JhcGhpY3NDb250ZXh0
OjpHcmFwaGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIHBhaW50SW52YWxpZGF0
aW9uUmVhc29ucykKLSAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHBhaW50SW52YWxp
ZGF0aW9uUmVhc29ucykKLXsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQo
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KQotewotICAg
IHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dDo6R3JhcGhpY3NDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5JiBm
YWN0b3J5RnVuY3Rpb24pCi0gICAgOiBtX2ltcGwoZmFjdG9yeUZ1bmN0aW9uKCp0aGlzKSkKLXsK
LX0KLQogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICBBU1NFUlQo
bV9zdGFjay5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghbV90cmFuc3BhcmVuY3lDb3VudCk7Ci0g
ICAgcGxhdGZvcm1EZXN0cm95KCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0OjpoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdAotewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBt
X2ltcGwtPmhhc1BsYXRmb3JtQ29udGV4dCgpOwotICAgIHJldHVybiAhIW1fZGF0YTsKKyAgICBB
U1NFUlQoIW1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzYXZlKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KICAgICBtX3N0YWNrLmFwcGVuZChtX3N0YXRlKTsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5zYXZlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBz
YXZlUGxhdGZvcm1TdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAg
aWYgKG1fc3RhY2suaXNFbXB0eSgpKSB7CiAgICAgICAgIExPR19FUlJPUigiRVJST1Igdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmUoKSBzdGFjayBpcyBlbXB0eSIpOwogICAgICAgICByZXR1
cm47CkBAIC00MjIsMjAgKzM3MywxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgp
CiAgICAgLy8gQ2FudmFzIGVsZW1lbnRzIHdpbGwgaW1tZWRpYXRlbHkgc2F2ZSgpIGFnYWluLCBi
dXQgdGhhdCBnb2VzIGludG8gaW5saW5lIGNhcGFjaXR5LgogICAgIGlmIChtX3N0YWNrLmlzRW1w
dHkoKSkKICAgICAgICAgbV9zdGFjay5jbGVhcigpOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnJlc3RvcmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJl
c3RvcmVQbGF0Zm9ybVN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmFp
c2VkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBlbGxpcHNlQ29s
b3IsIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBzYXZlKCk7CiAKICAgICBzZXRTdHJva2VDb2xv
cihzaGFkb3dDb2xvcik7CkBAIC00NTEsNjcgKzM5MiwyMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
ZWxsaQogICAgIHJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9r
ZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgbV9zdGF0ZS5zdHJva2VUaGlja25l
c3MgPSB0aGlja25lc3M7Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnVwZGF0
ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFu
Z2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1TdHJva2VUaGlj
a25lc3ModGhpY2tuZXNzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0
eWxlKFN0cm9rZVN0eWxlIHN0eWxlKQotewotICAgIG1fc3RhdGUuc3Ryb2tlU3R5bGUgPSBzdHls
ZTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVN0eWxlQ2hhbmdlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKHN0eWxlKTsKLX0KLQogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
ICAgICBtX3N0YXRlLnN0cm9rZUNvbG9yID0gY29sb3I7CiAgICAgbV9zdGF0ZS5zdHJva2VHcmFk
aWVudCA9IG51bGxwdHI7CiAgICAgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1
ciwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gb2Zm
c2V0OwotICAgIG1fc3RhdGUuc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgbV9zdGF0ZS5zaGFkb3dD
b2xvciA9IGNvbG9yOwotI2lmIFVTRShDRykKLSAgICBtX3N0YXRlLnNoYWRvd3NVc2VMZWdhY3lS
YWRpdXMgPSBmYWxzZTsKLSNlbmRpZgotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQs
IGJsdXIsIGNvbG9yKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlQ29sb3JDaGFuZ2UpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGVnYWN5U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBD
b2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0
U2l6ZSYgb2Zmc2V0LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIFNoYWRvd1JhZGl1
c01vZGUgcmFkaXVzTW9kZSkKIHsKICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IG9mZnNldDsK
ICAgICBtX3N0YXRlLnNoYWRvd0JsdXIgPSBibHVyOwogICAgIG1fc3RhdGUuc2hhZG93Q29sb3Ig
PSBjb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgbV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVz
ID0gdHJ1ZTsKLSNlbmRpZgotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRh
dGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hhZG93Q2hhbmdlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZXRQbGF0Zm9ybVNoYWRvdyhvZmZzZXQsIGJsdXIs
IGNvbG9yKTsKKyAgICBtX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSByYWRpdXNNb2RlOworICAg
IHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2Up
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQpAQCAtNTE5LDE1ICs0
MTQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJTaGFkb3coKQogICAgIG1fc3RhdGUu
c2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKCk7CiAgICAgbV9zdGF0ZS5zaGFkb3dCbHVyID0gMDsK
ICAgICBtX3N0YXRlLnNoYWRvd0NvbG9yID0gQ29sb3IoKTsKLSNpZiBVU0UoQ0cpCi0gICAgbV9z
dGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0gZmFsc2U7Ci0jZW5kaWYKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclNoYWRvdygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGNsZWFyUGxhdGZvcm1TaGFkb3coKTsKKyAgICBtX3N0YXRlLnNoYWRvd1Jh
ZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0OworICAgIHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpOwogfQogCiBib29sIEdy
YXBoaWNzQ29udGV4dDo6Z2V0U2hhZG93KEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCYgYmx1ciwg
Q29sb3ImIGNvbG9yKSBjb25zdApAQCAtNTQ0LDY2ICs0MzIsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBtX3N0YXRlLmZpbGxD
b2xvciA9IGNvbG9yOwogICAgIG1fc3RhdGUuZmlsbEdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBt
X3N0YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Rmls
bENvbG9yQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3Jt
RmlsbENvbG9yKGNvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgbV9z
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwot
ICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zQ2hhbmdlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlh
bGlhcykKLXsKLSAgICBtX3N0YXRlLnNob3VsZEFudGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRl
LCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNldFBsYXRmb3JtU2hvdWxkQW50aWFsaWFzKHNob3VsZEFu
dGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaG91bGRTbW9vdGhGb250
cyhib29sIHNob3VsZFNtb290aEZvbnRzKQotewotICAgIG1fc3RhdGUuc2hvdWxkU21vb3RoRm9u
dHMgPSBzaG91bGRTbW9vdGhGb250czsKLSAgICAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3Vs
ZFNtb290aEZvbnRzQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBz
ZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKHNob3VsZFNtb290aEZvbnRzKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sIHNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykKLXsKLSAgICBtX3N0YXRlLnNob3VsZFN1YnBpeGVs
UXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250czsKLSAgICBpZiAobV9p
bXBsKQotICAgICAgICBtX2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHNDaGFuZ2UpOwotfQotCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9u
UXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KQotewotICAgIG1fc3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSA9IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7Ci0KLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFsaXR5KGltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkpOworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpGaWxsQ29sb3JDaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0dGVybj4mJiBwYXR0ZXJuKQpAQCAtNjExLDggKzQ0
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VQYXR0ZXJuKFJlZjxQYXR0ZXJu
PiYmIHBhdHRlcm4pCiAgICAgbV9zdGF0ZS5zdHJva2VDb2xvciA9IHsgfTsKICAgICBtX3N0YXRl
LnN0cm9rZUdyYWRpZW50ID0gbnVsbHB0cjsKICAgICBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gPSBX
VEZNb3ZlKHBhdHRlcm4pOwotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZVBhdHRlcm5DaGFuZ2Up
OworICAgIHVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VQ
YXR0ZXJuQ2hhbmdlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJu
KFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCkBAIC02MjAsOCArNDQ4LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFJlZjxQYXR0ZXJuPiYmIHBhdHRlcm4pCiAgICAgbV9z
dGF0ZS5maWxsQ29sb3IgPSB7IH07CiAgICAgbV9zdGF0ZS5maWxsR3JhZGllbnQgPSBudWxscHRy
OwogICAgIG1fc3RhdGUuZmlsbFBhdHRlcm4gPSBXVEZNb3ZlKHBhdHRlcm4pOwotICAgIGlmICht
X2ltcGwpCi0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkZpbGxQYXR0ZXJuQ2hhbmdlKTsKKyAgICB1cGRhdGVTdGF0ZShtX3N0YXRlLCBH
cmFwaGljc0NvbnRleHRTdGF0ZTo6RmlsbFBhdHRlcm5DaGFuZ2UpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRpZW50LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pCkBAIC02
MzAsMTUgKzQ1Nyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChS
ZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyCiAgICAgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwogICAgIG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnRTcGFjZVRyYW5zZm9ybSA9IHN0cm9rZUdyYWRpZW50U3BhY2VUcmFuc2Zvcm07CiAgICAgbV9z
dGF0ZS5zdHJva2VQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBt
X2ltcGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VH
cmFkaWVudENoYW5nZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShX
aW5kUnVsZSBmaWxsUnVsZSkKLXsKLSAgICBtX3N0YXRlLmZpbGxSdWxlID0gZmlsbFJ1bGU7Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6RmlsbFJ1bGVDaGFuZ2UpOworICAgIHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VHcmFkaWVudENoYW5nZSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmIGdyYWRp
ZW50LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKQpA
QCAtNjQ3LDY0ICs0NjYsMzkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYgZ3JhZGllbnQsIGNvbnN0IEFmZmluZVRyYW4KICAgICBtX3N0YXRl
LmZpbGxHcmFkaWVudCA9IFdURk1vdmUoZ3JhZGllbnQpOwogICAgIG1fc3RhdGUuZmlsbEdyYWRp
ZW50U3BhY2VUcmFuc2Zvcm0gPSBmaWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybTsKICAgICBtX3N0
YXRlLmZpbGxQYXR0ZXJuID0gbnVsbHB0cjsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2lt
cGwtPnVwZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpGaWxsR3JhZGll
bnRDaGFuZ2UpOyAvLyBGSVhNRTogYWxzbyBmaWxsIHBhdHRlcm4/CisgICAgdXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxHcmFkaWVudENoYW5nZSk7CisgICAg
Ly8gRklYTUU6IGFsc28gZmlsbCBwYXR0ZXJuPwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQpCiB7Ci0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgbV9pbXBsLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIGVsc2UK
LSAgICAgICAgYmVnaW5QbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgICsr
bV90cmFuc3BhcmVuY3lDb3VudDsKKyAgICArK21fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudDsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBp
ZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAg
ZWxzZQotICAgICAgICBlbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCk7Ci0gICAgQVNTRVJU
KG1fdHJhbnNwYXJlbmN5Q291bnQgPiAwKTsKLSAgICAtLW1fdHJhbnNwYXJlbmN5Q291bnQ7Cisg
ICAgQVNTRVJUKG1fdHJhbnNwYXJlbmN5TGF5ZXJDb3VudCA+IDApOworICAgIC0tbV90cmFuc3Bh
cmVuY3lMYXllckNvdW50OwogfQogCiBGbG9hdFNpemUgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4
dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsK
LQogICAgIC8vIERpc3BsYXkgbGlzdCByZWNvcmRpbmcgZm9yIHRleHQgY29udGVudCBpcyBkb25l
IGF0IGdseXBocyBsZXZlbC4gU2VlIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocy4KICAgICBy
ZXR1cm4gZm9udC5kcmF3VGV4dCgqdGhpcywgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMsIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5j
ZXMsIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9v
dGhpbmdNb2RlIGZvbnRTbW9vdGhpbmdNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBs
LT5kcmF3R2x5cGhzKGZvbnQsIGdseXBocywgYWR2YW5jZXMsIG51bUdseXBocywgcG9pbnQsIGZv
bnRTbW9vdGhpbmdNb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEZvbnRDYXNj
YWRlOjpkcmF3R2x5cGhzKCp0aGlzLCBmb250LCBnbHlwaHMsIGFkdmFuY2VzLCBudW1HbHlwaHMs
IHBvaW50LCBmb250U21vb3RoaW5nTW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5z
aWduZWQgZnJvbSwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGZvbnQuZHJhd0VtcGhhc2lzTWFya3Mo
KnRoaXMsIHJ1biwgbWFyaywgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYgZm9udCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnRO
b3RSZWFkeUFjdGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQmlkaVJlc29sdmVyPFRleHRS
dW5JdGVyYXRvciwgQmlkaUNoYXJhY3RlclJ1bj4gYmlkaVJlc29sdmVyOwogICAgIGJpZGlSZXNv
bHZlci5zZXRTdGF0dXMoQmlkaVN0YXR1cyhydW4uZGlyZWN0aW9uKCksIHJ1bi5kaXJlY3Rpb25h
bE92ZXJyaWRlKCkpKTsKICAgICBiaWRpUmVzb2x2ZXIuc2V0UG9zaXRpb25JZ25vcmluZ05lc3Rl
ZElzb2xhdGVzKFRleHRSdW5JdGVyYXRvcigmcnVuLCAwKSk7CkBAIC03MzQsMTkgKzUyOCw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmIGZv
bnQsIGNvbnN0IFRleHRSdW4mIHJ1biwKICAgICBiaWRpUnVucy5jbGVhcigpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29u
c3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBkcmF3UGxhdGZvcm1JbWFnZShpbWFnZS5wbGF0Zm9ybUltYWdlKCksIGltYWdl
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCiBJbWFnZURyYXdSZXN1bHQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFBvaW50
JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIGltYWdlUGFpbnRpbmdP
cHRpb25zKQogewogICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UmVjdChkZXN0aW5h
dGlvbiwgaW1hZ2Uuc2l6ZSgpKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgp
KSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwpAQCAtNzYwLDE4ICs1NDEsMTIgQEAgSW1hZ2VEcmF3
UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0aW4KIAogSW1hZ2VEcmF3UmVzdWx0IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlKEltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxv
YXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1
bHQ6OkRpZE5vdGhpbmc7Ci0KICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50
ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoKnRoaXMsIG9wdGlvbnMuaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7CiAgICAgcmV0dXJuIGltYWdlLmRyYXcoKnRoaXMsIGRlc3RpbmF0aW9uLCBz
b3VyY2UsIG9wdGlvbnMpOwogfQogCiBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3VGlsZWRJbWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24s
IGNvbnN0IEZsb2F0UG9pbnQmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2l6ZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW1hZ2VE
cmF3UmVzdWx0OjpEaWROb3RoaW5nOwotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFp
bmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwogICAgIHJldHVybiBpbWFnZS5kcmF3VGlsZWQoKnRoaXMsIGRl
c3RpbmF0aW9uLCBzb3VyY2UsIHRpbGVTaXplLCBzcGFjaW5nLCBvcHRpb25zKTsKIH0KQEAgLTc3
OSw5ICs1NTQsNiBAQCBJbWFnZURyYXdSZXN1bHQgR3JhcGhpY3NDb250ZXh0OjpkcmF3VGlsZWRJ
bWFnZShJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZAogSW1hZ2VEcmF3UmVzdWx0IEdy
YXBoaWNzQ29udGV4dDo6ZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmIGltYWdlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXpl
JiB0aWxlU2NhbGVGYWN0b3IsCiAgICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlLCBJbWFnZTo6VGls
ZVJ1bGUgdlJ1bGUsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBJbWFnZURyYXdSZXN1bHQ6
OkRpZE5vdGhpbmc7Ci0KICAgICBpZiAoaFJ1bGUgPT0gSW1hZ2U6OlN0cmV0Y2hUaWxlICYmIHZS
dWxlID09IEltYWdlOjpTdHJldGNoVGlsZSkgewogICAgICAgICAvLyBKdXN0IGRvIGEgc2NhbGUu
CiAgICAgICAgIHJldHVybiBkcmF3SW1hZ2UoaW1hZ2UsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG9w
dGlvbnMpOwpAQCAtODAzLDE0ICs1NzUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0lt
YWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZSwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwgJiYgbV9pbXBsLT5j
YW5EcmF3SW1hZ2VCdWZmZXIoaW1hZ2UpKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ltYWdlQnVm
ZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0
aW9uUXVhbGl0eUZvclRoaXNTY29wZSgqdGhpcywgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0
eSgpKTsKICAgICBpbWFnZS5kcmF3KCp0aGlzLCBkZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25z
KTsKIH0KQEAgLTgzMywzNiArNTk3LDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
c3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+IGltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlLCBk
ZXN0aW5hdGlvbiwgc291cmNlLCBvcHRpb25zKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVy
cG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKCp0aGlzLCBvcHRpb25zLmludGVycG9sYXRpb25R
dWFsaXR5KCkpOwogICAgIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKFdURk1vdmUoaW1hZ2Up
LCAqdGhpcywgZGVzdGluYXRpb24sIHNvdXJjZSwgb3B0aW9ucyk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6
ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkg
fHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UGF0dGVybihpbWFnZSwgaW1h
Z2VTaXplLCBkZXN0UmVjdCwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGRyYXdQbGF0Zm9y
bVBhdHRlcm4oaW1hZ2UucGxhdGZvcm1JbWFnZSgpLCBpbWFnZVNpemUsIGRlc3RSZWN0LCB0aWxl
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotfQotCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCiAgICAgUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCk7CiAgICAg
Y2xpcFBhdGgocGF0aCk7CkBAIC04NzAsOSArNjEyLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0KQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
CiAgICAgaWYgKCFyZWN0LmlzUm91bmRlZCgpKSB7CiAgICAgICAgIGNsaXBPdXQocmVjdC5yZWN0
KCkpOwogICAgICAgICByZXR1cm47CkBAIC04ODUsMTQgKzYyNCw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCkK
IAogR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiBjb2xvclNwYWNlLCBGdW5jdGlvbjx2b2lk
KEdyYXBoaWNzQ29udGV4dCYpPiYmIGRyYXdpbmdGdW5jdGlvbikKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0
OjpTdWNjZXNzOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBUb0Ry
YXdpbmdDb21tYW5kcyhkZXN0aW5hdGlvbiwgY29sb3JTcGFjZSwgV1RGTW92ZShkcmF3aW5nRnVu
Y3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdDo6U3Vj
Y2VzczsKLSAgICB9Ci0KICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoZGVzdGluYXRpb24uc2l6ZSgpLCBjb2xvclNwYWNlLCAqdGhpcyk7
CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIENsaXBUb0RyYXdpbmdDb21t
YW5kc1Jlc3VsdDo6RmFpbGVkVG9DcmVhdGVJbWFnZUJ1ZmZlcjsKQEAgLTkwNCw2MSArNjM1LDIy
IEBAIEdyYXBoaWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvRHJhd2luZ0NvbW1hCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2VCdWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdGluYXRpb25SZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwVG9JbWFn
ZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdGluYXRpb25SZWN0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQogICAgIGltYWdlQnVmZmVyLmNsaXBUb01hc2soKnRoaXMsIGRlc3RpbmF0aW9uUmVj
dCk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKSAmJiAhVVNFKENBSVJPKQog
SW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9Ci0jZW5kaWYKLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFn
cyBtb2RlKQotewotICAgIG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7
Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
c2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUobW9kZSk7Ci19CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFJlY3QocmVjdCwgZ3JhZGllbnQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZ3JhZGllbnQuZmlsbCgqdGhpcywgcmVjdCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBi
bGVuZE1vZGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNv
bG9yLCBvcCwgYmxlbmRNb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENvbXBv
c2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjb21wb3NpdGVPcGVyYXRpb24oKTsKICAg
ICBzZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7CiAgICAgZmlsbFJlY3QocmVj
dCwgY29sb3IpOwpAQCAtOTY3LDI4ICs2NTksMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3MK
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxSb3VuZGVkUmVjdChyZWN0LCBjb2xvciwg
YmxlbmRNb2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGlmIChyZWN0LmlzUm91
bmRlZCgpKSB7CiAgICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihjb21wb3NpdGVPcGVyYXRp
b24oKSwgYmxlbmRNb2RlKTsKLSAgICAgICAgcGxhdGZvcm1GaWxsUm91bmRlZFJlY3QocmVjdCwg
Y29sb3IpOworICAgICAgICBmaWxsUm91bmRlZFJlY3RJbXBsKHJlY3QsIGNvbG9yKTsKICAgICAg
ICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKICAgICB9IGVs
c2UKICAgICAgICAgZmlsbFJlY3QocmVjdC5yZWN0KCksIGNvbG9yLCBjb21wb3NpdGVPcGVyYXRp
b24oKSwgYmxlbmRNb2RlKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpICYm
ICFVU0UoQ0FJUk8pCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhv
bGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBQYXRoIHBhdGg7CiAg
ICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogCkBAIC0xMDA4LDcwICs2ODgsMTMgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEZsb2F0Um8KICAgICBzZXRGaWxsUnVsZShvbGRGaWxsUnVsZSk7CiAgICAgc2V0Rmls
bENvbG9yKG9sZEZpbGxDb2xvcik7CiB9Ci0jZW5kaWYKLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEFscGhhKGZsb2F0IGFscGhhKQotewotICAgIG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsKLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBzZXRQbGF0Zm9ybUFscGhhKGFscGhhKTsKLX0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRp
b24sIEJsZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRv
ciA9IGNvbXBvc2l0ZU9wZXJhdGlvbjsKICAgICBtX3N0YXRlLmJsZW5kTW9kZSA9IGJsZW5kTW9k
ZTsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dXBkYXRlU3RhdGUobV9zdGF0
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oY29t
cG9zaXRlT3BlcmF0aW9uLCBibGVuZE1vZGUpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0RHJhd0x1bWluYW5jZU1hc2soYm9vbCBkcmF3THVtaW5hbmNlTWFzaykKLXsKLSAgICBtX3N0
YXRlLmRyYXdMdW1pbmFuY2VNYXNrID0gZHJhd0x1bWluYW5jZU1hc2s7Ci0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgbV9pbXBsLT51cGRhdGVTdGF0ZShtX3N0YXRlLCBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6RHJhd0x1bWluYW5jZU1hc2tDaGFuZ2UpOwotfQotCi0jaWYgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVc2VEYXJrQXBwZWFyYW5jZShi
b29sIHVzZURhcmtBcHBlYXJhbmNlKQotewotICAgIG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2Ug
PSB1c2VEYXJrQXBwZWFyYW5jZTsKLSAgICBpZiAobV9pbXBsKQotICAgICAgICBtX2ltcGwtPnVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpVc2VEYXJrQXBwZWFyYW5j
ZUNoYW5nZSk7Ci19Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQpCi0v
LyBJbXBsZW1lbnQgdGhpcyBpZiB5b3Ugd2FudCB0byBnbyBwdXNoIHRoZSBkcmF3aW5nIG1vZGUg
aW50byB5b3VyIG5hdGl2ZSBjb250ZXh0IGltbWVkaWF0ZWx5Lgotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKFRleHREcmF3aW5nTW9kZUZsYWdzKQotewot
fQotI2VuZGlmCi0KLSNpZiAhVVNFKENBSVJPKSAmJiAhVVNFKERJUkVDVDJEKQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpCi17CisgICAg
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJh
dGlvbkNoYW5nZSk7CiB9Ci0jZW5kaWYKLQotI2lmICFVU0UoQ0cpICYmICFVU0UoRElSRUNUMkQp
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRTbW9vdGhGb250cyhib29s
KQotewotfQotI2VuZGlmCi0KLSNpZiAhVVNFKENHKSAmJiAhVVNFKERJUkVDVDJEKSAmJiAhVVNF
KENBSVJPKQotYm9vbCBHcmFwaGljc0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxvYXRQb2lu
dCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSBwZW5TdHlsZSkKIHsKQEAgLTEx
MDIsMjQgKzcyNSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGp1c3RMaW5lVG9QaXhlbEJv
dW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyCiAgICAgfQogfQogCi0jaWYg
IVVTRShDRykgJiYgIVVTRShESVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQpCi17Ci19Ci0jZW5kaWYKLQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0
b3IpCi17Ci0gICAgc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZGV2aWNlU2NhbGVGYWN0
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcGxhdGZvcm1BcHBseURldmljZVNj
YWxlRmFjdG9yKGRldmljZVNjYWxlRmFjdG9yKTsKLX0KLSAgICAKIEZsb2F0U2l6ZSBHcmFwaGlj
c0NvbnRleHQ6OnNjYWxlRmFjdG9yKCkgY29uc3QKIHsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJh
bnNmb3JtID0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VT
Y2FsZSk7CkBAIC0xMTMzLDI0ICs3MzgsMTAgQEAgRmxvYXRTaXplIEdyYXBoaWNzQ29udGV4dDo6
c2NhbGVGYWN0b3JGb3JEcmF3aW5nKGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnMKICAg
ICByZXR1cm4gdHJhbnNmb3JtZWREZXN0UmVjdC5zaXplKCkgLyBzcmNSZWN0LnNpemUoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxs
aXBzZSkKLXsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbEVsbGlwc2Uo
ZWxsaXBzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwbGF0Zm9ybUZpbGxFbGxp
cHNlKGVsbGlwc2UpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlRWxsaXBzZShj
b25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBs
YXRmb3JtU3Ryb2tlRWxsaXBzZShlbGxpcHNlKTsKKyAgICBmaWxsUGF0aChwYXRoKTsKKyAgICBz
dHJva2VQYXRoKHBhdGgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbEVsbGlwc2VB
c1BhdGgoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQpAQCAtMTE2NywyMyArNzU4LDEwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYg
ZWxsaXBzZSkKICAgICBzdHJva2VQYXRoKHBhdGgpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVT
RShESVJFQ1QyRCkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtU3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJl
Y3QmIGVsbGlwc2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBT
dHJva2VTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOworICAgIGRyYXdM
aW5lc0ZvclRleHQocmVjdC5sb2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAw
LCByZWN0LndpZHRoKCkgfSwgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIHN0eWxlKTsKIH0K
LSNlbmRpZgogCiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlVW5kZXJsaW5lQm91
bmRzRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcpCiB7CkBAIC0x
MjE4LDIwICs3OTYsNiBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpjb21wdXRlTGluZUJv
dW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KGNvbnN0IEZsbwogICAgIHJldHVybiBGbG9h
dFJlY3Qob3JpZ2luLCBGbG9hdFNpemUocmVjdC53aWR0aCgpLCB0aGlja25lc3MpKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmJ1aWxkZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUpCi17Ci0gICAgc2V0UGxhdGZvcm1TaGFkb3coc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dCbHVyLCBzdGF0ZS5zaGFkb3dDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1T
dHJva2VUaGlja25lc3Moc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLSAgICBzZXRQbGF0Zm9ybVRl
eHREcmF3aW5nTW9kZShzdGF0ZS50ZXh0RHJhd2luZ01vZGUpOwotICAgIHNldFBsYXRmb3JtU3Ry
b2tlQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpOwotICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKHN0
YXRlLmZpbGxDb2xvcik7Ci0gICAgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShzdGF0ZS5zdHJva2VT
dHlsZSk7Ci0gICAgc2V0UGxhdGZvcm1BbHBoYShzdGF0ZS5hbHBoYSk7Ci0gICAgc2V0UGxhdGZv
cm1Db21wb3NpdGVPcGVyYXRpb24oc3RhdGUuY29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5k
TW9kZSk7Ci0gICAgc2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoc3RhdGUuc2hvdWxkQW50aWFs
aWFzKTsKLSAgICBzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKHN0YXRlLnNob3VsZFNtb290
aEZvbnRzKTsKLX0KLQogZmxvYXQgR3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lQ29ybmVyV2lk
dGhGb3JTdHJva2VXaWR0aChmbG9hdCBzdHJva2VXaWR0aCkgY29uc3QKIHsKICAgICBmbG9hdCB0
aGlja25lc3MgPSBzdHJva2VUaGlja25lc3MoKTsKQEAgLTEyODMsMzYgKzg0NywxNSBAQCBWZWN0
b3I8RmxvYXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVy
cyhib29sIGlzVmVydGljYWxMaQogICAgIHJldHVybiB7IHBvaW50MSwgcG9pbnQyIH07CiB9CiAK
LSNpZiAhVVNFKENHKQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNJbnRlcm5hbExp
bmtzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiwgY29uc3QgRmxvYXRSZWN0
JikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZERlc3RpbmF0aW9uQXRQb2ludChj
b25zdCBTdHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikKLXsKLX0KLQotI2VuZGlmCi0KICNpZiBF
TkFCTEUoVklERU8pCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFtZUZvck1lZGlhKE1l
ZGlhUGxheWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7Ci0gICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1w
bCAmJiBtX2ltcGwtPmNhblBhaW50RnJhbWVGb3JNZWRpYShwbGF5ZXIpKSB7Ci0gICAgICAgIG1f
aW1wbC0+cGFpbnRGcmFtZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgcGxheWVyLnBsYXllclByaXZhdGUoKS0+cGFpbnRDdXJyZW50
RnJhbWVJbkNvbnRleHQoKnRoaXMsIGRlc3RpbmF0aW9uKTsKIH0KICNlbmRpZgogCit2b2lkIE51
bGxHcmFwaGljc0NvbnRleHQ6OmRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VC
dWZmZXI+LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYpCit7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjkxMGI4Njg2ZDE5Zjk3MDVjMDQz
NzIxODUwNmZhZTk5NWUyNzM1MC4uYjczMTczNzcxODA0MWI5ZDg3MjUzODI0YzA3MmJmZDE3MmUz
ZTU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1
ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAi
UmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgpAQCAtODYsNyArODcs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBG
bG9hdFJvdW5kZWRSZWN0OwogY2xhc3MgR3JhZGllbnQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJ
bXBsOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwogY2xhc3MgSW1hZ2VC
dWZmZXI7CiBjbGFzcyBJbnRSZWN0OwpAQCAtMTEwLDYgKzExMCwxMyBAQCBlbnVtIGNsYXNzIFRl
eHREcmF3aW5nTW9kZSA6IHVpbnQ4X3QgewogfTsKIHVzaW5nIFRleHREcmF3aW5nTW9kZUZsYWdz
ID0gT3B0aW9uU2V0PFRleHREcmF3aW5nTW9kZT47CiAKKy8vIExlZ2FjeSBzaGFkb3cgYmx1ciBy
YWRpdXMgaXMgdXNlZCBmb3IgY2FudmFzLCBhbmQgLXdlYmtpdC1ib3gtc2hhZG93LgorLy8gSXQg
aGFzIGRpZmZlcmVudCB0cmVhdG1lbnQgb2YgcmFkaWkgPiA4cHguCitlbnVtIGNsYXNzIFNoYWRv
d1JhZGl1c01vZGUgOiBib29sIHsKKyAgICBEZWZhdWx0LAorICAgIExlZ2FjeQorfTsKKwogZW51
bSBTdHJva2VTdHlsZSB7CiAgICAgTm9TdHJva2UsCiAgICAgU29saWRTdHJva2UsCkBAIC0yMTks
MTQgKzIyNiwxMiBAQCBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yIHsgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92
ZXIgfTsKICAgICBCbGVuZE1vZGUgYmxlbmRNb2RlIHsgQmxlbmRNb2RlOjpOb3JtYWwgfTsKICAg
ICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5IHsgSW50ZXJw
b2xhdGlvblF1YWxpdHk6OkRlZmF1bHQgfTsKKyAgICBTaGFkb3dSYWRpdXNNb2RlIHNoYWRvd1Jh
ZGl1c01vZGUgeyBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0IH07CiAKICAgICBib29sIHNob3Vs
ZEFudGlhbGlhcyA6IDE7CiAgICAgYm9vbCBzaG91bGRTbW9vdGhGb250cyA6IDE7CiAgICAgYm9v
bCBzaG91bGRTdWJwaXhlbFF1YW50aXplRm9udHMgOiAxOwogICAgIGJvb2wgc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMgOiAxOwotI2lmIFVTRShDRykKLSAgICBib29sIHNoYWRvd3NVc2VMZWdhY3lS
YWRpdXMgOiAxOwotI2VuZGlmCiAgICAgYm9vbCBkcmF3THVtaW5hbmNlTWFzayA6IDE7CiAjaWYg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBib29sIHVzZURhcmtBcHBlYXJhbmNlIDog
MTsKQEAgLTI1NCwyNyArMjU5LDE1IEBAIHN0cnVjdCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5n
ZSB7CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZUNoYW5nZSYpOwogCi0KIGNsYXNzIEdyYXBoaWNzQ29udGV4
dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3NDb250ZXh0KTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgCi0gICAgdXNpbmcgR3JhcGhpY3ND
b250ZXh0SW1wbEZhY3RvcnkgPSBXVEY6OkZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHRJbXBsPihHcmFwaGljc0NvbnRleHQmKT47Ci0gICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5Jik7CitwdWJsaWM6
ICAgCiAKLSAgICBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgfkdyYXBoaWNzQ29udGV4dCgpOwotICAgIAotICAgIGVudW0gY2xhc3MgUGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zIDogdWludDhfdCB7Ci0gICAgICAgIE5vbmUsCi0gICAgICAgIEludmFsaWRh
dGluZ0NvbnRyb2xUaW50cywKLSAgICAgICAgSW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVj
b2RlcywKLSAgICAgICAgRGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50Ci0gICAgfTsKLSAgICBHcmFw
aGljc0NvbnRleHQoUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBHcmFwaGljc0NvbnRleHQoKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCB+R3JhcGhpY3NDb250ZXh0KCk7CiAKICNpZiBVU0UoRElSRUNUMkQpCisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIG1vdmUgdG8gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQKICAgICBlbnVtIGNs
YXNzIEJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIDogdWludDhfdCB7CiAgICAgICAgIENQVU1l
bW9yeSwKICAgICAgICAgR1BVTWVtb3J5CkBAIC0yODIsMjUwICsyNzUsMjcwIEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqLCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSk7CiAjZW5kaWYKIAotICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgp
IGNvbnN0IHsgcmV0dXJuICFtX2RhdGEgJiYgIW1faW1wbDsgfQotICAgIGJvb2wgcGVyZm9ybWlu
Z1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJl
YXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lOyB9Ci0gICAgYm9vbCBpbnZh
bGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCB7IHJldHVybiBtX3BhaW50SW52YWxpZGF0aW9u
UmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNvbnM6OkludmFsaWRhdGluZ0NvbnRyb2xU
aW50czsgfQotICAgIGJvb2wgaW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0
aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1hZ2VzV2l0aEFzeW5jRGVjb2RlczsgfQotICAgIGJv
b2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYWludEludmFs
aWRhdGlvblJlYXNvbnMgPT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250
ZW50ZnVsUGFpbnQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRpbmdEaXNhYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHBlcmZvcm1pbmdQYWludEludmFs
aWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGludmFs
aWRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGludmFsaWRhdGluZ0ltYWdlc1dpdGhBc3luY0RlY29kZXMoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBkZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdHJv
a2VUaGlja25lc3MoZmxvYXQpOworICAgIC8vIENvbnRleHQgU3RhdGUKKworICAgIHZvaWQgc2V0
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykgeyBtX3N0YXRlLnN0cm9rZVRoaWNrbmVz
cyA9IHRoaWNrbmVzczsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6
OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSk7IH0KICAgICBmbG9hdCBzdHJva2VUaGlja25lc3MoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzczsgfQogCi0gICAgdm9pZCBzZXRT
dHJva2VTdHlsZShTdHJva2VTdHlsZSk7CisgICAgdm9pZCBzZXRTdHJva2VTdHlsZShTdHJva2VT
dHlsZSBzdHlsZSkgeyBtX3N0YXRlLnN0cm9rZVN0eWxlID0gc3R5bGU7IHVwZGF0ZVN0YXRlKG1f
c3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSk7IH0KICAgICBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc3Ryb2tlU3R5
bGU7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29s
b3ImKTsKICAgICBjb25zdCBDb2xvciYgc3Ryb2tlQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX3N0
YXRlLnN0cm9rZUNvbG9yOyB9CiAKLSAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4oUmVmPFBhdHRl
cm4+JiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihSZWY8UGF0
dGVybj4mJik7CiAgICAgUGF0dGVybiogc3Ryb2tlUGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKTsgfQogCi0gICAgdm9pZCBzZXRTdHJva2VHcmFkaWVu
dChSZWY8R3JhZGllbnQ+JiYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgPSB7IH0pOworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUmVmPEdyYWRpZW50PiYmLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKICAgICBHcmFkaWVudCogc3Ryb2tlR3JhZGllbnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpOyB9CiAKLSAgICB2
b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxl
IGZpbGxSdWxlKSB7IG1fc3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsgdXBkYXRlU3RhdGUobV9z
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxSdWxlQ2hhbmdlKTsgfQogICAgIFdpbmRS
dWxlIGZpbGxSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUnVsZTsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKICAgICBjb25z
dCBDb2xvciYgZmlsbENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsQ29sb3I7IH0K
IAotICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0RmlsbFBhdHRlcm4oUmVmPFBhdHRlcm4+JiYpOwogICAgIFBhdHRlcm4q
IGZpbGxQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsUGF0dGVybi5nZXQoKTsg
fQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaWxsR3JhZGllbnQoUmVmPEdyYWRpZW50
PiYmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mID0geyB9KTsKICAgICBHcmFkaWVudCogZmlsbEdy
YWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCk7IH0KIAot
ICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCk7CisgICAgdm9pZCBzZXRT
aGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7IG1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3Jtczsg
dXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zQ2hhbmdlKTsgfQogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZEFudGlhbGlhcyhib29sKTsKKyAgICB2b2lkIHNl
dFNob3VsZEFudGlhbGlhcyhib29sIHNob3VsZEFudGlhbGlhcykgeyBtX3N0YXRlLnNob3VsZEFu
dGlhbGlhcyA9IHNob3VsZEFudGlhbGlhczsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3ND
b250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSk7IH0KICAgICBib29sIHNob3VsZEFu
dGlhbGlhcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkQW50aWFsaWFzOyB9CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNob3VsZFNtb290aEZvbnRzKGJvb2wpOworICAgIHZv
aWQgc2V0U2hvdWxkU21vb3RoRm9udHMoYm9vbCBzaG91bGRTbW9vdGhGb250cykgeyBtX3N0YXRl
LnNob3VsZFNtb290aEZvbnRzID0gc2hvdWxkU21vb3RoRm9udHM7IHVwZGF0ZVN0YXRlKG1fc3Rh
dGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaG91bGRTbW9vdGhGb250c0NoYW5nZSk7IH0KICAg
ICBib29sIHNob3VsZFNtb290aEZvbnRzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5zaG91bGRT
bW9vdGhGb250czsgfQogCiAgICAgLy8gTm9ybWFsbHkgQ0cgZW5hYmxlcyBzdWJwaXhlbC1xdWFu
dGl6YXRpb24gYmVjYXVzZSBpdCBpbXByb3ZlcyB0aGUgcGVyZm9ybWFuY2Ugb2YgYWxpZ25pbmcg
Z2x5cGhzLgogICAgIC8vIEluIHNvbWUgY2FzZXMgd2UgaGF2ZSB0byBkaXNhYmxlIHRvIHRvIGVu
c3VyZSBhIGhpZ2gtcXVhbGl0eSBvdXRwdXQgb2YgdGhlIGdseXBocy4KLSAgICB2b2lkIHNldFNo
b3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyhib29sKTsKKyAgICB2b2lkIHNldFNob3VsZFN1YnBp
eGVsUXVhbnRpemVGb250cyhib29sIHNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cykgeyBtX3N0
YXRlLnNob3VsZFN1YnBpeGVsUXVhbnRpemVGb250cyA9IHNob3VsZFN1YnBpeGVsUXVhbnRpemVG
b250czsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFN1
YnBpeGVsUXVhbnRpemVGb250c0NoYW5nZSk7IH0KICAgICBib29sIHNob3VsZFN1YnBpeGVsUXVh
bnRpemVGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuc2hvdWxkU3VicGl4ZWxRdWFudGl6
ZUZvbnRzOyB9CiAKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkpIHsgbV9zdGF0ZS5pbWFnZUludGVycG9s
YXRpb25RdWFsaXR5ID0gcXVhbGl0eTsgdXBkYXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250
ZXh0U3RhdGU6OkltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHlDaGFuZ2UpOyB9CisgICAgSW50ZXJw
b2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsgfQogCi0jaWYgVVNFKENHKSB8fCBV
U0UoRElSRUNUMkQpCi0gICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICB2b2lkIGFw
cGx5RmlsbFBhdHRlcm4oKTsKLSAgICB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKKyAgICB2
b2lkIHNldEFscGhhKGZsb2F0IGFscGhhKSB7IG1fc3RhdGUuYWxwaGEgPSBhbHBoYTsgdXBkYXRl
U3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKTsgfQorICAg
IGZsb2F0IGFscGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQogCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpOwotICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q29tcG9z
aXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVuZE1vZGU6Ok5v
cm1hbCk7CisgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsgfQorICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmJsZW5kTW9kZTsgfQorCisg
ICAgdm9pZCBzZXREcmF3THVtaW5hbmNlTWFzayhib29sIGRyYXdMdW1pbmFuY2VNYXNrKSB7IG1f
c3RhdGUuZHJhd0x1bWluYW5jZU1hc2sgPSBkcmF3THVtaW5hbmNlTWFzazsgdXBkYXRlU3RhdGUo
bV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkRyYXdMdW1pbmFuY2VNYXNrQ2hhbmdlKTsg
fQorICAgIGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRy
YXdMdW1pbmFuY2VNYXNrOyB9CisKKyAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShUZXh0RHJh
d2luZ01vZGVGbGFncyBtb2RlKSB7IG1fc3RhdGUudGV4dERyYXdpbmdNb2RlID0gbW9kZTsgdXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNo
YW5nZSk7IH0KKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0RHJhd2luZ01vZGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlLnRleHREcmF3aW5nTW9kZTsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xv
ciYsIFNoYWRvd1JhZGl1c01vZGUgPSBTaGFkb3dSYWRpdXNNb2RlOjpEZWZhdWx0KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgY2xlYXJTaGFkb3coKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisK
KyAgICBib29sIGhhc1Zpc2libGVTaGFkb3coKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLnNoYWRv
d0NvbG9yLmlzVmlzaWJsZSgpOyB9CisgICAgYm9vbCBoYXNTaGFkb3coKSBjb25zdCB7IHJldHVy
biBoYXNWaXNpYmxlU2hhZG93KCkgJiYgKG1fc3RhdGUuc2hhZG93Qmx1ciB8fCBtX3N0YXRlLnNo
YWRvd09mZnNldC53aWR0aCgpIHx8IG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsgfQor
ICAgIGJvb2wgaGFzQmx1cnJlZFNoYWRvdygpIGNvbnN0IHsgcmV0dXJuIGhhc1Zpc2libGVTaGFk
b3coKSAmJiBtX3N0YXRlLnNoYWRvd0JsdXI7IH0KKworI2lmIEhBVkUoT1NfREFSS19NT0RFX1NV
UFBPUlQpCisgICAgdm9pZCBzZXRVc2VEYXJrQXBwZWFyYW5jZShib29sIHVzZURhcmtBcHBlYXJh
bmNlKSB7IG1fc3RhdGUudXNlRGFya0FwcGVhcmFuY2UgPSB1c2VEYXJrQXBwZWFyYW5jZTsgdXBk
YXRlU3RhdGUobV9zdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlVzZURhcmtBcHBlYXJhbmNl
Q2hhbmdlKTsgfQorICAgIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlLnVzZURhcmtBcHBlYXJhbmNlOyB9CiAjZW5kaWYKLSAgICBib29sIGlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29u
c3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzYXZlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7Cisg
ICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpID0gMDsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBzYXZlKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIHJlc3RvcmUoKTsKICAgICAKICAgICB1bnNpZ25lZCBzdGFja1Np
emUoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrLnNpemUoKTsgfQogCisjaWYgVVNFKENHKSB8fCBV
U0UoRElSRUNUMkQpCisgICAgLy8gRklYTUU6IFNob3VsZCB0aGVzZSByZWFsbHkgYmUgcHVibGlj
IEdyYXBoaWNzQ29udGV4dCBtZXRob2RzPworICAgIHZpcnR1YWwgdm9pZCBhcHBseVN0cm9rZVBh
dHRlcm4oKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKSA9IDA7CisK
KyAgICAvLyBGSVhNRTogQ2FuIHdlIG1ha2UgdGhpcyBhIHdoeSBpbnN0ZWFkIG9mIGEgd2hhdCwg
YW5kIHRoZW4gaGF2ZSBpdCBleGlzdCBjcm9zcy1wbGF0Zm9ybT8KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0SXNDQUxheWVyQ29udGV4dChib29sKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQ0FMYXll
ckNvbnRleHQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBGSVhNRTogQ2FuIHRoaXMgYmUgYSBHcmFw
aGljc0NvbnRleHRDRyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXI/IE9yIGp1c3QgYmUgcmVhZCBvZmYg
dGhlIGNvbnRleHQ/CisgICAgdmlydHVhbCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJv
b2wpID0gMDsKKyNlbmRpZgorCisgICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CisKKyAg
ICAvLyBQaXhlbCBTbmFwcGluZworCisgICAgZW51bSBSb3VuZGluZ01vZGUgeworICAgICAgICBS
b3VuZEFsbFNpZGVzLAorICAgICAgICBSb3VuZE9yaWdpbkFuZERpbWVuc2lvbnMKKyAgICB9Owor
ICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0
JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgPSAwOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwg
RmxvYXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7CisKKyAgICAv
LyBTaGFwZXMKKwogICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tp
bmcgYW5kIGZpbGxpbmcuCiAgICAgLy8gRklYTUU6IC4uLmV4Y2VwdCBkcmF3UmVjdCgpLCB3aGlj
aCBmaWxscyBwcm9wZXJseSBidXQgYWx3YXlzIHN0cm9rZXMKICAgICAvLyB1c2luZyBhIDEtcGl4
ZWwgc3Ryb2tlIGluc2V0IGZyb20gdGhlIHJlY3QgYm9yZGVycyAob2YgdGhlIGNvcnJlY3QKICAg
ICAvLyBzdHJva2UgY29sb3IpLgotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgYm9yZGVyVGhpY2tuZXNzID0gMSk7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MgPSAxKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpID0g
MDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImIGVsbGlwc2VDb2xvciwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yKTsKKworICAgIHZpcnR1YWwgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VC
Q09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKTsKIAotICAgIHZv
aWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBkcmF3UmFpc2VkRWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYgZWxsaXBzZUNvbG9yLCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBG
bG9hdFJlY3QmIGVsbGlwc2UpIHsgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIHsgc3Ry
b2tlRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBm
aWxsUGF0aChjb25zdCBQYXRoJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdHJva2VQYXRo
KGNvbnN0IFBhdGgmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiwgR3JhZGllbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpOworICAgIHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJl
Y3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpID0gMDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmLCBjb25zdCBDb2xvciYsIEJsZW5kTW9kZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0
LCBjb25zdCBDb2xvciYpOwogCi0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICB2b2lkIHN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdyYWRpZW50Jik7Ci0gICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUgPSBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29u
c3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2Rl
OjpOb3JtYWwpOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xv
ciYpOworICAgIHZpcnR1YWwgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0
IGxpbmVXaWR0aCkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBk
YXNoT2Zmc2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpID0gMDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5l
V2lkdGgpOworICAgIC8vIEltYWdlcywgUGF0dGVybnMsIGFuZCBNZWRpYQogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNp
emUmIHNlbGZTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2Vs
ZlNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBXRUJDT1JF
X0VYUE9SVCBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRQb2lu
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmll
bnRhdGlvbjo6RnJvbUltYWdlIH0pOwotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsK
LSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgSW1hZ2VPcmllbnRhdGlvbjo6RnJvbUltYWdlIH0pOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3UmVzdWx0IGRyYXdJbWFnZShJbWFnZSYsIGNvbnN0IEZs
b2F0UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IElt
YWdlT3JpZW50YXRpb246OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3Rp
bmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEltYWdlRHJhd1Jlc3Vs
dCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBG
bG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFnZU9y
aWVudGF0aW9uOjpGcm9tSW1hZ2UgfSk7CiAKLSAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFBv
aW50JiBzb3VyY2UsIGNvbnN0IEZsb2F0U2l6ZSYgdGlsZVNpemUsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0
aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVG
YWN0b3IsIEltYWdlOjpUaWxlUnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgSW1hZ2VEcmF3
UmVzdWx0IGRyYXdUaWxlZEltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRmxvYXRQb2ludCYgc291cmNlLCBjb25zdCBGbG9hdFNpemUmIHRpbGVTaXplLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVk
SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJl
Y3QmIHNvdXJjZSwgY29uc3QgRmxvYXRTaXplJiB0aWxlU2NhbGVGYWN0b3IsIEltYWdlOjpUaWxl
UnVsZSwgSW1hZ2U6OlRpbGVSdWxlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFBvaW50JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGlu
YXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgV0VCQ09SRV9F
WFBPUlQgdmlydHVhbCB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYgc291cmNlLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkcmF3
Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRQb2lu
dCYgZGVzdGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAg
dm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKLSAgICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nSW1hZ2VCdWZm
ZXIoUmVmUHRyPEltYWdlQnVmZmVyPiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CiAKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBp
bWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGls
ZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0aXZl
SW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBv
bGF0aW9uUXVhbGl0eSk7Ci0gICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYp
OwotICAgIHZvaWQgY2xpcFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmKTsKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHBhaW50RnJh
bWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pOwor
I2VuZGlmCiAKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBj
bGlwT3V0Um91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2
ZW5PZGQpOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBG
bG9hdFJlY3QmKTsKKyAgICAvLyBDbGlwcGluZwogCi0gICAgZW51bSBjbGFzcyBDbGlwVG9EcmF3
aW5nQ29tbWFuZHNSZXN1bHQgOiBib29sIHsgU3VjY2VzcywgRmFpbGVkVG9DcmVhdGVJbWFnZUJ1
ZmZlciB9OwotICAgIENsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGluYXRpb25Db2xv
clNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJik7Ci0gICAgCi0gICAg
SW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3Qg
RmxvYXRSZWN0JikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjbGlwUm91
bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYpOwogCi0gICAgdm9pZCBzZXRUZXh0RHJh
d2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MpOwotICAgIFRleHREcmF3aW5nTW9kZUZsYWdz
IHRleHREcmF3aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUudGV4dERyYXdpbmdNb2Rl
OyB9CisgICAgdmlydHVhbCB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGNsaXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSA9IFdp
bmRSdWxlOjpFdmVuT2RkKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKLSNpZiBI
QVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0VXNlRGFya0FwcGVhcmFuY2Uo
Ym9vbCk7Ci0gICAgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGUudXNlRGFya0FwcGVhcmFuY2U7IH0KLSNlbmRpZgorICAgIGVudW0gY2xhc3MgQ2xpcFRvRHJh
d2luZ0NvbW1hbmRzUmVzdWx0IDogYm9vbCB7IFN1Y2Nlc3MsIEZhaWxlZFRvQ3JlYXRlSW1hZ2VC
dWZmZXIgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIENsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlv
biwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0Nv
bnRleHQmKT4mJik7CiAKLSAgICBGbG9hdFNpemUgZHJhd1RleHQoY29uc3QgRm9udENhc2NhZGUm
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBP
cHRpb25hbDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOwotICAgIHZvaWQgZHJhd0dseXBo
cyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9v
dGhpbmdNb2RlKTsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKGNvbnN0IEZvbnRDYXNjYWRl
JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21TdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxs
b3B0KTsKLSAgICB2b2lkIGRyYXdCaWRpVGV4dChjb25zdCBGb250Q2FzY2FkZSYsIGNvbnN0IFRl
eHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgRm9udENhc2NhZGU6OkN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbiA9IEZvbnRDYXNjYWRlOjpEb05vdFBhaW50SWZGb250Tm90UmVhZHkpOworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgSW50UmVjdCBjbGlwQm91bmRzKCkgY29uc3Q7CiAKLSAgICB2
b2lkIGJ1aWxkZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIC8vIFRl
eHQKIAotICAgIGVudW0gUm91bmRpbmdNb2RlIHsKLSAgICAgICAgUm91bmRBbGxTaWRlcywKLSAg
ICAgICAgUm91bmRPcmlnaW5BbmREaW1lbnNpb25zCi0gICAgfTsKLSAgICBGbG9hdFJlY3Qgcm91
bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBSb3VuZGluZ01vZGUgPSBSb3VuZEFs
bFNpZGVzKTsKLQotICAgIEZsb2F0UmVjdCBjb21wdXRlVW5kZXJsaW5lQm91bmRzRm9yVGV4dChj
b25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBib29sIHByaW50aW5nLCBib29sIGRv
dWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJva2UpOwotICAgIHZvaWQg
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25z
dCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcyA9IGZh
bHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9j
dW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgRmxvYXRTaXplIGRyYXdUZXh0KGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9t
ID0gMCwgT3B0aW9uYWw8dW5zaWduZWQ+IHRvID0gV1RGOjpudWxsb3B0KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3QgR2x5cGhC
dWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51bUdseXBo
cywgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYs
IHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9u
dENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRl
OjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9u
dE5vdFJlYWR5KTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKCk7Ci0gICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiAobV90cmFuc3BhcmVuY3lDb3VudCA+IDApICYmIHN1cHBvcnRzVHJhbnNwYXJlbmN5TGF5
ZXJzKCk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgY29tcHV0ZVVuZGVybGluZUJv
dW5kc0ZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCBwcmludGluZyk7CisgICAgV0VCQ09S
RV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29s
aWRTdHJva2UpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzID0gZmFsc2UsIFN0cm9rZVN0eWxlID0gU29saWRTdHJv
a2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25z
dCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAwOwogCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTaGFkb3coY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImKTsKLSAgICAvLyBMZWdhY3kgc2hhZG93IGJsdXIgcmFkaXVzIGlzIHVzZWQgZm9y
IGNhbnZhcywgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KLSAgICAvLyBJdCBoYXMgZGlmZmVyZW50
IHRyZWF0bWVudCBvZiByYWRpaSA+IDhweC4KLSAgICB2b2lkIHNldExlZ2FjeVNoYWRvdyhjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYpOworICAgIC8vIFRyYW5zcGFy
ZW5jeSBMYXllcnMKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJTaGFkb3coKTsKLSAg
ICBib29sIGdldFNoYWRvdyhGbG9hdFNpemUmLCBmbG9hdCYsIENvbG9yJikgY29uc3Q7CisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQg
b3BhY2l0eSk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCk7CisgICAgYm9vbCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdCB7IHJldHVy
biAobV90cmFuc3BhcmVuY3lMYXllckNvdW50ID4gMCkgJiYgc3VwcG9ydHNUcmFuc3BhcmVuY3lM
YXllcnMoKTsgfQogCi0gICAgYm9vbCBoYXNWaXNpYmxlU2hhZG93KCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0ZS5zaGFkb3dDb2xvci5pc1Zpc2libGUoKTsgfQotICAgIGJvb2wgaGFzU2hhZG93KCkg
Y29uc3QgeyByZXR1cm4gaGFzVmlzaWJsZVNoYWRvdygpICYmIChtX3N0YXRlLnNoYWRvd0JsdXIg
fHwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3N0YXRlLnNoYWRvd09mZnNldC5o
ZWlnaHQoKSk7IH0KLSAgICBib29sIGhhc0JsdXJyZWRTaGFkb3coKSBjb25zdCB7IHJldHVybiBo
YXNWaXNpYmxlU2hhZG93KCkgJiYgbV9zdGF0ZS5zaGFkb3dCbHVyOyB9CisgICAgLy8gRm9jdXMg
UmluZ3MKIAotICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9h
dFJlY3Q+JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikgPSAwOworICAgIC8vIEZJWE1FOiBDYW4gd2UgaGlk
ZSB0aGVzZSBpbiB0aGUgQ0cgaW1wbGVtZW50YXRpb24/IE9yIGVsc2V3aGVyZT8KICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGlt
ZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJv
b2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9j
dXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcs
IGNvbnN0IENvbG9yJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYpID0gMDsKICNlbmRpZgogCi0gICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVD
YXApOwotICAgIHZvaWQgc2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQgZGFzaE9m
ZnNldCk7Ci0gICAgdm9pZCBzZXRMaW5lSm9pbihMaW5lSm9pbik7Ci0gICAgdm9pZCBzZXRNaXRl
ckxpbWl0KGZsb2F0KTsKLQotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQpOwotICAgIGZsb2F0IGFs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hbHBoYTsgfQotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9k
ZSA9IEJsZW5kTW9kZTo6Tm9ybWFsKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVP
cGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOyB9Ci0g
ICAgQmxlbmRNb2RlIGJsZW5kTW9kZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUu
YmxlbmRNb2RlOyB9Ci0KLSAgICB2b2lkIHNldERyYXdMdW1pbmFuY2VNYXNrKGJvb2wpOwotICAg
IGJvb2wgZHJhd0x1bWluYW5jZU1hc2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmRyYXdMdW1p
bmFuY2VNYXNrOyB9Ci0KLSAgICAvLyBUaGlzIGNsaXAgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IGJ5
IDxjYW52YXM+IGNvZGUuIEl0IGFsbG93cwotICAgIC8vIGltcGxlbWVudGF0aW9ucyB0byBoYW5k
bGUgY2xpcHBpbmcgb24gdGhlIGNhbnZhcyBkaWZmZXJlbnRseSBzaW5jZQotICAgIC8vIHRoZSBk
aXNjaXBsaW5lIGlzIGRpZmZlcmVudC4KLSAgICB2b2lkIGNhbnZhc0NsaXAoY29uc3QgUGF0aCYs
IFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQ
YXRoJik7CisgICAgLy8gVHJhbnNmb3JtcwogCi0gICAgdm9pZCBzY2FsZShmbG9hdCBzKQotICAg
IHsKLSAgICAgICAgc2NhbGUoeyBzLCBzIH0pOwotICAgIH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xl
SW5SYWRpYW5zKTsKKyAgICB2b2lkIHNjYWxlKGZsb2F0IHMpIHsgc2NhbGUoeyBzLCBzIH0pOyB9
CisgICAgdmlydHVhbCB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSA9IDA7CiAgICAgdm9pZCB0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKSB7IHRyYW5zbGF0ZShzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOyB9CiAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRQb2ludCYgcCkg
eyB0cmFuc2xhdGUocC54KCksIHAueSgpKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotCi0gICAgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0
IFVSTCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoZmxv
YXQgeCwgZmxvYXQgeSkgPSAwOwogCi0gICAgdm9pZCBzZXREZXN0aW5hdGlvbkZvclJlY3QoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIGFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmKTsKLQotICAg
IHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgc2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZpcnR1YWwgdm9pZCBjb25jYXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJikgPSAwOwogCiAgICAgZW51bSBJbmNsdWRlRGV2aWNlU2NhbGUgeyBE
ZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlLCBQb3NzaWJseUluY2x1ZGVEZXZpY2VTY2FsZSB9
OwotICAgIFdFQkNPUkVfRVhQT1JUIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmlj
ZVNjYWxlIGluY2x1ZGVTY2FsZSA9IFBvc3NpYmx5SW5jbHVkZURldmljZVNjYWxlKSBjb25zdDsK
KyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0g
UG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0ID0gMDsKIAogICAgIC8vIFRoaXMgZnVu
Y3Rpb24gYXBwbGllcyB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciB0byB0aGUgY29udGV4dCwgbWFr
aW5nIHRoZSBjb250ZXh0IGNhcGFibGUgb2YKICAgICAvLyBhY3RpbmcgYXMgYSBiYXNlLWxldmVs
IGNvbnRleHQgZm9yIGEgSGlEUEkgZW52aXJvbm1lbnQuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KTsKLSAgICB2b2lkIHBsYXRmb3JtQXBwbHlE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7Ci0gICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29u
c3Q7Ci0gICAgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGZhY3RvcikgeyBzY2FsZShmYWN0b3Ip
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yKCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjYWxlRmFjdG9yRm9yRHJhd2luZyhjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpIGNvbnN0OwogCi0g
ICAgdm9pZCBzZXRDb250ZW50ZnVsUGFpbnREZXRlY3RlZCgpIHsgbV9jb250ZW5mdWxQYWludERl
dGVjdGVkID0gdHJ1ZTsgfQotICAgIGJvb2wgY29udGVuZnVsUGFpbnREZXRlY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY29udGVuZnVsUGFpbnREZXRlY3RlZDsgfQorICAgIC8vIExpbmtzCiAKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwYWludEZyYW1lRm9yTWVk
aWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKTsKLSNlbmRpZgor
ICAgIHZpcnR1YWwgdm9pZCBzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYsIGNvbnN0IEZsb2F0UmVj
dCYpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBT
dHJpbmcmLCBjb25zdCBGbG9hdFJlY3QmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRkRGVzdGlu
YXRpb25BdFBvaW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSB7IH0KKworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgLy8gQ29udGVudGZ1bCBQYWludCBEZXRlY3Rpb24KKworICAgIHZvaWQgc2V0
Q29udGVudGZ1bFBhaW50RGV0ZWN0ZWQoKSB7IG1fY29udGVudGZ1bFBhaW50RGV0ZWN0ZWQgPSB0
cnVlOyB9CisgICAgYm9vbCBjb250ZW5mdWxQYWludERldGVjdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZDsgfQogCisgICAgLy8gRklYTUU6IE5vdGhpbmcgaW4g
dGhpcyBzZWN0aW9uIGJlbG9uZ3MgaGVyZSwgYW5kIHNob3VsZCBiZSBtb3ZlZCBlbHNld2hlcmUu
CiAjaWYgT1MoV0lORE9XUykKICAgICBIREMgZ2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVj
dCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpOyAvLyBUaGUgcGFzc2VkIGluIHJlY3QgaXMgdXNl
ZCB0byBjcmVhdGUgYSBiaXRtYXAgZm9yIGNvbXBvc2l0aW5nIGluc2lkZSB0cmFuc3BhcmVuY3kg
bGF5ZXJzLgogICAgIHZvaWQgcmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQywgY29uc3QgSW50UmVj
dCYsIGJvb2wgc3VwcG9ydEFscGhhQmxlbmQpOyAvLyBUaGUgcGFzc2VkIGluIEhEQyBzaG91bGQg
YmUgdGhlIG9uZSBoYW5kZWQgYmFjayBieSBnZXRXaW5kb3dzQ29udGV4dC4KICAgICBIREMgaGRj
KCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIEdyYXBoaWNzQ29udGV4dChIREMsIGJv
b2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgogCisgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIG5vdCBleGlzdDsgd2UgbmVlZCBhIGRpZmZlcmVudCBwbGFjZSB0
bworICAgIC8vIHB1dCBjb2RlIHNoYXJlZCBiZXR3ZWVuIFdpbmRvd3MgQ0cgYW5kIFdpbmRvd3Mg
Q2Fpcm8gYmFja2VuZHMuCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
KyNpZiBQTEFURk9STShXSU4pCiAgICAgLy8gV2hlbiBzZXQgdG8gdHJ1ZSwgY2hpbGQgd2luZG93
cyBzaG91bGQgYmUgcmVuZGVyZWQgaW50byB0aGlzIGNvbnRleHQKICAgICAvLyByYXRoZXIgdGhh
biBhbGxvd2luZyB0aGVtIGp1c3QgdG8gcmVuZGVyIHRvIHRoZSBzY3JlZW4uIERlZmF1bHRzIHRv
CiAgICAgLy8gZmFsc2UuCkBAIC01ODUsNjEgKzU5OCwxMyBAQCBwdWJsaWM6CiAjZW5kaWYgLy8g
UExBVEZPUk0oV0lOKQogI2VuZGlmIC8vIE9TKFdJTkRPV1MpCiAKLSAgICBzdGF0aWMgdm9pZCBh
ZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQb2ludCYgcDEsIEZsb2F0UG9pbnQmIHAy
LCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUpOwotCi0gICAgYm9vbCBzdXBwb3J0c0lu
dGVybmFsTGlua3MoKSBjb25zdDsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGwqIGltcGwoKSB7
IHJldHVybiBtX2ltcGwuZ2V0KCk7IH0KLQogcHJpdmF0ZToKLSAgICB2b2lkIHBsYXRmb3JtSW5p
dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCopOwotICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7
Ci0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgdm9pZCBwbGF0Zm9ybUluaXQoSERDLCBib29sIGhh
c0FscGhhID0gZmFsc2UpOwotI2VuZGlmCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgdm9pZCBw
bGF0Zm9ybUluaXQoSERDLCBJRDJEMVJlbmRlclRhcmdldCoqLCBSRUNULCBib29sIGhhc0FscGhh
ID0gZmFsc2UpOwotICAgIHZvaWQgcGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KiwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUpOwotI2VuZGlmCi0KLSAgICB2b2lkIHNhdmVQ
bGF0Zm9ybVN0YXRlKCk7Ci0gICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOwotCi0gICAg
dm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShUZXh0RHJhd2luZ01vZGVGbGFncyk7Ci0K
LSAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICB2b2lk
IHNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUpOwotICAgIHZvaWQgc2V0UGxhdGZv
cm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUZpbGxDb2xv
cihjb25zdCBDb2xvciYpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhi
b29sKTsKLSAgICB2b2lkIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCk7Ci0gICAg
dm9pZCBzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1
YWxpdHkpOwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygp
OwotCi0gICAgdm9pZCBzZXRQbGF0Zm9ybUFscGhhKGZsb2F0KTsKLSAgICB2b2lkIHNldFBsYXRm
b3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUgPSBCbGVu
ZE1vZGU6Ok5vcm1hbCk7Ci0KLSAgICB2b2lkIGJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIo
KTsKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpOworICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KIAorcHJvdGVjdGVkOgogICAgIHZvaWQgZmlsbEVsbGlwc2VBc1BhdGgoY29uc3QgRmxv
YXRSZWN0Jik7CiAgICAgdm9pZCBzdHJva2VFbGxpcHNlQXNQYXRoKGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0gICAgdm9pZCBwbGF0Zm9ybUZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotICAg
IHZvaWQgcGxhdGZvcm1TdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpOwotCi0gICAgdm9p
ZCBwbGF0Zm9ybUZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3Qg
Q29sb3ImKTsKLQotICAgIHZvaWQgZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1JbWFn
ZVB0ciYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jik7Ci0gICAgdm9pZCBkcmF3UGxhdGZvcm1QYXR0ZXJuKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
LCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwotCiAgICAgRmxvYXRSZWN0IGNvbXB1
dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29uc3QgRmxvYXRSZWN0Jiwg
Ym9vbCBwcmludGluZywgQ29sb3ImKTsKIAogICAgIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0
aEZvclN0cm9rZVdpZHRoKGZsb2F0KSBjb25zdDsKQEAgLTY0NywxNSArNjEyLDEzIEBAIHByaXZh
dGU6CiAgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tl
V2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBzdHJva2VXaWR0aCkgY29uc3Q7CiAgICAg
VmVjdG9yPEZsb2F0UG9pbnQ+IGNlbnRlckxpbmVBbmRDdXRPZmZDb3JuZXJzKGJvb2wgaXNWZXJ0
aWNhbExpbmUsIGZsb2F0IGNvcm5lcldpZHRoLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2lu
dCBwb2ludDIpIGNvbnN0OwogCi0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBt
X2RhdGEgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dElt
cGw+IG1faW1wbDsKLQogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlIG1fc3RhdGU7CisKK3ByaXZh
dGU6CiAgICAgVmVjdG9yPEdyYXBoaWNzQ29udGV4dFN0YXRlLCAxPiBtX3N0YWNrOwogCi0gICAg
Y29uc3QgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zIG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25z
IHsgUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25lIH07Ci0gICAgdW5zaWduZWQgbV90cmFu
c3BhcmVuY3lDb3VudCB7IDAgfTsKLSAgICBib29sIG1fY29udGVuZnVsUGFpbnREZXRlY3RlZCB7
IGZhbHNlIH07CisgICAgdW5zaWduZWQgbV90cmFuc3BhcmVuY3lMYXllckNvdW50IHsgMCB9Owor
ICAgIGJvb2wgbV9jb250ZW50ZnVsUGFpbnREZXRlY3RlZCB7IGZhbHNlIH07CiB9OwogCiBjbGFz
cyBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHsKQEAgLTc0NCw4ICs3MDcsNiBAQCBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1fc3RhY2tTaXplOwogfTsKIAotCi0KIGNsYXNzIEludGVycG9sYXRp
b25RdWFsaXR5TWFpbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgSW50ZXJwb2xhdGlv
blF1YWxpdHlNYWludGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eVRvVXNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0SW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJbXBsLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIxNGEwYTg5MmI2ZTk5Zjk5ZGI4MjNj
ZWEzNTIxYjRjNWZmNTVjNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRJ
bXBsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HcmFw
aGljc0NvbnRleHRJbXBsOjpHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLSAgICA6IG1fZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dEltcGw6On5HcmFwaGljc0NvbnRleHRJbXBsKCkKLXsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0SW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjJm
ZmI0NTQ1YWUyMzU2ZjdjMWZiZjc4YzA0OTRiM2NhY2NlM2IxLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dEltcGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3By
YWdtYSBvbmNlCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHRJbXBs
KTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRJbXBsKEdyYXBoaWNzQ29udGV4dCYpOwot
ICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGwoKTsKLQotICAgIEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaGljc0NvbnRleHQ7IH0K
LQotICAgIHZpcnR1YWwgYm9vbCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBw
bGF0Zm9ybUNvbnRleHQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0
U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjbGVhclNoYWRvdygpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRM
aW5lQ2FwKExpbmVDYXApID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0TGluZURhc2goY29uc3Qg
RGFzaEFycmF5JiwgZmxvYXQgZGFzaE9mZnNldCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRM
aW5lSm9pbihMaW5lSm9pbikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRNaXRlckxpbWl0KGZs
b2F0KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBD
b2xvciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
R3JhZGllbnQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNv
bnN0IENvbG9yJiwgQmxlbmRNb2RlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHJv
dW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxQ
YXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3Ryb2tlUGF0
aChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpID0gMDsKLQotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTdHJva2VQ
YXR0ZXJuKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgPSAwOwot
I2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0dseXBocyhjb25zdCBGb250JiwgY29uc3Qg
R2x5cGhCdWZmZXJHbHlwaCosIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSosIHVuc2lnbmVkIG51
bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
KSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRSZWN0JiBzb3VyY2UsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oTmF0
aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBkcmF3UmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3MpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYs
IGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcs
IGJvb2wgZG91YmxlTGluZXMpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZHJhd0RvdHNGb3JEb2N1
bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGRyYXdQYXRoKGNvbnN0IFBhdGgmKSA9IDA7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBD
b2xvciYpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBzYXZlKCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCByZXN0b3JlKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSA9IDA7Ci0g
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBjbGlwUGF0aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpID0gMDsKLSAgICB2aXJ0dWFsIEludFJl
Y3QgY2xpcEJvdW5kcygpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNs
aXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBE
ZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYm
IGRyYXdpbmdGdW5jdGlvbikgPSAwOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
aW5hdGlvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVkaWEoY29u
c3QgTWVkaWFQbGF5ZXImKSBjb25zdCA9IDA7Ci0jZW5kaWYKLSAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCkgPSAwOwotCi0gICAgdmlydHVhbCBGbG9h
dFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0NvbnRl
eHQ6OlJvdW5kaW5nTW9kZSkgPSAwOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7Ci0gICAgR3JhcGhpY3NDb250ZXh0JiBtX2dyYXBoaWNzQ29udGV4dDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmNwcAppbmRleCA0NDBmNzI1MzU4MmNjNjQ5MzE1ZjI0NzNiMzkwMzIyYjBhNjYy
MDg1Li42YWI0MzI3MzI2ZGEwODJkODExZWU0MTI4ZmNkNjRhYjI1NjllNjlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCkBAIC0xODgsOCArMTg4LDkgQEAg
SW1hZ2VEcmF3UmVzdWx0IEltYWdlOjpkcmF3VGlsZWQoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWMKICAgICB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmUtdGVzdCB0aGlzIGFuZCByZW1vdmUgdGhpcyBp
T1MgYmVoYXZpb3IgZGlmZmVyZW5jZSBpZiBwb3NzaWJsZS4KICAgICAvLyBXaGVuIHVzaW5nIGFj
Y2VsZXJhdGVkIGRyYXdpbmcgb24gaU9TLCBpdCdzIGZhc3RlciB0byBzdHJldGNoIGFuIGltYWdl
IHRoYW4gdG8gdGlsZSBpdC4KLSAgICBpZiAoY3R4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7
CisgICAgaWYgKGN0eHQucmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkKSB7CiAgICAgICAgIGlmIChzaXplKCkud2lkdGgoKSA9PSAxICYmIGludGVyc2VjdGlvbihv
bmVUaWxlUmVjdCwgZGVzdFJlY3QpLmhlaWdodCgpID09IGRlc3RSZWN0LmhlaWdodCgpKSB7CiAg
ICAgICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVNyY1JlY3Q7CiAgICAgICAgICAgICB2aXNpYmxl
U3JjUmVjdC5zZXRYKDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgK
aW5kZXggNGQzZjQzMGM2MTdkMTAwMTZlZjUzODBmZDg5YTk0Y2IwYmFlYTZjMy4uMTc2NDc0N2Q2
MTQwY2YxMTZjOWM2NDI2ZGRjOTcxYWMyYmViOTgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCkBAIC03MSw3ICs3MSw2IEBAIGNsYXNzIEFmZmluZVRyYW5zZm9y
bTsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBGbG9hdFNpemU7CiBjbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsOwogY2xhc3MgU2hhcmVkQnVmZmVyOwog
c3RydWN0IExlbmd0aDsKIApAQCAtODAsNyArNzksNiBAQCBjbGFzcyBJbWFnZU9ic2VydmVyOwog
CiBjbGFzcyBJbWFnZSA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlPiB7CiAgICAgZnJpZW5kIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0SW1w
bDsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbWFnZSgpOwogICAgIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTnVsbEdyYXBoaWNzQ29udGV4dC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNmOTE5ZmI3YzlhZjI2NGFjOTU4OGQ1MjJiZjE2ZjY0MjEwZmUyNDQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9OdWxsR3JhcGhpY3ND
b250ZXh0LmgKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE51bGxHcmFwaGljc0NvbnRleHQg
OiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFBhaW50
SW52YWxpZGF0aW9uUmVhc29ucyA6IHVpbnQ4X3QgeworICAgICAgICBOb25lLAorICAgICAgICBJ
bnZhbGlkYXRpbmdDb250cm9sVGludHMsCisgICAgICAgIEludmFsaWRhdGluZ0ltYWdlc1dpdGhB
c3luY0RlY29kZXMsCisgICAgICAgIERldGVjdGluZ0NvbnRlbnRmdWxQYWludAorICAgIH07CisK
KyAgICBOdWxsR3JhcGhpY3NDb250ZXh0KFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyByZWFzb25z
KQorICAgICAgICA6IG1fcGFpbnRJbnZhbGlkYXRpb25SZWFzb25zKHJlYXNvbnMpCisgICAgewor
ICAgIH0KKworcHJpdmF0ZToKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2b2lk
IHNldElzQ0FMYXllckNvbnRleHQoYm9vbCkgZmluYWwgeyB9CisgICAgYm9vbCBpc0NBTGF5ZXJD
b250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgorCisgICAgYm9v
bCBwYWludGluZ0Rpc2FibGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJv
b2wgcGVyZm9ybWluZ1BhaW50SW52YWxpZGF0aW9uKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9w
YWludEludmFsaWRhdGlvblJlYXNvbnMgIT0gUGFpbnRJbnZhbGlkYXRpb25SZWFzb25zOjpOb25l
OyB9CisgICAgYm9vbCBpbnZhbGlkYXRpbmdDb250cm9sVGludHMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX3BhaW50SW52YWxpZGF0aW9uUmVhc29ucyA9PSBQYWludEludmFsaWRhdGlvblJlYXNv
bnM6OkludmFsaWRhdGluZ0NvbnRyb2xUaW50czsgfQorICAgIGJvb2wgaW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcGFpbnRJbnZhbGlk
YXRpb25SZWFzb25zID09IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6SW52YWxpZGF0aW5nSW1h
Z2VzV2l0aEFzeW5jRGVjb2RlczsgfQorICAgIGJvb2wgZGV0ZWN0aW5nQ29udGVudGZ1bFBhaW50
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9wYWludEludmFsaWRhdGlvblJlYXNvbnMgPT0gUGFp
bnRJbnZhbGlkYXRpb25SZWFzb25zOjpEZXRlY3RpbmdDb250ZW50ZnVsUGFpbnQ7IH0KKworICAg
IHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgZmluYWwgeyB9CisKKyNpZiBVU0UoQ0cpIHx8
IFVTRShESVJFQ1QyRCkKKyAgICB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpIGZp
bmFsIHsgfQorI2VuZGlmCisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9CisKKyAgICB2b2lkIGRyYXdQYXR0
ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWwgeyB9
CisKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB7IH07IH0K
KworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0
ZXJuKCkgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRoJikgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZv
aWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgPSAxKSBmaW5hbCB7IH0KKyAgICB2
b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWwg
eyB9CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9rZVBh
dGgoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyAgICB2b2lkIHN0cm9r
ZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcFBh
dGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlID0gV2luZFJ1bGU6OkV2ZW5PZGQpIGZpbmFsIHsgfQor
ICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Um91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWwgeyByZXR1cm4gcmVjdDsgfQorICAg
IHZvaWQgZHJhd0xpbmVGb3JUZXh0KGNvbnN0IEZsb2F0UmVjdCYsIGJvb2wsIGJvb2wgPSBmYWxz
ZSwgU3Ryb2tlU3R5bGUgPSBTb2xpZFN0cm9rZSkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCwgY29uc3QgRGFzaEFycmF5JiwgYm9v
bCwgYm9vbCA9IGZhbHNlLCBTdHJva2VTdHlsZSA9IFNvbGlkU3Ryb2tlKSBmaW5hbCB7IH0KKyAg
ICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmluYWwgeyB9CisgICAgdm9pZCBzZXRMaW5lRGFz
aChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCkgZmluYWwgeyB9CisgICAgdm9pZCBzZXRMaW5lSm9p
bihMaW5lSm9pbikgZmluYWwgeyB9CisgICAgdm9pZCBzZXRNaXRlckxpbWl0KGZsb2F0KSBmaW5h
bCB7IH0KKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIGZpbmFsIHsgfQorICAgIHZvaWQg
c2NhbGUoY29uc3QgRmxvYXRTaXplJikgZmluYWwgeyB9CisgICAgdm9pZCByb3RhdGUoZmxvYXQp
IGZpbmFsIHsgfQorICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWwgeyB9Cisg
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9CisgICAg
dm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJikgZmluYWwgeyB9CisgICAgQWZmaW5l
VHJhbnNmb3JtIGdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgPSBQb3NzaWJseUluY2x1ZGVEZXZp
Y2VTY2FsZSkgY29uc3QgZmluYWwgeyByZXR1cm4geyB9OyB9CisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgZmluYWwgeyB9CisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7
IH0KKyAgICB2b2lkIHNhdmUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbCB7
IH0KKworICAgIHZvaWQgZHJhd1JhaXNlZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBjb25zdCBDb2xvciYpIGZpbmFsIHsgfQorCisgICAgRmxvYXRTaXplIGRyYXdUZXh0
KGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1
bnNpZ25lZCA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiA9IFdURjo6bnVsbG9wdCkgZmluYWwgeyBy
ZXR1cm4geyB9OyB9CisKKyAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEds
eXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCwgY29u
c3QgRmxvYXRQb2ludCYsIEZvbnRTbW9vdGhpbmdNb2RlKSBmaW5hbCB7IH0KKworICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgQXRvbVN0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCA9IDAsIE9wdGlvbmFs
PHVuc2lnbmVkPiA9IFdURjo6bnVsbG9wdCkgZmluYWwgeyB9CisgICAgdm9pZCBkcmF3QmlkaVRl
eHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYs
IEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9O
b3RQYWludElmRm9udE5vdFJlYWR5KSBmaW5hbCB7IH0KKworICAgIHZvaWQgZHJhd0RvdHNGb3JE
b2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkg
ZmluYWwgeyB9CisKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgSW1hZ2VPcmllbnRh
dGlvbjo6RnJvbUltYWdlIH0pIGZpbmFsIHsgcmV0dXJuIEltYWdlRHJhd1Jlc3VsdDo6RGlkTm90
aGluZzsgfQorICAgIEltYWdlRHJhd1Jlc3VsdCBkcmF3SW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IEltYWdlT3JpZW50YXRpb246
OkZyb21JbWFnZSB9KSBmaW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7
IH0KKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd0ltYWdlKEltYWdlJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyBJbWFn
ZU9yaWVudGF0aW9uOjpGcm9tSW1hZ2UgfSkgZmluYWwgeyByZXR1cm4gSW1hZ2VEcmF3UmVzdWx0
OjpEaWROb3RoaW5nOyB9CisKKyAgICBJbWFnZURyYXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1h
Z2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBm
aW5hbCB7IHJldHVybiBJbWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKyAgICBJbWFnZURy
YXdSZXN1bHQgZHJhd1RpbGVkSW1hZ2UoSW1hZ2UmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFNpemUmLCBJbWFnZTo6VGlsZVJ1bGUsIEltYWdlOjpUaWxl
UnVsZSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IHJldHVybiBJ
bWFnZURyYXdSZXN1bHQ6OkRpZE5vdGhpbmc7IH0KKworICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhj
b25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwg
Y29uc3QgQ29sb3ImKSBmaW5hbCB7IH0KKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFs
IHsgfQorICAgIHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGRv
dWJsZSwgYm9vbCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisjZW5kaWYKKworICAgIHZvaWQg
ZHJhd0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbCB7IH0KKyAg
ICB2b2lkIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+LCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pIGZpbmFsOworCisgICAgdm9pZCBjbGlwUm91bmRlZFJlY3QoY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYpIGZpbmFsIHsgfQorICAgIHZvaWQgY2xpcE91dFJvdW5kZWRSZWN0KGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmKSBmaW5hbCB7IH0KKworICAgIENsaXBUb0RyYXdpbmdDb21tYW5k
c1Jlc3VsdCBjbGlwVG9EcmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVz
dGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikg
ZmluYWwgeyByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOyB9Cisg
ICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYp
IGZpbmFsIHsgfQorCisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVu
dCYpIGZpbmFsIHsgfQorICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwp
IGZpbmFsIHsgfQorCisgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYsIGNvbnN0IENvbG9yJiwgQmxlbmRNb2RlID0gQmxlbmRNb2RlOjpOb3JtYWwpIGZpbmFs
IHsgfQorICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWwgeyB9CisKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBj
b25zdCBGbG9hdFJlY3QmKSBmaW5hbCB7IH0KKyNlbmRpZgorCisjaWYgT1MoV0lORE9XUykKKyAg
ICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4
dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZiAvLyBPUyhXSU5ET1dT
KQorCitwcml2YXRlOgorICAgIGNvbnN0IFBhaW50SW52YWxpZGF0aW9uUmVhc29ucyBtX3BhaW50
SW52YWxpZGF0aW9uUmVhc29ucyB7IFBhaW50SW52YWxpZGF0aW9uUmVhc29uczo6Tm9uZSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCBhYWQ2ODM2YzM1NTYyOTU2OTIxYWQzY2Jl
ODA4ZTcwMzZlNjZjNTNkLi4xODk1YzIxOTM3NjUxOWMyYzgwZGRkMzA2YTI0ZWY3NjRhOWNiMzQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cApAQCAtMTk4LDcgKzE5OCw5IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgR3JhcGhp
Y3NDb250ZXh0U3RhdGUmIHN0YXRlKQogICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhz
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcykKIHsKICNpZiBVU0UoQ0cpCi0gICAgaWYgKHN0
YXRlLnNoYWRvd3NVc2VMZWdhY3lSYWRpdXMpIHsKKyAgICAvLyBDb3JlIEdyYXBoaWNzIGluY29y
cmVjdGx5IHJlbmRlcnMgc2hhZG93cyB3aXRoIHJhZGl1cyA+IDhweCAoPHJkYXI6Ly9wcm9ibGVt
LzgxMDM0NDI+KSwKKyAgICAvLyBidXQgd2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGlzIGJ1Z2d5IGJl
aGF2aW9yIGZvciBjYW52YXMgYW5kIC13ZWJraXQtYm94LXNoYWRvdy4KKyAgICBpZiAoc3RhdGUu
c2hhZG93UmFkaXVzTW9kZSA9PSBTaGFkb3dSYWRpdXNNb2RlOjpMZWdhY3kpIHsKICAgICAgICAg
ZmxvYXQgc2hhZG93Qmx1ciA9IHJhZGl1c1RvTGVnYWN5UmFkaXVzKHN0YXRlLnNoYWRvd0JsdXIp
OwogICAgICAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUoc2hhZG93Qmx1ciwgc2hhZG93Qmx1
cik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggMTc5NGMwNjdiMWJiNjBmZTQ5ZDRlOGEzNjIw
MGQ3NzJhMzMyZTdjMS4uMWY0Y2Q0NDU0M2YwZTkzODJiNTBkMTBhOTdhMGMxOWEwZDA4YWM1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFw
aGljc0xheWVyQ0EuY3BwCkBAIC0xNzQwLDkgKzE3NDAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cmVjdXJzaXZlQ29tbWl0Q2hhbmdlcyhDb21taXRTdGF0ZSYgY29tbWl0U3RhdGUsIGNvbnN0
IFRyYQogICAgICAgICAKICAgICAgICAgRmxvYXRSZWN0IGluaXRpYWxDbGlwKGJvdW5kc09yaWdp
bigpLCBzaXplKCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KFsmXShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPERp
c3BsYXlMaXN0OjpSZWNvcmRlcj4oY29udGV4dCwgKm1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29u
dGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBBZmZpbmVUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIH0p
OworICAgICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIgY29udGV4dCgqbV9kaXNwbGF5TGlzdCwg
R3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgaW5pdGlhbENsaXAsIEFmZmluZVRyYW5zZm9ybSgpKTsK
ICAgICAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNw
cAppbmRleCAzYjQ0OGFmMDRmYTI1NWU0Zjg0M2VmNDI5ZWJkNzdjOWExZDg2OGFiLi42ODgxMjIx
YjA0NThkY2M5NDg0ZjM0ZjQxNjYzZGRkNzRlMTI4NzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5o
IgogI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCiAjaW5jbHVkZSAiR0RJVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1DQUxheWVyV2luSW50ZXJuYWwuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC04OTAsNyAr
ODkwLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW46OmRyYXdUZXh0QXRQb2ludChDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0dGbG9hdCB4LCBDR0Zsb2EKICAgICBGb250Q2FzY2FkZSBmb250ID0g
Rm9udENhc2NhZGUoV1RGTW92ZShkZXNjKSwgMCwgMCk7CiAgICAgZm9udC51cGRhdGUobnVsbHB0
cik7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY2coY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250
ZXh0Q0cgY2coY29udGV4dCk7CiAgICAgY2cuc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CiAg
ICAgY2cuZHJhd1RleHQoZm9udCwgVGV4dFJ1bih0ZXh0KSwgSW50UG9pbnQoeCwgeSkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbkludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKaW5kZXggZDNmNDQ4YWNh
OTAzMGY3N2Q3OGU1N2M0MmYzMDUyZDZhOTg5MzFjNC4uZGJkMzYzZTYxM2NlYjA3ZTAzNjY3MzM1
NWQwNDdlZGFhYTUyZTUzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJu
YWwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaWYgVVNFKENBKQogCiAjaW5jbHVkZSAiRm9udENh
c2NhZGUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllci5oIgogI2luY2x1ZGUgIlRp
bGVDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCkBAIC05NCw3ICs5NCw3
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayhDQUNG
TGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0CiAKICAgICBQbGF0Zm9ybUNBTGF5ZXI6OmZsaXBD
b250ZXh0KGNvbnRleHQsIGxheWVyQm91bmRzLnNpemUuaGVpZ2h0KTsKIAotICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cg
Z3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgLy8gSXQncyBpbXBvcnRhbnQgdG8gZ2V0
IHRoZSBjbGlwIGZyb20gdGhlIGNvbnRleHQsIGJlY2F1c2UgaXQgbWF5IGJlIHNpZ25pZmljYW50
bHkKICAgICAvLyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXll
cnMpCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6
ZHJhd1JlcGFpbnRDb3VudGVycyhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb24KICAgICBlbHNl
CiAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IGNhY2hlZENHQ29sb3IoQ29sb3I6OnJlZCk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgIEdyYXBo
aWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKICAgICBQbGF0Zm9ybUNBTGF5
ZXI6OmRyYXdSZXBhaW50SW5kaWNhdG9yKGdyYXBoaWNzQ29udGV4dCwgb3duZXIoKSwgZHJhd0Nv
dW50LCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVy
V2luLmNwcAppbmRleCBjNWE3M2U4ZDNhZTliYjQ5YTk2YmUyN2Y1MzI3ZTA2YzA2MjE0ZmMzLi5i
NTNhMzM3YmE0Y2NkY2YyM2Y3ODU0OTA1YjI3NjA3ZWM5MGMwNjRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XZWJU
aWxlZEJhY2tpbmdMYXllcldpbi5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIFVTRShDQSkK
IAotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGlsZUNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJUaWxlZEJhY2tpbmcuaCIKQEAgLTg2LDcgKzg2LDcgQEAgdm9p
ZCBXZWJUaWxlZEJhY2tpbmdMYXllcldpbjo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBj
YUxheWVyLCBDR0NvbnRleHRSZWYKICAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCA9
IG93bmVyKCktPm93bmVyKCk7CiAgICAgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRlc09yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gY2xpZW50LT5wbGF0Zm9ybUNBTGF5ZXJDb250
ZW50c09yaWVudGF0aW9uKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
KGNvbnRleHQpOworICAgIEdyYXBoaWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKIAogICAgIC8vIEl0J3MgaW1wb3J0YW50IHRvIGdldCB0aGUgY2xpcCBmcm9tIHRoZSBjb250
ZXh0LCBiZWNhdXNlIGl0IG1heSBiZSBzaWduaWZpY2FudGx5CiAgICAgLy8gc21hbGxlciB0aGFu
IHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCmluZGV4IGNmNDgzNzYwM2UwYWIxOTA4ODk3NWYxMGU0MmRlNzVhMTI4YjA3NTcu
LmU0MjNmNWNkZjQ3ZDY0Y2NjNGFhMGNjOTQwZTA4NjNmNzViMTcxNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uaCIKIAogI2lmIFVTRShDQUlSTykKIApAQCAtMzksNyArMzksNiBAQAogI2lu
Y2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1
ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKQEAgLTU3LDYzMyArNTYs
MzYyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtSW5pdChQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxhdGZvcm1Db250ZXh0KQorR3JhcGhp
Y3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNzQ29udGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQpCisgICAgOiBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRl
eHQpCisgICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0KSkKIHsKLSAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkK
LSAgICAgICAgcmV0dXJuOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4
dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKKyAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1f
cGxhdGZvcm1Db250ZXh0LmNyKCkpOworfQogCi0gICAgbV9kYXRhID0gbmV3IEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSgqcGxhdGZvcm1Db250ZXh0KTsKLSAgICBtX2RhdGEtPnBsYXRm
b3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG1fZGF0YSk7Ci0gICAgbV9kYXRh
LT5zeW5jQ29udGV4dChwbGF0Zm9ybUNvbnRleHQtPmNyKCkpOworR3JhcGhpY3NDb250ZXh0Q2Fp
cm86OkdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3QqIGNhaXJvQ29udGV4dCkKKyAgICA6IG1f
b3duZWRQbGF0Zm9ybUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHRDYWlybz4oY2Fp
cm9Db250ZXh0KSkKKyAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250
ZXh0KQorICAgICwgbV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlPihtX3BsYXRmb3JtQ29udGV4dCkpCit7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOworICAgIG1fcHJpdmF0ZS0+
c3luY0NvbnRleHQobV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpwbGF0Zm9ybURlc3Ryb3koKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNz
Q29udGV4dENhaXJvKFBsYXRmb3JtQ29udGV4dENhaXJvKiBwbGF0Zm9ybUNvbnRleHQpCisgICAg
OiBHcmFwaGljc0NvbnRleHRDYWlybygqcGxhdGZvcm1Db250ZXh0KQogewotICAgIGlmIChtX2Rh
dGEpIHsKLSAgICAgICAgbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0
UHJpdmF0ZShudWxscHRyKTsKLSAgICAgICAgZGVsZXRlIG1fZGF0YTsKLSAgICB9CiB9CiAKLUFm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUg
aW5jbHVkZVNjYWxlKSBjb25zdAorR3JhcGhpY3NDb250ZXh0Q2Fpcm86On5HcmFwaGljc0NvbnRl
eHRDYWlybygpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29u
dGV4dFByaXZhdGUobnVsbHB0cik7Cit9CiAKLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1
cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKK2Jvb2wgR3JhcGhpY3NDb250ZXh0Q2Fp
cm86Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CiAK
LSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dENhaXJvOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkg
Y29uc3QKK3sKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpnZXRDVE0oKnBsYXRmb3JtQ29udGV4
dCgpKTsKIH0KIAotUGxhdGZvcm1Db250ZXh0Q2Fpcm8qIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZv
cm1Db250ZXh0KCkgY29uc3QKK1BsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRD
YWlybzo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICByZXR1cm4gJm1fZGF0YS0+
cGxhdGZvcm1Db250ZXh0OworICAgIHJldHVybiAmbV9wbGF0Zm9ybUNvbnRleHQ7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dENhaXJvOjpzYXZlKCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDo6c2F2ZSgpOwogICAgIENhaXJvOjpzYXZlKCpwbGF0Zm9ybUNv
bnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0
ZSgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZXN0b3JlKCkKIHsKLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZSgpOwog
ICAgIENhaXJvOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKIC8vIERyYXdzIGEg
ZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25l
c3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhpY2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJv
OjpkcmF3UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3Rh
dGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3TmF0aXZlSW1hZ2UoTmF0
aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYg
c3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZSgqcGxh
dGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25z
LCBzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpKTsKKyAgICBDYWlybzo6ZHJhd1BsYXRmb3JtSW1hZ2UoKnBsYXRm
b3JtQ29udGV4dCgpLCBuYXRpdmVJbWFnZS5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0
LCBzcmNSZWN0LCB7IG9wdGlvbnMsIHN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwg
c3RhdGUuYWxwaGEsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCiAvLyBUaGlzIGlz
IG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMsIHNvIHdlIHNob3VsZCBub3QgZHJhdyBzaGFkb3dz
Lgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0xp
bmUoKnBsYXRmb3JtQ29udGV4dCgpLCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUs
IHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFu
dGlhbGlhcyk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0byBkcmF3IHRoZSBs
aXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBDYWlybzo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0
LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5maWxsUGF0aChwYXRoKTsKKyAgICBpZiAocGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwog
ICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBDYWlybzo6ZmlsbFBhdGgoKnBs
YXRmb3JtQ29udGV4dCgpLCBwYXRoLCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIENhaXJvOjpzdHJva2VQYXRo
KCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENh
aXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwogICAgIENhaXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIENhaXJvOjpG
aWxsU291cmNlKHN0YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBDYWlybzo6ZmlsbFJlY3QoKnBsYXRmb3Jt
Q29udGV4dCgpLCByZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKTsKK30K
IAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0LCBjb2xv
cik7Cit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKK3sKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CisgICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3JlYXRlUGF0dGVybigxLjAsIHN0
YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKKyAgICBpZiAoIXBhdHRlcm4pCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwot
ICAgIENhaXJvOjpmaWxsUmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIGNvbG9yLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpOworICAgIENhaXJvOjpzYXZlKG1fcGxhdGZvcm1Db250
ZXh0KTsKKyAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHBhdHRl
cm4uZ2V0KCkpOworICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBH
cmFwaGljc0NvbnRleHRDYWlybzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yLCBCbGVu
ZE1vZGUgYmxlbmRNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CisgICAgQ29tcG9zaXRl
T3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwogCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXAocmVjdCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9w
bGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUpOworICAgIENhaXJv
OjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFkb3dT
dGF0ZShzdGF0ZSkpOworICAgIENhaXJvOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1f
cGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9yLCBCbGVuZE1vZGU6Ok5vcm1hbCk7Cit9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CiAgICAgQ2Fpcm86OmNsaXAo
KnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHRDYWlybzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1
bGUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRl
eHQoKSk7CiAgICAgQ2Fpcm86OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xp
cFJ1bGUpOwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0
CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dENhaXJvOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gQ2Fpcm86OlN0YXRl
OjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
OworICAgIGlmIChhdXRvIG5hdGl2ZUltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgbmF0aXZlSW1hZ2UtPnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgZGVzdFJl
Y3QpOworfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3sKICNpZiBQTEFURk9STShXUEUpIHx8IFBMQVRGT1JNKEdUSykKICAgICBUaGVtZUFkd2Fp
dGE6OnBhaW50Rm9jdXMoKnRoaXMsIHBhdGgsIGNvbG9yKTsKICAgICBVTlVTRURfUEFSQU0od2lk
dGgpOwogICAgIFVOVVNFRF9QQVJBTShvZmZzZXQpOwogICAgIHJldHVybjsKICNlbHNlCi0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhwYXRoLCB3aWR0
aCwgb2Zmc2V0LCBjb2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9y
bUNvbnRleHQoKSwgcGF0aCwgd2lkdGgsIGNvbG9yKTsKICNlbmRpZgogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAjaWYgUExB
VEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCiAgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3Vz
KCp0aGlzLCByZWN0cywgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5V
U0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwogI2Vsc2UKLQotICAgIGlmIChtX2ltcGwp
IHsKLSAgICAgICAgbV9pbXBsLT5kcmF3Rm9jdXNSaW5nKHJlY3RzLCB3aWR0aCwgb2Zmc2V0LCBj
b2xvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1D
b250ZXh0KCkpOwogICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdHMsIHdpZHRoLCBjb2xvcik7CiAjZW5kaWYKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENh
aXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlj
a25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJs
ZVVuZGVybGluZXMsIFN0cm9rZVN0eWxlKQogewotICAgIGRyYXdMaW5lc0ZvclRleHQocmVjdC5s
b2NhdGlvbigpLCByZWN0LmhlaWdodCgpLCBEYXNoQXJyYXkgeyAwLCByZWN0LndpZHRoKCkgfSwg
cHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNz
LCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRl
cmxpbmVzLCBTdHJva2VTdHlsZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KICAgICBpZiAod2lkdGhzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQo
cG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcG9pbnQs
IHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywgbV9zdGF0ZS5z
dHJva2VDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RG90c0ZvckRvY3Vt
ZW50TWFya2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUg
c3R5bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFy
a2VyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUp
CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
cmVjdCwgc3R5bGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcigq
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0eWxlKTsKIH0KIAotRmxvYXRSZWN0IEdyYXBoaWNz
Q29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIFJvdW5k
aW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OnJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91
bmRpbmdNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
biByZWN0OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91bmRU
b0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwotCiAgICAgcmV0dXJuIENhaXJvOjpT
dGF0ZTo6cm91bmRUb0RldmljZVBpeGVscygqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCit2b2lk
IEdyYXBoaWNzQ29udGV4dENhaXJvOjp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9p
bXBsKSB7Ci0gICAgICAgIG1faW1wbC0+dHJhbnNsYXRlKHgsIHkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6
dHJhbnNsYXRlKCpwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYpCi17Ci0gICAgLy8gQ2Fp
cm8gY29udGV4dHMgY2FuJ3QgaG9sZCBzZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCi0g
ICAgLy8gc28gd2Ugc2V0IHRoZW0ganVzdCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJv
a2UKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29u
c3QgQ29sb3ImKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6dXBkYXRlU3RhdGUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyBmbGFncykKIHsKLSAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNl
cGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMKLSAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0
IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQotfQorICAgIGlmIChmbGFncyAmIEdy
YXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25lc3NDaGFuZ2UpCisgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0U3Ryb2tlVGhpY2tuZXNzKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5zdHJv
a2VUaGlja25lc3MpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQotewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2UpCisgICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tl
U3R5bGUobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVN0eWxlKTsKIAotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VUaGlj
a25lc3MoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHJva2VUaGlja25lc3MpOwotfQorICAgIGlmIChm
bGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTaGFkb3dDaGFuZ2UpIHsKKyAgICAgICAgaWYg
KHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgICAgICAgICAvLyBNZWFuaW5n
IHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQKKyAgICAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBD
RyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCisgICAgICAgICAgICBhdXRv
JiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7CisgICAgICAgICAgICBtX3N0YXRl
LnNoYWRvd09mZnNldCA9IHsgc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVp
Z2h0KCkgfTsKKyAgICAgICAgfQorICAgIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU3Ryb2tlU3R5bGUoU3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGUpCi17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpDb21wb3NpdGVPcGVyYXRpb25DaGFuZ2UpCisgICAgICAgIENhaXJv
OjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBzdGF0ZS5j
b21wb3NpdGVPcGVyYXRvciwgc3RhdGUuYmxlbmRNb2RlKTsKIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJva2VTdHlsZSgqcGxhdGZv
cm1Db250ZXh0KCksIHN0cm9rZVN0eWxlKTsKKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQorICAgICAgICBDYWlybzo6U3RhdGU6OnNl
dFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hvdWxkQW50aWFsaWFz
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwg
Y29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNvbmNhdENUTShj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jb25jYXRDVE0o
dHJhbnNmb3JtKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OmNvbmNhdENUTSgqcGxhdGZvcm1Db250ZXh0KCks
IHRyYW5zZm9ybSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6U3RhdGU6OnNldENU
TSgqcGxhdGZvcm1Db250ZXh0KCksIHRyYW5zZm9ybSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQsIGNv
bnN0IENvbG9yJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIoZmxvYXQgb3BhY2l0eSkKIHsKLSAgICBpZiAobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykgewotICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0
IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAgLy8g
V2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0
ZSBZIGF4aXMKLSAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IG9mZnNldC53aWR0aCgp
LCAtb2Zmc2V0LmhlaWdodCgpIH07Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdp
blBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihvcGFjaXR5KTsKICAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1D
b250ZXh0KCksIG9wYWNpdHkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kUGxhdGZv
cm1UcmFuc3BhcmVuY3lMYXllcigpCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjplbmRUcmFu
c3BhcmVuY3lMYXllcigpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGlj
c0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgQ2Fpcm86OmVuZFRyYW5zcGFy
ZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0
OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQor
dm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBDYWlybzo6Y2xlYXJSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
bGluZVdpZHRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1f
aW1wbC0+c3Ryb2tlUmVjdChyZWN0LCBsaW5lV2lkdGgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgQ2Fpcm86OnN0cm9rZVJlY3QoKnBsYXRmb3JtQ29udGV4dCgp
LCByZWN0LCBsaW5lV2lkdGgsIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAo
TGluZUNhcCBsaW5lQ2FwKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TGluZUNhcChM
aW5lQ2FwIGxpbmVDYXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAo
bGluZUNhcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIENhaXJvOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwg
bGluZUNhcCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBE
YXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9mZnNldCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q2Fpcm86OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zm
c2V0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lRGFzaChkYXNoZXMsIGRh
c2hPZmZzZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgp
LCBkYXNoZXMsIGRhc2hPZmZzZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dENhaXJvOjpzZXRM
aW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
c2V0TGluZUpvaW4obGluZUpvaW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2V0TGluZUpvaW4oKnBsYXRm
b3JtQ29udGV4dCgpLCBsaW5lSm9pbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRN
aXRlckxpbWl0KGZsb2F0IG1pdGVyKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBtaXRlcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJlIHRoaXMg
c2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1pdGVyTGlt
aXQobWl0ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0
KCksIG1pdGVyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEo
ZmxvYXQpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2Rl
IGJsZW5kTW9kZSkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0
ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3Bl
cmF0b3IsIGJsZW5kTW9kZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDYWlybzo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGNsaXBQYXRoKHBhdGgs
IHdpbmRSdWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0
aCYgcGF0aCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChwYXRoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CiAgICAgQ2Fpcm86OmNsaXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCBwYXRoKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6cm90YXRlKGZsb2F0IHJhZGlhbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPnJvdGF0ZShyYWRpYW5zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ2Fpcm86OnJvdGF0ZSgqcGxhdGZvcm1D
b250ZXh0KCksIHJhZGlhbnMpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShz
aXplKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7CiAgICAgQ2Fpcm86OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q2Fpcm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBD
YWlybzo6Y2xpcE91dCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBDYWlybzo6Zmls
bFJvdW5kZWRSZWN0KCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgY29sb3IsIENhaXJvOjpTaGFk
b3dTdGF0ZShzdGF0ZSgpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdp
dGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5pc1ZhbGlkKCkp
CisgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCBy
b3VuZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIENhaXJvOjpmaWxsUmVjdFdpdGhSb3VuZGVkSG9sZSgqcGxhdGZvcm1Db250ZXh0
KCksIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWly
bzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
bGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6
ZHJhd1BhdHRlcm4oTmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG9hdFNpemUmIGlt
YWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiB0aWxl
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFw
YXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAgIGlmICghcGF0dGVyblRyYW5zZm9y
bS5pc0ludmVydGlibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBVTlVTRURfUEFSQU0oc3BhY2luZyk7Ci0gICAgQ2Fpcm86OmRy
YXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIEludFNpemUoaW1hZ2VT
aXplKSwgZGVzdFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9u
cyk7CisgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgbmF0aXZlSW1h
Z2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0
aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaG91bGRBbnRpYWxpYXMoYm9vbCBlbmFibGUpCitS
ZW5kZXJpbmdNb2RlIEdyYXBoaWNzQ29udGV4dENhaXJvOjpyZW5kZXJpbmdNb2RlKCkgY29uc3QK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U2hvdWxk
QW50aWFsaWFzKCpwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKKyAgICByZXR1cm4gQ2Fpcm86
OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgqcGxhdGZvcm1Db250ZXh0KCkpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1JbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25RdWFsaXR5KQordm9pZCBHcmFwaGljc0NvbnRleHRDYWlybzo6ZHJh
d0dseXBocyhjb25zdCBGb250JiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMs
IGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMsIHVuc2lnbmVkIG51bUdseXBocywg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2RlIGZvbnRTbW9vdGhpbmcp
CiB7Ci19CisgICAgaWYgKCFmb250LnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuOwogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25z
dAotewotICAgIGlmICghaGFzUGxhdGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBhdXRvIHhPZmZzZXQgPSBwb2ludC54KCk7CisgICAgVmVjdG9yPGNhaXJvX2dseXBo
X3Q+IGNhaXJvR2x5cGhzKG51bUdseXBocyk7CisgICAgeworICAgICAgICBhdXRvIHlPZmZzZXQg
PSBwb2ludC55KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyAr
K2kpIHsKKyAgICAgICAgICAgIGNhaXJvR2x5cGhzW2ldID0geyBnbHlwaHNbaV0sIHhPZmZzZXQs
IHlPZmZzZXQgfTsKKyAgICAgICAgICAgIHhPZmZzZXQgKz0gYWR2YW5jZXNbaV0ud2lkdGgoKTsK
KyAgICAgICAgICAgIHlPZmZzZXQgKz0gYWR2YW5jZXNbaV0uaGVpZ2h0KCk7CisgICAgICAgIH0K
KyAgICB9CiAKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjppc0FjY2VsZXJhdGVkQ29udGV4dCgq
cGxhdGZvcm1Db250ZXh0KCkpOworICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQg
PSBmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKTsKKyAgICBkb3VibGUgc3ludGhldGlj
Qm9sZE9mZnNldCA9IGZvbnQuc3ludGhldGljQm9sZE9mZnNldCgpOworCisgICAgaWYgKCFmb250
LmFsbG93c0FudGlhbGlhc2luZygpKQorICAgICAgICBmb250U21vb3RoaW5nID0gRm9udFNtb290
aGluZ01vZGU6Ok5vU21vb3RoaW5nOworCisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OworICAgIENhaXJvOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBDYWlybzo6RmlsbFNv
dXJjZShzdGF0ZSksIENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAorICAgICAgICBDYWlybzo6
U2hhZG93U3RhdGUoc3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNl
dCwgY2Fpcm9HbHlwaHMsIHhPZmZzZXQsCisgICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwg
c3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Nv
bG9yLAorICAgICAgICBmb250U21vb3RoaW5nKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg4YTQ4ZTNmZmI0OTM1Yjdj
ODA1OTA3MGRiMWJjOTExMGQ0YmVjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmgKQEAgLTAsMCAr
MSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8p
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX2NhaXJv
IGNhaXJvX3Q7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1Db250ZXh0
Q2Fpcm87CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dENhaXJvIGZpbmFs
IDogcHVibGljIEdyYXBoaWNzQ29udGV4dCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0
Q2Fpcm8oUGxhdGZvcm1Db250ZXh0Q2Fpcm8mKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhQ
bGF0Zm9ybUNvbnRleHRDYWlybyopOworICAgIEdyYXBoaWNzQ29udGV4dENhaXJvKGNhaXJvX3Qq
KTsKKworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyhIREMsIGJv
b2wgaGFzQWxwaGEgPSBmYWxzZSk7IC8vIEZJWE1FOiBUbyBiZSByZW1vdmVkLgorI2VuZGlmCisK
KyAgICB2aXJ0dWFsIH5HcmFwaGljc0NvbnRleHRDYWlybygpOworCisgICAgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyogcGxh
dGZvcm1Db250ZXh0KCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdl
RmxhZ3MpOworCisgICAgdm9pZCBzZXRMaW5lQ2FwKExpbmVDYXApIGZpbmFsOworICAgIHZvaWQg
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiwgZmxvYXQpIGZpbmFsOworICAgIHZvaWQgc2V0
TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZvaWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkg
ZmluYWw7CisKKyAgICB1c2luZyBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0OworICAgIHZvaWQg
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgR3JhZGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSA9
IEJsZW5kTW9kZTo6Tm9ybWFsKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdEltcGwo
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiwgY29uc3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBh
dGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQp
IGZpbmFsOworICAgIHZvaWQgc3Ryb2tlUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9p
ZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdHbHlw
aHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZl
ckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250U21v
b3RoaW5nTW9kZSkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFn
ZSYsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVy
bihOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hB
cnJheSYsIGJvb2wsIGJvb2wsIFN0cm9rZVN0eWxlKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdEb3Rz
Rm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5
bGUpIGZpbmFsOworICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGZsb2F0LCBmbG9hdCwgY29u
c3QgQ29sb3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZs
b2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyAgICB2b2lk
IHNhdmUoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgdHJh
bnNsYXRlKGZsb2F0LCBmbG9hdCkgZmluYWw7CisgICAgdm9pZCByb3RhdGUoZmxvYXQpIGZpbmFs
OworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7CisgICAgdm9pZCBzY2FsZShjb25z
dCBGbG9hdFNpemUmKSBmaW5hbDsKKyAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBm
aW5hbDsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVk
ZURldmljZVNjYWxlKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCkgZmluYWw7CisgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIGZpbmFs
OworCisgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgY2xp
cE91dChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0
aCYpIGZpbmFsOworICAgIHZvaWQgY2xpcFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBmaW5h
bDsKKyAgICBJbnRSZWN0IGNsaXBCb3VuZHMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNsaXBU
b0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAg
CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgZmluYWw7CisKKyAgICBG
bG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmLCBHcmFwaGljc0Nv
bnRleHQ6OlJvdW5kaW5nTW9kZSkgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29u
c3QgZmluYWw7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1Db250ZXh0Q2Fpcm8+IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQ7CisgICAgUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIG1fcGxhdGZvcm1Db250ZXh0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMmEwNDgxN2Jm
ZDRlZDBmMjA2Nzc1YWMyODYyMjQ5OTcyNWFkNWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQzMSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUg
IkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFkaWVu
dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9y
eSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0
Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpH
cmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSgKLSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRl
eHQpOwotICAgICAgICB9KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJ
bXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkoY2Fpcm9f
dCogY2Fpcm9Db250ZXh0KQotewotICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dEltcGxGYWN0b3J5KAotICAgICAgICBbY2Fpcm9Db250ZXh0XShHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dEltcGxDYWlybz4oY29udGV4dCwgY2Fpcm9Db250ZXh0KTsKLSAgICAgICAg
fSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6R3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRm
b3JtQ29udGV4dCkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1f
cGxhdGZvcm1Db250ZXh0KHBsYXRmb3JtQ29udGV4dCkKLSAgICAsIG1fcHJpdmF0ZShtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZT4obV9wbGF0Zm9ybUNvbnRleHQpKQot
ewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2
YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0
LmNyKCkpOwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OkdyYXBoaWNzQ29udGV4dElt
cGxDYWlybyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNhaXJvX3QqIGNhaXJvQ29udGV4dCkK
LSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29udGV4dCkKLSAgICAsIG1fb3duZWRQbGF0Zm9y
bUNvbnRleHQobWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHRDYWlybz4oY2Fpcm9Db250ZXh0KSkK
LSAgICAsIG1fcGxhdGZvcm1Db250ZXh0KCptX293bmVkUGxhdGZvcm1Db250ZXh0KQotICAgICwg
bV9wcml2YXRlKG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlPihtX3Bs
YXRmb3JtQ29udGV4dCkpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250
ZXh0UHJpdmF0ZShtX3ByaXZhdGUuZ2V0KCkpOwotICAgIG1fcHJpdmF0ZS0+c3luY0NvbnRleHQo
bV9wbGF0Zm9ybUNvbnRleHQuY3IoKSk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
fkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygpCi17Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShudWxscHRyKTsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86Omhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLVBsYXRmb3JtQ29udGV4dENhaXJvKiBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX3BsYXRmb3JtQ29udGV4
dDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnVwZGF0ZVN0YXRlKGNvbnN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MgZmxhZ3MpCi17Ci0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3Rh
dGU6OlN0cm9rZVRoaWNrbmVzc0NoYW5nZSkKLSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTdHJv
a2VUaGlja25lc3MobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci0K
LSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlU3R5bGVDaGFuZ2Up
Ci0gICAgICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUobV9wbGF0Zm9ybUNvbnRleHQs
IHN0YXRlLnN0cm9rZVN0eWxlKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0
YXRlOjpTaGFkb3dDaGFuZ2UpIHsKLSAgICAgICAgaWYgKHN0YXRlLnNoYWRvd3NJZ25vcmVUcmFu
c2Zvcm1zKSB7Ci0gICAgICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250
ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKLSAgICAgICAg
ICAgIC8vIFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUg
b3Bwb3NpdGUgWSBheGlzCi0gICAgICAgICAgICBhdXRvJiBtdXRhYmxlU3RhdGUgPSBjb25zdF9j
YXN0PEdyYXBoaWNzQ29udGV4dFN0YXRlJj4oZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSk7Ci0g
ICAgICAgICAgICBhdXRvJiBzaGFkb3dPZmZzZXQgPSBzdGF0ZS5zaGFkb3dPZmZzZXQ7Ci0gICAg
ICAgICAgICBtdXRhYmxlU3RhdGUuc2hhZG93T2Zmc2V0ID0geyBzaGFkb3dPZmZzZXQud2lkdGgo
KSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSB9OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkK
LSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNv
bnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwotCi0gICAg
aWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkK
LSAgICAgICAgQ2Fpcm86OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRl
eHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKLXsKLSAgICBDYWlybzo6c2V0TGluZUNh
cChtX3BsYXRmb3JtQ29udGV4dCwgbGluZUNhcCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFz
aE9mZnNldCkKLXsKLSAgICBDYWlybzo6c2V0TGluZURhc2gobV9wbGF0Zm9ybUNvbnRleHQsIGRh
c2hlcywgZGFzaE9mZnNldCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpz
ZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKLXsKLSAgICBDYWlybzo6c2V0TGluZUpvaW4o
bV9wbGF0Zm9ybUNvbnRleHQsIGxpbmVKb2luKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OnNldE1pdGVyTGltaXQoZmxvYXQgbWl0ZXJMaW1pdCkKLXsKLSAgICBDYWlybzo6
c2V0TWl0ZXJMaW1pdChtX3BsYXRmb3JtQ29udGV4dCwgbWl0ZXJMaW1pdCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Ci17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENh
aXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uo
c3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgYXV0byBwYXR0ZXJuID0gZ3JhZGllbnQuY3Jl
YXRlUGF0dGVybigxLjAsIHN0YXRlLmZpbGxHcmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKLSAgICBp
ZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIENhaXJvOjpzYXZlKG1fcGxhdGZv
cm1Db250ZXh0KTsKLSAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IHBhdHRlcm4uZ2V0KCkpOwotICAgIENhaXJvOjpyZXN0b3JlKG1fcGxhdGZvcm1Db250ZXh0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcGVyYXRvciwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdy
YXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNP
cGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotCi0gICAgQ2Fpcm86OlN0YXRlOjpz
ZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIGNvbXBvc2l0ZU9wZXJhdG9y
LCBibGVuZE1vZGUpOwotICAgIENhaXJvOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVj
dCwgY29sb3IsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotICAgIENhaXJvOjpTdGF0ZTo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2aW91c09wZXJhdG9y
LCBCbGVuZE1vZGU6Ok5vcm1hbCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJv
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29s
b3ImIGNvbG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3Jh
cGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLQotICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3Vz
T3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKLSAgICBDYWlybzo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJldmlvdXNPcGVyYXRvciwg
YmxlbmRNb2RlKTsKLQotICAgIENhaXJvOjpTaGFkb3dTdGF0ZSBzaGFkb3dTdGF0ZShzdGF0ZSk7
Ci0gICAgaWYgKHJlY3QuaXNSb3VuZGVkKCkpCi0gICAgICAgIENhaXJvOjpmaWxsUm91bmRlZFJl
Y3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0gICAgZWxz
ZQotICAgICAgICBDYWlybzo6ZmlsbFJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QucmVjdCgp
LCBjb2xvciwgc2hhZG93U3RhdGUpOwotCi0gICAgQ2Fpcm86OlN0YXRlOjpzZXRDb21wb3NpdGVP
cGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3VzT3BlcmF0b3IsIEJsZW5kTW9kZTo6
Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxSZWN0V2l0
aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpCi17Ci0gICAgQ2Fpcm86OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCByb3VuZGVkSG9sZVJlY3Qs
IHsgfSwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBh
dGgpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IENhaXJvOjpmaWxsUGF0aChtX3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgQ2Fpcm86OkZpbGxTb3Vy
Y2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsQ2Fpcm86OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRo
KHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0
ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OnN0cm9rZVJlY3QobV9w
bGF0Zm9ybUNvbnRleHQsIHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0
ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybzo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQotewotICAgIGF1dG8mIHN0
YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDYWlybzo6c3Ryb2tlUGF0aCht
X3BsYXRmb3JtQ29udGV4dCwgcGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgUGF0aCBwYXRo
OwotICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKLSAgICBzdHJva2VQYXRoKHBhdGgpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBDYWlybzo6Y2xlYXJSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdHbHlwaHMoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzLCBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UqIGFkdmFuY2VzLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nKQotewotICAgIGlmICgh
Zm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8g
eE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8Y2Fpcm9fZ2x5cGhfdD4gY2Fpcm9HbHlw
aHMobnVtR2x5cGhzKTsKLSAgICB7Ci0gICAgICAgIGF1dG8geU9mZnNldCA9IHBvaW50LnkoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgewotICAgICAg
ICAgICAgY2Fpcm9HbHlwaHNbaV0gPSB7IGdseXBoc1tpXSwgeE9mZnNldCwgeU9mZnNldCB9Owot
ICAgICAgICAgICAgeE9mZnNldCArPSBhZHZhbmNlc1tpXS53aWR0aCgpOwotICAgICAgICAgICAg
eU9mZnNldCArPSBhZHZhbmNlc1tpXS5oZWlnaHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNhaXJvX3NjYWxlZF9mb250X3QqIHNjYWxlZEZvbnQgPSBmb250LnBsYXRmb3JtRGF0YSgpLnNj
YWxlZEZvbnQoKTsKLSAgICBkb3VibGUgc3ludGhldGljQm9sZE9mZnNldCA9IGZvbnQuc3ludGhl
dGljQm9sZE9mZnNldCgpOwotCi0gICAgaWYgKCFmb250LmFsbG93c0FudGlhbGlhc2luZygpKQot
ICAgICAgICBmb250U21vb3RoaW5nID0gRm9udFNtb290aGluZ01vZGU6Ok5vU21vb3RoaW5nOwot
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJv
OjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBDYWlybzo6RmlsbFNvdXJjZShzdGF0ZSks
IENhaXJvOjpTdHJva2VTb3VyY2Uoc3RhdGUpLAotICAgICAgICBDYWlybzo6U2hhZG93U3RhdGUo
c3RhdGUpLCBwb2ludCwgc2NhbGVkRm9udCwgc3ludGhldGljQm9sZE9mZnNldCwgY2Fpcm9HbHlw
aHMsIHhPZmZzZXQsCi0gICAgICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tl
VGhpY2tuZXNzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yLAotICAgICAg
ICBmb250U21vb3RoaW5nKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaW1hZ2UuZHJhdyhncmFwaGljc0NvbnRleHQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFn
ZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0
ZSgpOwotICAgIENhaXJvOjpkcmF3UGxhdGZvcm1JbWFnZShtX3BsYXRmb3JtQ29udGV4dCwgaW1h
Z2UucGxhdGZvcm1JbWFnZSgpLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBz
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIHN0YXRlLmFscGhhLCBDYWlybzo6U2hh
ZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRy
YXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKHNwYWNpbmcpOwotICAgIENhaXJvOjpk
cmF3UGF0dGVybihtX3BsYXRmb3JtQ29udGV4dCwgaW1hZ2UucGxhdGZvcm1JbWFnZSgpLmdldCgp
LCBJbnRTaXplKGltYWdlU2l6ZSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9y
bSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCi17
Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJv
OjpkcmF3UmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYm9yZGVyVGhpY2tuZXNzLCBzdGF0
ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50
JiBwb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdMaW5lKG1fcGxhdGZv
cm1Db250ZXh0LCBwb2ludDEsIHBvaW50Miwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9r
ZUNvbG9yLCBzdGF0ZS5zdHJva2VUaGlja25lc3MsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lk
dGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAgIENhaXJvOjpkcmF3TGluZXNG
b3JUZXh0KG1fcGxhdGZvcm1Db250ZXh0LCBwb2ludCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50
aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5zdHJva2VDb2xvcik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUgc3R5bGUpCi17Ci0gICAgQ2Fp
cm86OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHN0
eWxlKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmRyYXdFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgQ2Fpcm86OmRyYXdFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCwgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29s
b3IsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpkcmF3UGF0aChjb25zdCBQYXRoJikKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgd2lkdGgs
IGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIFVOVVNFRF9QQVJBTShv
ZmZzZXQpOwotICAgIENhaXJvOjpkcmF3Rm9jdXNSaW5nKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRo
LCB3aWR0aCwgY29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0IHdpZHRoLCBm
bG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zm
c2V0KTsKLSAgICBDYWlybzo6ZHJhd0ZvY3VzUmluZyhtX3BsYXRmb3JtQ29udGV4dCwgcmVjdHMs
IHdpZHRoLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpzYXZl
KCkKLXsKLSAgICBDYWlybzo6c2F2ZShtX3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpyZXN0b3JlKCkKLXsKLSAgICBDYWlybzo6cmVzdG9yZSht
X3BsYXRmb3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjp0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBDYWlybzo6dHJhbnNsYXRlKG1fcGxh
dGZvcm1Db250ZXh0LCB4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKLXsKLSAgICBDYWlybzo6cm90YXRlKG1fcGxh
dGZvcm1Db250ZXh0LCBhbmdsZUluUmFkaWFucyk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgQ2Fpcm86OnNj
YWxlKG1fcGxhdGZvcm1Db250ZXh0LCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsK
LSAgICBDYWlybzo6Y29uY2F0Q1RNKG1fcGxhdGZvcm1Db250ZXh0LCB0cmFuc2Zvcm0pOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtKQotewotICAgIENhaXJvOjpTdGF0ZTo6c2V0Q1RNKG1fcGxhdGZvcm1D
b250ZXh0LCB0cmFuc2Zvcm0pOwotfQotCi1BZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpCi17
Ci0gICAgcmV0dXJuIENhaXJvOjpTdGF0ZTo6Z2V0Q1RNKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIo
ZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBDYWlybzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihtX3Bs
YXRmb3JtQ29udGV4dCwgb3BhY2l0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjplbmRUcmFuc3BhcmVuY3lMYXllcigpCi17Ci0gICAgQ2Fpcm86OmVuZFRyYW5zcGFyZW5j
eUxheWVyKG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwKG1f
cGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm86OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIENhaXJvOjpjbGlwT3V0
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBDYWlybzo6Y2xpcE91dCht
X3BsYXRmb3JtQ29udGV4dCwgcGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKLXsKLSAg
ICBDYWlybzo6Y2xpcFBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIGNsaXBSdWxlKTsKLX0K
LQotSW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBCb3VuZHMoKQotewotICAg
IHJldHVybiBDYWlybzo6U3RhdGU6OmdldENsaXBCb3VuZHMobV9wbGF0Zm9ybUNvbnRleHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKLXsKLSAgICBpZiAo
YXV0byBuYXRpdmVJbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQotICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRl
eHQsIG5hdGl2ZUltYWdlLT5wbGF0Zm9ybUltYWdlKCkuZ2V0KCksIGRlc3RSZWN0KTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFwaGljc0NvbnRleHQ6OlJvdW5k
aW5nTW9kZSkKLXsKLSAgICByZXR1cm4gQ2Fpcm86OlN0YXRlOjpyb3VuZFRvRGV2aWNlUGl4ZWxz
KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm86OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBEZXN0
aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKQot
ewotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlh
UGxheWVyJiwgY29uc3QgRmxvYXRSZWN0JikKLXsKLSAgICAvLyBGSVhNRTogTm90IGltcGxlbWVu
dGVkLgotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVT
RShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFlZGU1ZDJhN2U5OGRiYmJlYTI2N2FiMDU0YzBkZmYxNDI1NmNmMmIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwu
aCIKLQotdHlwZWRlZiBzdHJ1Y3QgX2NhaXJvIGNhaXJvX3Q7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgUGxhdGZvcm1Db250ZXh0Q2Fpcm87Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dEltcGxDYWlybyBmaW5hbCA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHRJbXBsIHsKLXB1YmxpYzoK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHRJbXBsRmFjdG9yeSBjcmVhdGVGYWN0b3J5KFBsYXRmb3JtQ29udGV4dENhaXJvJik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1w
bEZhY3RvcnkgY3JlYXRlRmFjdG9yeShjYWlyb190Kik7Ci0KLSAgICBHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiwgUGxhdGZvcm1Db250ZXh0Q2Fpcm8mKTsKLSAgICBH
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8oR3JhcGhpY3NDb250ZXh0JiwgY2Fpcm9fdCopOwotICAg
IHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxDYWlybygpOwotCi0gICAgYm9vbCBoYXNQbGF0
Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyog
cGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0YXRl
KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRl
Q2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlkZTsK
LQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExp
bmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVyTGltaXQoZmxvYXQp
IG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHcmFkaWVudCYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3Im
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxS
b3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3ImLCBCbGVuZE1v
ZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxs
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Ryb2tlUGF0aChj
b25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNlKGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1
ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiwgRm9udFNtb290aGluZ01vZGUpIG92ZXJyaWRlOwotCi0gICAg
dm9pZCBkcmF3SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdlJiwgY29uc3Qg
RmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNv
bnN0IEZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRleHQoY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiwgYm9vbCwg
Ym9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKGNvbnN0
IEZsb2F0UmVjdCYsIERvY3VtZW50TWFya2VyTGluZVN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1Bh
dGgoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFBhdGgmLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZmxvYXQsIGZsb2F0LCBjb25z
dCBDb2xvciYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBzYXZlKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZXN0b3JlKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCwgZmxvYXQp
IG92ZXJyaWRlOwotICAgIHZvaWQgcm90YXRlKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNj
YWxlKGNvbnN0IEZsb2F0U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q1RNKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYpIG92ZXJyaWRlOwotICAgIEFmZmluZVRyYW5zZm9ybSBnZXRDVE0oR3JhcGhp
Y3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZFRyYW5zcGFy
ZW5jeUxheWVyKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwUGF0
aChjb25zdCBQYXRoJiwgV2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIEludFJlY3QgY2xpcEJvdW5k
cygpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5k
cyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3Bh
Y2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKLSNpZiBF
TkFCTEUoVklERU8pCi0gICAgdm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKSBvdmVycmlkZTsKLSAgICBib29sIGNhblBhaW50
RnJhbWVGb3JNZWRpYShjb25zdCBNZWRpYVBsYXllciYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGZhbHNlOyB9Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
ZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29u
c3QgRmxvYXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOwot
Ci1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHRDYWlybz4gbV9v
d25lZFBsYXRmb3JtQ29udGV4dDsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyYgbV9wbGF0Zm9y
bUNvbnRleHQ7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlPiBtX3ByaXZhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKaW5kZXgg
ZDM3ZmI2NjM3M2FhYzkzMmE3MTQ4MjUzNDg1ZjMzNDkxMTg2ODVkNC4uYTU4ZGRiOTY4Mjc1MmU3
OTUwMGYzMjJiYzUzY2YwNGQ2MDcwM2M3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcApAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAi
Q29sb3JUcmFuc2ZlckZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgog
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRD
YWlyby5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAK
aW5kZXggM2JlNzU1NjllOTczYzJiMTY4OTlhNTA3NjI3NWY1MjNmYTgwNzFlYS4uOWI1YzBhZDA3
NDQ1MTg4MGRlZmRkM2M0ODkyZTRmNzNjMjg2NDJjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAi
Q2Fpcm9PcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0
aWVzQ2Fpcm8uaCIKICNpbmNsdWRlICJQaXhlbEJ1ZmZlci5oIgogI2luY2x1ZGUgPGNhaXJvLmg+
CkBAIC01MSw3ICs1MSw3IEBAIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IFBhcmFtZXRlcnMmCiAKICAgICBSZWZQdHI8
Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKSk7CiAg
ICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fY29udGV4dCA9IG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0
ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dENhaXJvPihtX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fp
cm8uY3BwCmluZGV4IDgxZDE1OGUyZGZmN2U1YmYwM2M3YjY1ZDAzNmRkYTg5OWYwZjkwMWYuLjJh
MTllNDdhOWFhY2VjMjA5NmE2MGU5N2UzYjVjNDg3NDUzZGFhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgIkNhaXJvVW5pcXVlUHRyLmgiCiAjaW5jbHVkZSAiQ2Fpcm9V
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2lu
Y2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNDIxLDcgKzQyMSw3IEBAIEZsb2F0UmVjdCBQYXRoOjpz
dHJva2VCb3VuZGluZ1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4m
IHN0cm9rCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIGlmIChzdHJva2VTdHls
ZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdjKEdyYXBoaWNzQ29udGV4dElt
cGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BhdGguZ2V0KCkpKTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0Q2Fpcm8gZ2MobV9wYXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVy
KGdjKTsKICAgICB9CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQCBib29sIFBhdGg6OnN0cm9rZUNvbnRh
aW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNz
QwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5
KG1fcGF0aC5nZXQoKSkpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGljc0Nv
bnRleHQobV9wYXRoLmdldCgpKTsKICAgICAgICAgc3Ryb2tlU3R5bGVBcHBsaWVyKGdyYXBoaWNz
Q29udGV4dCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggZWYzYWMyZTEzNzFiOGUx
YzkwN2RhMTI0MmE3NmNlNmU2MTQ3ODcwZS4uYjJiYTU0YzY0OGE5NDk3YzI2ZTMyNWZjYWVlNTAy
NDI0MjFhNDI0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTUsMTcgKzU1LDEyIEBAIHN0YXRp
YyB2b2lkIHNldENHRmlsbENvbG9yKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBDb2xvciYg
Y29sb3IpCiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hl
ZENHQ29sb3IoY29sb3IpKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0Q0dTdHJva2VDb2xvcihDR0Nv
bnRleHRSZWYgY29udGV4dCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIENHQ29udGV4dFNl
dFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNhY2hlZENHQ29sb3IoY29sb3IpKTsKLX0K
LQogaW5saW5lIENHQWZmaW5lVHJhbnNmb3JtIGdldFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVm
IGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIENHQWZmaW5lVHJhbnNmb3JtQ29uY2F0KENHQ29udGV4
dEdldENUTShjb250ZXh0KSwgQ0dBZmZpbmVUcmFuc2Zvcm1JbnZlcnQoQ0dDb250ZXh0R2V0QmFz
ZUNUTShjb250ZXh0KSkpOwogfQogCi1zdGF0aWMgSW50ZXJwb2xhdGlvblF1YWxpdHkgY29udmVy
dEludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJwb2xhdGlvblF1YWxpdHkgcXVhbGl0eSkKK3N0
YXRpYyBJbnRlcnBvbGF0aW9uUXVhbGl0eSBjb3JlSW50ZXJwb2xhdGlvblF1YWxpdHkoQ0dJbnRl
cnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KQogewogICAgIHN3aXRjaCAocXVhbGl0eSkgewogICAg
IGNhc2Uga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ6CkBAIC04Miw2ICs3NywzNCBAQCBzdGF0aWMg
SW50ZXJwb2xhdGlvblF1YWxpdHkgY29udmVydEludGVycG9sYXRpb25RdWFsaXR5KENHSW50ZXJw
b2xhdGlvblF1YWxpdHkgcQogICAgIHJldHVybiBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6RGVmYXVs
dDsKIH0KIAorc3RhdGljIENHSW50ZXJwb2xhdGlvblF1YWxpdHkgY2dJbnRlcnBvbGF0aW9uUXVh
bGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBxdWFsaXR5KQoreworICAgIHN3aXRjaCAocXVhbGl0
eSkgeworICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFs
aXR5OjpEb05vdEludGVycG9sYXRlOgorICAgICAgICByZXR1cm4ga0NHSW50ZXJwb2xhdGlvbk5v
bmU7CisgICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICByZXR1cm4g
a0NHSW50ZXJwb2xhdGlvbkxvdzsKKyAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRp
dW06CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9uTWVkaXVtOworICAgIGNhc2UgSW50
ZXJwb2xhdGlvblF1YWxpdHk6OkhpZ2g6CisgICAgICAgIHJldHVybiBrQ0dJbnRlcnBvbGF0aW9u
SGlnaDsKKyAgICB9CisgICAgcmV0dXJuIGtDR0ludGVycG9sYXRpb25EZWZhdWx0OworfQorCitz
dGF0aWMgQ0dUZXh0RHJhd2luZ01vZGUgY2dUZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2Rl
RmxhZ3MgbW9kZSkKK3sKKyAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3aW5n
TW9kZTo6RmlsbCk7CisgICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3aW5n
TW9kZTo6U3Ryb2tlKTsKKyAgICBpZiAoZmlsbCAmJiBzdHJva2UpCisgICAgICAgIHJldHVybiBr
Q0dUZXh0RmlsbFN0cm9rZTsKKyAgICBpZiAoZmlsbCkKKyAgICAgICAgcmV0dXJuIGtDR1RleHRG
aWxsOworICAgIHJldHVybiBrQ0dUZXh0U3Ryb2tlOworfQorCiBzdGF0aWMgQ0dCbGVuZE1vZGUg
c2VsZWN0Q0dCbGVuZE1vZGUoQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSBibGVuZE1vZGUpCiB7CiAgICAgc3dpdGNoIChibGVuZE1vZGUpIHsKQEAgLTE1Niwz
NSArMTc5LDM2IEBAIHN0YXRpYyBDR0JsZW5kTW9kZSBzZWxlY3RDR0JsZW5kTW9kZShDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNCiAgICAgcmV0dXJuIGtDR0JsZW5k
TW9kZU5vcm1hbDsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChDR0Nv
bnRleHRSZWYgY2dDb250ZXh0KQorR3JhcGhpY3NDb250ZXh0Q0c6OkdyYXBoaWNzQ29udGV4dENH
KENHQ29udGV4dFJlZiBjZ0NvbnRleHQpCiB7CiAgICAgaWYgKCFjZ0NvbnRleHQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fZGF0YSA9IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUoY2dDb250ZXh0KTsKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGluIHN5
bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoZmlsbENvbG9yKCkp
OwotICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgc2V0UGxh
dGZvcm1TdHJva2VUaGlja25lc3Moc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAgIG1fc3RhdGUuaW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0Nv
bnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHVw
ZGF0ZVN0YXRlKG1fc3RhdGUsIHsgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5n
ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9rZUNvbG9yQ2hhbmdlLCBHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlIH0pOworICAgIG1fc3RhdGUuaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSA9IGNvcmVJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dENHOjp+R3JhcGhp
Y3NDb250ZXh0Q0coKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLUNHQ29udGV4dFJlZiBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29u
dGV4dENHOjpoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOwor
fQorCitDR0NvbnRleHRSZWYgR3JhcGhpY3NDb250ZXh0Q0c6OnBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVkKCkpOwogICAgIEFTU0VSVChtX2Rh
dGEtPm1fY2dDb250ZXh0KTsKICAgICByZXR1cm4gbV9kYXRhLT5tX2NnQ29udGV4dC5nZXQoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnNhdmUoKQogewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxlZCgp
KTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29udGV4
dDo6c2F2ZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIHdpdGhp
biB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2b2lkIHRoZSBl
eHRyYQogICAgIC8vIHNhdmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTE5MiwxMCArMjE2LDkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEtPnNhdmUoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0Q0c6OnJlc3RvcmUoKQogewotICAgIEFTU0VSVCghcGFpbnRpbmdEaXNhYmxl
ZCgpKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBoaWNzQ29u
dGV4dDo6cmVzdG9yZSgpOwogCiAgICAgLy8gTm90ZTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9u
IHdpdGhpbiB0aGlzIGNsYXNzIGltcGxlbWVudGF0aW9uLCBzaW5jZSB3ZSB3YW50IHRvIGF2b2lk
IHRoZSBleHRyYQogICAgIC8vIHJlc3RvcmUgb2YgdGhlIHNlY29uZGFyeSBjb250ZXh0IChpbiBH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oKS4KQEAgLTIwNCwxMCArMjI3LDkgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1h
Z2VQdHImIGltYWdlLCBjb25zdCBGbG9hdFNpemUmIGltYWdlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYgbmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UucGxh
dGZvcm1JbWFnZSgpOwogCiAjaWYgIUxPR19ESVNBQkxFRAogICAgIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7CkBAIC0yOTgsNyArMzIwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybUltYWdlKGNvbnN0IFBsYXRmb3JtSW1hZ2VQdHIm
IGltYWdlLCBjb25zdCBGbG8KIAogICAgIGF1dG8gb2xkQ29tcG9zaXRlT3BlcmF0b3IgPSBjb21w
b3NpdGVPcGVyYXRpb24oKTsKICAgICBhdXRvIG9sZEJsZW5kTW9kZSA9IGJsZW5kTW9kZU9wZXJh
dGlvbigpOwotICAgIHNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKG9wdGlvbnMuY29tcG9z
aXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7CisgICAgc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVuZE1vZGUoKSk7
CiAKICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAo
MCwgMCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgYWRqdXN0ZWREZXN0UmVj
dC54KCksIGFkanVzdGVkRGVzdFJlY3QueSgpKTsKQEAgLTMyNSwxMCArMzQ3LDEwIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UGxhdGZvcm1JbWFnZShjb25zdCBQbGF0Zm9ybUltYWdlUHRy
JiBpbWFnZSwgY29uc3QgRmxvCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICAgICAgQ0dD
b250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHdhc0FudGlhbGlhc2VkKTsKICNlbmRp
ZgotICAgICAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJhdGlvbihvbGRDb21wb3NpdGVPcGVy
YXRvciwgb2xkQmxlbmRNb2RlKTsKKyAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9sZENv
bXBvc2l0ZU9wZXJhdG9yLCBvbGRCbGVuZE1vZGUpOwogICAgIH0KIAotICAgIExPR19XSVRIX1NU
UkVBTShJbWFnZXMsIHN0cmVhbSA8PCAiR3JhcGhpY3NDb250ZXh0OjpkcmF3TmF0aXZlSW1hZ2Ug
IiA8PCBpbWFnZS5nZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBpbnRvICIgPDwg
ZGVzdFJlY3QgPDwgIiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1l
KS5taWxsaXNlY29uZHMoKSA8PCAibXMiKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oSW1hZ2VzLCBz
dHJlYW0gPDwgIkdyYXBoaWNzQ29udGV4dENHOjpkcmF3TmF0aXZlSW1hZ2UgIiA8PCBpbWFnZS5n
ZXQoKSA8PCAiIHNpemUgIiA8PCBpbWFnZVNpemUgPDwgIiBpbnRvICIgPDwgZGVzdFJlY3QgPDwg
IiB0b29rICIgPDwgKE1vbm90b25pY1RpbWU6Om5vdygpIC0gc3RhcnRUaW1lKS5taWxsaXNlY29u
ZHMoKSA8PCAibXMiKTsKIH0KIAogc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lk
KiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKQEAgLTMzOSw3ICszNjEsNyBAQCBzdGF0aWMg
dm9pZCBkcmF3UGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0
KQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKICAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWhlaWdodCk7CiAjZW5kaWYKLSAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQ
aXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIGhlaWdodCkpLCBp
bWFnZSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dENH
KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRX
aWR0aChpbWFnZSksIGhlaWdodCkpLCBpbWFnZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhdHRlcm5S
ZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKQEAgLTM0NywxNiArMzY5LDE4IEBAIHN0YXRpYyB2
b2lkIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sodm9pZCogaW5mbykKICAgICBjYWxsT25NYWluVGhy
ZWFkKFtpbWFnZSA9IGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0dJbWFnZVJlZj4oaW5mbykpXSB7IH0p
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtUGF0dGVybihjb25zdCBQ
bGF0Zm9ybUltYWdlUHRyJiBpbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYg
bmF0aXZlSW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRp
YmxlKCkpCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAKKyAgICBhdXRvIGltYWdlID0gbmF0aXZlSW1hZ2UucGxhdGZvcm1JbWFnZSgp
OworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBD
R0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CiAKLSAgICBzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9w
ZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCksIG9wdGlvbnMuYmxlbmRNb2RlKCkp
OworICAgIHNldENvbXBvc2l0ZU9wZXJhdGlvbihvcHRpb25zLmNvbXBvc2l0ZU9wZXJhdG9yKCks
IG9wdGlvbnMuYmxlbmRNb2RlKCkpOwogCiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKQEAgLTQyMywxNiArNDQ3LDggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQbGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1J
bWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEYKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xl
IHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0Q0c6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgYm9yZGVy
VGhpY2tuZXNzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3UmVjdChyZWN0LCBi
b3JkZXJUaGlja25lc3MpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgLy8gRklYTUU6
IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBhdHRlcm5zIGFuZCBncmFkaWVudHMgbGlr
ZSBkcmF3UGF0aCBkb2VzLCBpdCBwcm9iYWJseSBzaG91bGQuCiAgICAgQVNTRVJUKCFyZWN0Lmlz
RW1wdHkoKSk7CiAKQEAgLTQ1OCwxOSArNDc0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVzcykKIH0K
IAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgdG8gZHJhdyBib3JkZXJzLgotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQyKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
PT0gTm9TdHJva2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5kcmF3TGluZShwb2ludDEsIHBvaW50Mik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KICAgICBmbG9hdCB0aGlja25lc3MgPSBzdHJva2VUaGlja25lc3MoKTsKICAgICBib29s
IGlzVmVydGljYWxMaW5lID0gKHBvaW50MS54KCkgKyB0aGlja25lc3MgPT0gcG9pbnQyLngoKSk7
CiAgICAgZmxvYXQgc3Ryb2tlV2lkdGggPSBpc1ZlcnRpY2FsTGluZSA/IHBvaW50Mi55KCkgLSBw
b2ludDEueSgpIDogcG9pbnQyLngoKSAtIHBvaW50MS54KCk7CkBAIC01MjYsMzEgKzUzNCwxNSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQx
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludAogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRp
YWxpYXMoY29udGV4dCwgdHJ1ZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxs
aXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
RWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUGF0
aCBwYXRoOwogICAgIHBhdGguYWRkRWxsaXBzZShyZWN0KTsKICAgICBkcmF3UGF0aChwYXRoKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjphcHBseVN0cm9rZVBhdHRlcm4oKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5hcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTSA9IEFmZmluZVRyYW5zZm9ybShnZXRVc2VyVG9C
YXNlQ1RNKGNnQ29udGV4dCkpOwogCkBAIC01NjUsMTYgKzU1Nyw4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogICAgIENHQ29udGV4dFNldFN0cm9rZVBhdHRl
cm4oY2dDb250ZXh0LCBwbGF0Zm9ybVBhdHRlcm4uZ2V0KCksICZwYXR0ZXJuQWxwaGEpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNz
Q29udGV4dENHOjphcHBseUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+YXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIEFmZmluZVRyYW5z
Zm9ybSB1c2VyVG9CYXNlQ1RNID0gQWZmaW5lVHJhbnNmb3JtKGdldFVzZXJUb0Jhc2VDVE0oY2dD
b250ZXh0KSk7CiAKQEAgLTYxNiwxNSArNjAwLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYWxj
dWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0
CiAgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0Q0c6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlID0gbV9zdGF0ZTsKQEAgLTY1NCwxNiArNjMzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3UGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4
dENHOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgcGF0aC5pc0VtcHR5KCkpCisgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZmlsbFBhdGgo
cGF0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7
CkBAIC03MTgsMTUgKzY5MiwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29u
c3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUGF0
aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0
aC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5zdHJva2VQYXRoKHBhdGgpOworICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0KCk7CiAKQEAgLTc5NCwxNiArNzYzLDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICNlbmRpZgogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0Nv
bnRleHRDRzo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgbV9pbXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQog
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBpZiAo
bV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKQEAgLTgzMyw3ICs3OTQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChtX3N0YXRl
LmZpbGxQYXR0ZXJuKQogICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKLSAgICBib29sIGRy
YXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVkU2hhZG93
KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVzZSBTaGFk
b3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChyZW5kZXJp
bmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1cnJlZFNo
YWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENHQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAgICBpZiAo
ZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpAQCAtODQ2
LDIzICs4MDcsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0KTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAg
ICBtX2ltcGwtPmZpbGxSZWN0KHJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ29s
b3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9
IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKLSAgICBi
b29sIGRyYXdPd25TaGFkb3cgPSAhaXNBY2NlbGVyYXRlZENvbnRleHQoKSAmJiBoYXNCbHVycmVk
U2hhZG93KCkgJiYgIW1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IC8vIERvbid0IHVz
ZSBTaGFkb3dCbHVyIGZvciBjYW52YXMgeWV0LgorICAgIGJvb2wgZHJhd093blNoYWRvdyA9IChy
ZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYgaGFzQmx1
cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogICAgIENH
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93KTsKICAg
ICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFkb3dzLgpA
QCAtODgxLDIwICs4MzQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxD
b2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
cGxhdGZvcm1GaWxsUm91bmRlZFJlY3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbFJvdW5kZWRSZWN0
SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xv
cigpOwogCiAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKICAgICAgICAgc2V0Q0dGaWxs
Q29sb3IoY29udGV4dCwgY29sb3IpOwogCi0gICAgYm9vbCBkcmF3T3duU2hhZG93ID0gIWlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOyAvLyBEb24ndCB1c2UgU2hhZG93Qmx1ciBmb3IgY2FudmFzIHll
dC4KKyAgICBib29sIGRyYXdPd25TaGFkb3cgPSAocmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpICYmIGhhc0JsdXJyZWRTaGFkb3coKSAmJiAhbV9zdGF0ZS5z
aGFkb3dzSWdub3JlVHJhbnNmb3JtczsKICAgICBDR0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCwgZHJhd093blNoYWRvdyk7CiAgICAgaWYgKGRyYXdPd25TaGFkb3cpIHsKICAg
ICAgICAgLy8gVHVybiBvZmYgQ0cgc2hhZG93cy4KQEAgLTkyNCwxNiArODcyLDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJlY3QsIGNvbnMKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmls
bENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRI
b2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRl
ZEhvbGVSZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2lt
cGwpIHsKLSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3Vu
ZGVkSG9sZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBQYXRoIHBhdGg7CkBA
IC05NTEsNyArODkxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5k
ZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBzZXRGaWxsQ29s
b3IoY29sb3IpOwogCiAgICAgLy8gZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoKSBhc3N1bWVzIHRo
YXQgdGhlIGVkZ2VzIG9mIHJlY3QgYXJlIGNsaXBwZWQgb3V0LCBzbyB3ZSBvbmx5IGNhcmUgYWJv
dXQgc2hhZG93cyBjYXN0IGFyb3VuZCBpbnNpZGUgdGhlIGhvbGUuCi0gICAgYm9vbCBkcmF3T3du
U2hhZG93ID0gIWlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgJiYgaGFzQmx1cnJlZFNoYWRvdygpICYm
ICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOworICAgIGJvb2wgZHJhd093blNoYWRv
dyA9IChyZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkgJiYg
aGFzQmx1cnJlZFNoYWRvdygpICYmICFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwog
ICAgIENHQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0LCBkcmF3T3duU2hhZG93
KTsKICAgICBpZiAoZHJhd093blNoYWRvdykgewogICAgICAgICAvLyBUdXJuIG9mZiBDRyBzaGFk
b3dzLgpAQCAtOTcwLDUyICs5MTAsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXQKICAgICBz
ZXRGaWxsQ29sb3Iob2xkRmlsbENvbG9yKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6Y2xpcChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXAo
cmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KHBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKICAgICBtX2RhdGEtPmNsaXAocmVjdCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICht
X2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwT3V0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCiAgICAgLy8gRklYTUU6IFVzaW5nIENHUmVjdEluZmluaXRlIGlzIG11Y2ggZmFz
dGVyIHRoYW4gZ2V0dGluZyB0aGUgY2xpcCBib3VuZGluZyBib3guIEhvd2V2ZXIsIGR1ZQogICAg
IC8vIHRvIDxyZGFyOi8vcHJvYmxlbS8xMjU4NDQ5Mj4sIENHUmVjdEluZmluaXRlIGNhbid0IGJl
IHVzZWQgd2l0aCBhbiBhY2NlbGVyYXRlZCBjb250ZXh0IHRoYXQKICAgICAvLyBoYXMgY2VydGFp
biB0cmFuc2Zvcm1zIHRoYXQgYXJlbid0IGp1c3QgYSB0cmFuc2xhdGlvbiBvciBhIHNjYWxlLiBB
bmQgZHVlIHRvIDxyZGFyOi8vcHJvYmxlbS8xNDYzNDQ1Mz4KICAgICAvLyB3ZSBjYW5ub3QgdXNl
IGl0IGluIGZvciBhIHByaW50aW5nIGNvbnRleHQgZWl0aGVyLgogICAgIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgY3RtID0gZ2V0Q1RNKCk7Ci0gICAgYm9vbCBjYW5Vc2VDR1JlY3RJbmZpbml0ZSA9
IENHQ29udGV4dEdldFR5cGUocGxhdGZvcm1Db250ZXh0KCkpICE9IGtDR0NvbnRleHRUeXBlUERG
ICYmICghaXNBY2NlbGVyYXRlZENvbnRleHQoKSB8fCAoIWN0bS5iKCkgJiYgIWN0bS5jKCkpKTsK
KyAgICBib29sIGNhblVzZUNHUmVjdEluZmluaXRlID0gQ0dDb250ZXh0R2V0VHlwZShwbGF0Zm9y
bUNvbnRleHQoKSkgIT0ga0NHQ29udGV4dFR5cGVQREYgJiYgKHJlbmRlcmluZ01vZGUoKSA9PSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIHx8ICghY3RtLmIoKSAmJiAhY3RtLmMoKSkpOwog
ICAgIENHUmVjdCByZWN0c1syXSA9IHsgY2FuVXNlQ0dSZWN0SW5maW5pdGUgPyBDR1JlY3RJbmZp
bml0ZSA6IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChwbGF0Zm9ybUNvbnRleHQoKSksIHJl
Y3QgfTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgocGxhdGZvcm1Db250ZXh0KCkpOwogICAgIENH
Q29udGV4dEFkZFJlY3RzKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0cywgMik7CiAgICAgQ0dDb250
ZXh0RU9DbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91
dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dEJlZ2luUGF0
aChwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgQ0dDb250ZXh0QWRkUmVjdChwbGF0Zm9ybUNvbnRl
eHQoKSwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KHBsYXRmb3JtQ29udGV4dCgpKSk7CiAg
ICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkKQEAgLTEwMjMsMTYgKzkzOSw4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgQ0dDb250ZXh0RU9DbGlw
KHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICBDR0NvbnRleHRDbGlw
VG9SZWN0KGNvbnRleHQsIENHUmVjdFplcm8pOwpAQCAtMTA0OSwyMyArOTU3LDE0IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlw
UnVsZSkKICAgICBtX2RhdGEtPmNsaXAocGF0aCk7CiB9CiAKLUludFJlY3QgR3JhcGhpY3NDb250
ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6OmNsaXBC
b3VuZHMoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAgICByZXR1cm4gbV9pbXBs
LT5jbGlwQm91bmRzKCk7Ci0KICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChDR0NvbnRleHRH
ZXRDbGlwQm91bmRpbmdCb3gocGxhdGZvcm1Db250ZXh0KCkpKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmJlZ2luUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQor
dm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFj
aXR5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwogCiAgICAgc2F2ZSgpOwogCkBAIC0xMDc1
LDEyICs5NzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QbGF0Zm9ybVRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5z
Zm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjplbmRQbGF0Zm9ybVRyYW5zcGFyZW5jeUxheWVyKCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAg
IEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAogICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0RW5kVHJhbnNw
YXJlbmN5TGF5ZXIoY29udGV4dCk7CkBAIC0xMDg4LDExICs5ODQsNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZW5kUGxhdGZvcm1UcmFuc3BhcmVuY3lMYXllcigpCiAgICAgcmVzdG9yZSgpOwog
fQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6c3VwcG9ydHNUcmFuc3BhcmVuY3lMYXllcnMoKQot
ewotICAgIHJldHVybiB0cnVlOwotfQotCiBzdGF0aWMgdm9pZCBhcHBseVNoYWRvd09mZnNldFdv
cmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIENHRmxvYXQm
IHhPZmZzZXQsIENHRmxvYXQmIHlPZmZzZXQpCiB7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkg
fHwgUExBVEZPUk0oV0lOKQpAQCAtMTEwMCw3ICs5OTEsNyBAQCBzdGF0aWMgdm9pZCBhcHBseVNo
YWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsCiAgICAgVU5VU0VEX1BBUkFNKHhPZmZzZXQpOwogICAgIFVOVVNFRF9QQVJBTSh5T2Zmc2V0
KTsKICNlbHNlCi0gICAgaWYgKGNvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKKyAgICBp
ZiAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChDR0NvbnRleHREcmF3c1dpdGhDb3JyZWN0U2hh
ZG93T2Zmc2V0cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKQEAgLTExMjEsMjEgKzEwMTIs
MjIgQEAgc3RhdGljIHZvaWQgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5kSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAogI2VuZGlmCiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQg
Ymx1ciwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIHZvaWQgc2V0Q0dTaGFkb3coY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChvZmZzZXQuaXNaZXJvKCkgJiYgIWJsdXIpIHsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAs
IDApOwogICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICAKICAgICAvLyBGSVhNRTogd2UgY291bGQgYXZvaWQgdGhlIHNoYWRvdyBz
ZXR1cCBjb3N0IHdoZW4gd2Uga25vdyB3ZSdsbCByZW5kZXIgdGhlIHNoYWRvdyBvdXJzZWx2ZXMu
CiAKICAgICBDR0Zsb2F0IHhPZmZzZXQgPSBvZmZzZXQud2lkdGgoKTsKICAgICBDR0Zsb2F0IHlP
ZmZzZXQgPSBvZmZzZXQuaGVpZ2h0KCk7CiAgICAgQ0dGbG9hdCBibHVyUmFkaXVzID0gYmx1cjsK
LSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYg
KCFtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7CisgICAgaWYgKCFncmFwaGljc0Nv
bnRleHQuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkgewogICAgICAgICBDR0FmZmluZVRyYW5z
Zm9ybSB1c2VyVG9CYXNlQ1RNID0gZ2V0VXNlclRvQmFzZUNUTShjb250ZXh0KTsKIAogICAgICAg
ICBDR0Zsb2F0IEEgPSB1c2VyVG9CYXNlQ1RNLmEgKiB1c2VyVG9CYXNlQ1RNLmEgKyB1c2VyVG9C
YXNlQ1RNLmIgKiB1c2VyVG9CYXNlQ1RNLmI7CkBAIC0xMTU2LDcgKzEwNDgsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBvZmZzZXQs
IGZsb2F0IGJsdXIsIGNvbgogICAgIC8vIEV4dHJlbWUgImJsdXIiIHZhbHVlcyBjYW4gbWFrZSB0
ZXh0IGRyYXdpbmcgY3Jhc2ggb3IgdGFrZSBjcmF6eSBsb25nIHRpbWVzLCBzbyBjbGFtcAogICAg
IGJsdXJSYWRpdXMgPSBzdGQ6Om1pbihibHVyUmFkaXVzLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxv
YXQoMTAwMC4wKSk7CiAKLSAgICBhcHBseVNoYWRvd09mZnNldFdvcmthcm91bmRJZk5lZWRlZCgq
dGhpcywgeE9mZnNldCwgeU9mZnNldCk7CisgICAgYXBwbHlTaGFkb3dPZmZzZXRXb3JrYXJvdW5k
SWZOZWVkZWQoZ3JhcGhpY3NDb250ZXh0LCB4T2Zmc2V0LCB5T2Zmc2V0KTsKIAogICAgIC8vIENo
ZWNrIGZvciBhbiBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdh
cyBub3Qgc2V0IGZvciB0aGUgc2hhZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUg
anVzdCB1c2UgdGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgpAQCAtMTE2Niw1MCArMTA1OCw1MyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbgogICAgICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRo
Q29sb3IoY29udGV4dCwgQ0dTaXplTWFrZSh4T2Zmc2V0LCB5T2Zmc2V0KSwgYmx1clJhZGl1cywg
Y2FjaGVkQ0dDb2xvcihjb2xvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQ
bGF0Zm9ybVNoYWRvdygpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjp1cGRhdGVTdGF0ZShjb25z
dCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0
ZUNoYW5nZUZsYWdzIGZsYWdzKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IocGxhdGZvcm1Db250
ZXh0KCksIENHU2l6ZVplcm8sIDAsIDApOwotfQorICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3Jt
Q29udGV4dCgpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBs
aW1pdCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VUaGlja25l
c3NDaGFuZ2UpKQorICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgc3RkOjpt
YXgoc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCAwLmYpKTsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAg
ICAgICAgLy8gTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiB0aGUgc3RhdGUuCi0gICAgICAg
IG1faW1wbC0+c2V0TWl0ZXJMaW1pdChsaW1pdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNo
YW5nZSkpCisgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQs
IGNhY2hlZENHQ29sb3Ioc3RhdGUuc3Ryb2tlQ29sb3IpKTsKIAotICAgIENHQ29udGV4dFNldE1p
dGVyTGltaXQocGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLX0KKyAgICBpZiAoZmxhZ3MuY29u
dGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpCisgICAgICAgIHNl
dENHRmlsbENvbG9yKGNvbnRleHQsIHN0YXRlLmZpbGxDb2xvcik7CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0QWxw
aGEoY29udGV4dCwgc3RhdGUuYWxwaGEpOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBt
X2ltcGwtPmNsZWFyUmVjdChyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZmxh
Z3MuY29udGFpbnNBbnkoeyBHcmFwaGljc0NvbnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9u
Q2hhbmdlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6QmxlbmRNb2RlQ2hhbmdlIH0pKQorICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwgc2VsZWN0Q0dCbGVuZE1vZGUoc3RhdGUu
Y29tcG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSkpOwogCi0gICAgQ0dDb250ZXh0Q2xl
YXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3Jh
cGhpY3NDb250ZXh0U3RhdGU6OlRleHREcmF3aW5nTW9kZUNoYW5nZSkpCisgICAgICAgIENHQ29u
dGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBjZ1RleHREcmF3aW5nTW9kZShzdGF0ZS50
ZXh0RHJhd2luZ01vZGUpKTsKKworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRl
eHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hv
dWxkQW50aWFsaWFzKGNvbnRleHQsIHN0YXRlLnNob3VsZEFudGlhbGlhcyk7CisKKyAgICBpZiAo
ZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZFNtb290aEZvbnRzQ2hh
bmdlKSkKKyAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkU21vb3RoRm9udHMoY29udGV4dCwgc3Rh
dGUuc2hvdWxkU21vb3RoRm9udHMpOworCisgICAgaWYgKGZsYWdzLmNvbnRhaW5zKEdyYXBoaWNz
Q29udGV4dFN0YXRlOjpJbWFnZUludGVycG9sYXRpb25RdWFsaXR5Q2hhbmdlKSkKKyAgICAgICAg
Q0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwgY2dJbnRlcnBvbGF0aW9u
UXVhbGl0eShzdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5KSk7CisKKyAgICBpZiAoZmxh
Z3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkpCisgICAgICAg
IHNldENHU2hhZG93KCp0aGlzLCBzdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Qmx1
ciwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQordm9pZCBHcmFw
aGljc0NvbnRleHRDRzo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0U2V0TWl0ZXJM
aW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOworfQogCi0gICAgaWYgKG1faW1wbCkgewot
ICAgICAgICBtX2ltcGwtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHIpCit7CisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBy
KTsKK30KIAordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKK3sKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsK
QEAgLTEyNjksMTYgKzExNjQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBDR0NvbnRleHRTdHJv
a2VQYXRoKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChM
aW5lQ2FwIGNhcCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVDYXAoTGluZUNhcCBj
YXApCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVDYXAoY2FwKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQogICAgIHN3aXRjaCAoY2FwKSB7CiAgICAgY2FzZSBCdXR0Q2Fw
OgogICAgICAgICBDR0NvbnRleHRTZXRMaW5lQ2FwKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Q2FwQnV0dCk7CkBAIC0xMjkyLDE2ICsxMTc5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBjYXApCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hl
cywgZmxvYXQgZGFzaE9mZnNldCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0TGlu
ZURhc2goZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGlmIChkYXNoT2Zmc2V0IDwgMCkgewogICAgICAgICBmbG9hdCBsZW5ndGggPSAwOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhc2hlcy5zaXplKCk7ICsraSkKQEAgLTEzMTIsMTYg
KzExOTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFy
cmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiAgICAgQ0dDb250ZXh0U2V0TGluZURhc2go
cGxhdGZvcm1Db250ZXh0KCksIGRhc2hPZmZzZXQsIGRhc2hlcy5kYXRhKCksIGRhc2hlcy5zaXpl
KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4gam9p
bikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCiAgICAgc3dpdGNoIChqb2luKSB7CiAgICAgY2FzZSBNaXRlckpvaW46
CiAgICAgICAgIENHQ29udGV4dFNldExpbmVKb2luKHBsYXRmb3JtQ29udGV4dCgpLCBrQ0dMaW5l
Sm9pbk1pdGVyKTsKQEAgLTEzMzUsOTQgKzEyMDYsNDMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldExpbmVKb2luKExpbmVKb2luIGpvaW4pCiAgICAgfQogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBmaWxsUnVsZSkKLXsK
LSAgICBjbGlwUGF0aChwYXRoLCBmaWxsUnVsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzY2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwt
PnNjYWxlKHNpemUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CiAg
ICAgbV9kYXRhLT5zY2FsZShzaXplKTsKICAgICBtX2RhdGEtPm1fdXNlclRvRGV2aWNlVHJhbnNm
b3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnJvdGF0ZShmbG9hdCBhbmdsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OnJvdGF0ZShmbG9h
dCBhbmdsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+cm90YXRlKGFuZ2xlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIENHQ29udGV4dFJvdGF0ZUNUTShwbGF0Zm9ybUNv
bnRleHQoKSwgYW5nbGUpOwogICAgIG1fZGF0YS0+cm90YXRlKGFuZ2xlKTsKICAgICBtX2RhdGEt
Pm1fdXNlclRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQogICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgeCwgeSk7
CiAgICAgbV9kYXRhLT50cmFuc2xhdGUoeCwgeSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0Rldmlj
ZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lk
IEdyYXBoaWNzQ29udGV4dENHOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmNvbmNhdENUTSh0cmFuc2Zvcm0p
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dDb250ZXh0Q29uY2F0Q1RNKHBsYXRm
b3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+Y29uY2F0Q1RNKHRyYW5zZm9y
bSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3duVG9CZUlkZW50aXR5
ID0gZmFsc2U7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpzZXRDVE0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2lt
cGwtPnNldENUTSh0cmFuc2Zvcm0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ0dD
b250ZXh0U2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIG1fZGF0YS0+
c2V0Q1RNKHRyYW5zZm9ybSk7CiAgICAgbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtu
b3duVG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0Nv
bnRleHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZm
aW5lVHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dENHOjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxl
IGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAgICAg
ICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQogICAgIC8vIFRoZSBDVE0g
dXN1YWxseSBpbmNsdWRlcyB0aGUgZGV2aWNlU2NhbGVGYWN0b3IgZXhjZXB0IGluIFdlYktpdCAx
IHdoZW4gdGhlCiAgICAgLy8gY29udGVudCBpcyBub24tY29tcG9zaXRlZCwgc2luY2UgdGhlIHNj
YWxlIGZhY3RvciBpcyBpbnRlZ3JhdGVkIGF0IGEgbG93ZXIKICAgICAvLyBsZXZlbC4gVG8gZ3Vh
cmFudGVlIHRoZSBkZXZpY2VTY2FsZSBpcyBpbmNsdWRlZCwgd2UgY2FuIHVzZSB0aGlzIENHIEFQ
SS4KQEAgLTE0MzIsMTQgKzEyNTIsOCBAQCBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0
OjpnZXRDVE0oSW5jbHVkZURldmljZVNjYWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKICAgICByZXR1
cm4gQ0dDb250ZXh0R2V0Q1RNKHBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotRmxvYXRSZWN0IEdy
YXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IFJvdW5kaW5nTW9kZSByb3VuZGluZ01vZGUpCitGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Q0c6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUg
cm91bmRpbmdNb2RlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybiByZWN0OwotCi0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cm91
bmRUb0RldmljZVBpeGVscyhyZWN0LCByb3VuZGluZ01vZGUpOwotCiAgICAgLy8gSXQgaXMgbm90
IGVub3VnaCBqdXN0IHRvIHJvdW5kIHRvIHBpeGVscyBpbiBkZXZpY2Ugc3BhY2UuIFRoZSByb3Rh
dGlvbiBwYXJ0IG9mIHRoZQogICAgIC8vIGFmZmluZSB0cmFuc2Zvcm0gbWF0cml4IHRvIGRldmlj
ZSBzcGFjZSBjYW4gbWVzcyB3aXRoIHRoaXMgY29udmVyc2lvbiBpZiB3ZSBoYXZlIGEKICAgICAv
LyByb3RhdGluZyBpbWFnZSBsaWtlIHRoZSBoYW5kcyBvZiB0aGUgd29ybGQgY2xvY2sgd2lkZ2V0
LiBXZSBqdXN0IG5lZWQgdGhlIHNjYWxlLCBzbwpAQCAtMTQ4MiwyNyArMTI5NiwxMSBAQCBGbG9h
dFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgUm91bmRpbmdNbwogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwg
cm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGJvb2wgcHJpbnRp
bmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQotewotICAgIERh
c2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3aWR0aHMuYXBwZW5k
KHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0LmxvY2F0aW9uKCksIHJl
Y3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBzdHJva2VTdHlsZSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBi
b29sIHByaW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSBzdHJva2VTdHlsZSkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wg
cHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlKQogewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmICgh
d2lkdGhzLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPmRyYXdMaW5lc0ZvclRleHQocG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBw
cmludGluZywgZG91YmxlTGluZXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgQ29s
b3IgbG9jYWxTdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsKIAogICAgIEZsb2F0UmVjdCBib3Vu
ZHMgPSBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0KEZsb2F0UmVj
dChwb2ludCwgRmxvYXRTaXplKHdpZHRocy5sYXN0KCksIHRoaWNrbmVzcykpLCBwcmludGluZywg
bG9jYWxTdHJva2VDb2xvcik7CkBAIC0xNTU2LDE2ICsxMzU0LDggQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRo
aWNrbmVzcywKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGZpbGxD
b2xvcigpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVSTEZvclJlY3QoY29uc3Qg
VVJMJiBsaW5rLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6c2V0VVJMRm9yUmVjdChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBXVEZMb2dBbHdheXMoIkdyYXBoaWNzQ29udGV4
dDo6c2V0VVJMRm9yUmVjdCgpIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHJlY29yZGluZyBj
b250ZXh0cy4iKTsKLSAgICAgICAgcmV0dXJuOyAvLyBGSVhNRSBmb3IgZGlzcGxheSBsaXN0cy4K
LSAgICB9Ci0KICAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHVybFJlZiA9IGxpbmsuY3JlYXRlQ0ZV
UkwoKTsKICAgICBpZiAoIXVybFJlZikKICAgICAgICAgcmV0dXJuOwpAQCAtMTU3OSwzNiArMTM2
OSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGlu
aywgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkKICAgICBDR1BERkNvbnRleHRTZXRVUkxGb3JS
ZWN0KGNvbnRleHQsIHVybFJlZi5nZXQoKSwgQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0ocmVj
dCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxp
dHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0KLSAgICBDR0lu
dGVycG9sYXRpb25RdWFsaXR5IHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uRGVmYXVsdDsKLSAg
ICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEZWZhdWx0
OgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRvTm90SW50ZXJwb2xhdGU6Ci0g
ICAgICAgIHF1YWxpdHkgPSBrQ0dJbnRlcnBvbGF0aW9uTm9uZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAgICBxdWFsaXR5ID0ga0NH
SW50ZXJwb2xhdGlvbkxvdzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9u
UXVhbGl0eTo6TWVkaXVtOgotICAgICAgICBxdWFsaXR5ID0ga0NHSW50ZXJwb2xhdGlvbk1lZGl1
bTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoK
LSAgICAgICAgcXVhbGl0eSA9IGtDR0ludGVycG9sYXRpb25IaWdoOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkocGxhdGZvcm1Db250
ZXh0KCksIHF1YWxpdHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SXNDQUxheWVy
Q29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c2V0
SXNDQUxheWVyQ29udGV4dChib29sIGlzTGF5ZXJDb250ZXh0KQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQg
Zm9yIENBIENvbnRleHQuCiAgICAgQVNTRVJUKG1fZGF0YSk7CiAgICAgaWYgKGlzTGF5ZXJDb250
ZXh0KQpAQCAtMTYxNywxMjkgKzEzNzksMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElz
Q0FMYXllckNvbnRleHQoYm9vbCBpc0xheWVyQ29udGV4dCkKICAgICAgICAgbV9kYXRhLT5tX2Nv
bnRleHRGbGFncyAmPSB+SXNMYXllckNHQ29udGV4dDsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRl
eHQ6OmlzQ0FMYXllckNvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6aXND
QUxheWVyQ29udGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YSAmJiAobV9kYXRhLT5t
X2NvbnRleHRGbGFncyAmIElzTGF5ZXJDR0NvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJhdGVkKQordm9pZCBH
cmFwaGljc0NvbnRleHRDRzo6c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCBpc0FjY2VsZXJh
dGVkKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQog
ICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgZm9yIENBIENvbnRleHQuCi0gICAgQVNTRVJUKG1fZGF0
YSk7CiAgICAgaWYgKGlzQWNjZWxlcmF0ZWQpCiAgICAgICAgIG1fZGF0YS0+bV9jb250ZXh0Rmxh
Z3MgfD0gSXNBY2NlbGVyYXRlZENHQ29udGV4dDsKICAgICBlbHNlCiAgICAgICAgIG1fZGF0YS0+
bV9jb250ZXh0RmxhZ3MgJj0gfklzQWNjZWxlcmF0ZWRDR0NvbnRleHQ7CiB9CiAKLWJvb2wgR3Jh
cGhpY3NDb250ZXh0Ojppc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1faW1w
bCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+cmVuZGVyaW5nTW9kZSgpID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0RmxhZ3MgJiBJ
c0FjY2VsZXJhdGVkQ0dDb250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdpbmdNb2RlRmxhZ3MgbW9kZSkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwotCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICAKLSAgICBib29sIGZpbGwgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3
aW5nTW9kZTo6RmlsbCk7Ci0gICAgYm9vbCBzdHJva2UgPSBtb2RlLmNvbnRhaW5zKFRleHREcmF3
aW5nTW9kZTo6U3Ryb2tlKTsKLSAgICBpZiAoZmlsbCAmJiBzdHJva2UpCi0gICAgICAgIENHQ29u
dGV4dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0RmlsbFN0cm9rZSk7Ci0gICAg
ZWxzZSBpZiAoZmlsbCkKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dERyYXdpbmdNb2RlKGNvbnRl
eHQsIGtDR1RleHRGaWxsKTsKLSAgICBlbHNlIGlmIChzdHJva2UpCi0gICAgICAgIENHQ29udGV4
dFNldFRleHREcmF3aW5nTW9kZShjb250ZXh0LCBrQ0dUZXh0U3Ryb2tlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBzZXRDR1N0cm9rZUNvbG9yKHBs
YXRmb3JtQ29udGV4dCgpLCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldExpbmVXaWR0aChwbGF0Zm9ybUNvbnRleHQo
KSwgc3RkOjptYXgodGhpY2tuZXNzLCAwLmYpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZv
cm1Db250ZXh0KCkpOwotCi0gICAgc2V0Q0dGaWxsQ29sb3IocGxhdGZvcm1Db250ZXh0KCksIGNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkQW50aWFs
aWFzKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0KCksIGVuYWJsZSk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wg
ZW5hYmxlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KLSAgICBDR0NvbnRleHRTZXRT
aG91bGRTbW9vdGhGb250cyhwbGF0Zm9ybUNvbnRleHQoKSwgZW5hYmxlKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQWxwaGEoZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLQotICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29udGV4
dCgpLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlIGJsZW5kTW9kZSkKK1JlbmRlcmluZ01vZGUgR3JhcGhpY3NDb250ZXh0Q0c6OnJlbmRlcmlu
Z01vZGUoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgQ0dDb250ZXh0
U2V0QmxlbmRNb2RlKHBsYXRmb3JtQ29udGV4dCgpLCBzZWxlY3RDR0JsZW5kTW9kZShjb21wb3Np
dGVPcGVyYXRvciwgYmxlbmRNb2RlKSk7CisgICAgcmV0dXJuIG1fZGF0YS0+bV9jb250ZXh0Rmxh
Z3MgJiBJc0FjY2VsZXJhdGVkQ0dDb250ZXh0ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQg
OiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6cGxhdGZvcm1BcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
KQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOworICAgIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihkZXZpY2VTY2FsZUZhY3Rvcik7CiAK
ICAgICAvLyBDb3JlR3JhcGhpY3MgZXhwZWN0cyB0aGUgYmFzZSBDVE0gb2YgYSBIaURQSSBjb250
ZXh0IHRvIGhhdmUgdGhlIHNjYWxlIGZhY3RvciBhcHBsaWVkIHRvIGl0LgogICAgIC8vIEZhaWxp
bmcgdG8gY2hhbmdlIHRoZSBiYXNlIGxldmVsIENUTSB3aWxsIGNhdXNlIGNlcnRhaW4gQ0cgZmVh
dHVyZXMsIHN1Y2ggYXMgZm9jdXMgcmluZ3MsCkBAIC0xNzQ3LDEzICsxNDA4LDggQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcikKICAgICBDR0NvbnRleHRTZXRCYXNlQ1RNKHBsYXRmb3JtQ29udGV4dCgp
LCBDR0FmZmluZVRyYW5zZm9ybVNjYWxlKENHQ29udGV4dEdldEJhc2VDVE0ocGxhdGZvcm1Db250
ZXh0KCkpLCBkZXZpY2VTY2FsZUZhY3RvciwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtRmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBl
bGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6ZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRS
ZWN0JiBlbGxpcHNlKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICAvLyBDR0Nv
bnRleHRGaWxsRWxsaXBzZUluUmVjdCBvbmx5IHN1cHBvcnRzIHNvbGlkIGNvbG9ycy4KICAgICBp
ZiAobV9zdGF0ZS5maWxsR3JhZGllbnQgfHwgbV9zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAg
ICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKQEAgLTE3NjQsMTMgKzE0MjAsOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVs
bGlwc2UpCiAgICAgQ0dDb250ZXh0RmlsbEVsbGlwc2VJblJlY3QoY29udGV4dCwgZWxsaXBzZSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiBlbGxpcHNlKQordm9pZCBHcmFwaGljc0NvbnRleHRDRzo6c3Ryb2tlRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LQogICAgIC8vIENHQ29udGV4dFN0cm9rZUVsbGlwc2VJblJlY3Qgb25seSBzdXBwb3J0cyBzb2xp
ZCBjb2xvcnMuCiAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuKSB7CiAgICAgICAgIHN0cm9rZUVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CkBAIC0x
NzgxLDE4ICsxNDMyLDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQogICAgIENHQ29udGV4dFN0cm9rZUVsbGlw
c2VJblJlY3QoY29udGV4dCwgZWxsaXBzZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdAorYm9vbCBHcmFwaGljc0NvbnRleHRDRzo6c3Vw
cG9ydHNJbnRlcm5hbExpbmtzKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpz
ZXREZXN0aW5hdGlvbkZvclJlY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgRmxvYXRSZWN0IHJlY3QgPSBk
ZXN0UmVjdDsKQEAgLTE4MDIsMTUgKzE0NDgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RGVzdGluYXRpb25Gb3JSZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRSZWN0Jgog
ICAgIENHUERGQ29udGV4dFNldERlc3RpbmF0aW9uRm9yUmVjdChjb250ZXh0LCBuYW1lLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUmVjdCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGREZXN0aW5hdGlvbkF0UG9pbnQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmFkZERlc3RpbmF0
aW9uQXRQb2ludChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0KICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotCiAgICAgQ0dQb2ludCB0cmFuc2Zvcm1lZFBvaW50ID0g
Q0dQb2ludEFwcGx5QWZmaW5lVHJhbnNmb3JtKHBvc2l0aW9uLCBDR0NvbnRleHRHZXRDVE0oY29u
dGV4dCkpOwogICAgIENHUERGQ29udGV4dEFkZERlc3RpbmF0aW9uQXRQb2ludChjb250ZXh0LCBu
YW1lLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIHRyYW5zZm9ybWVkUG9pbnQpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmgKaW5kZXggMjVhMDg2NmUyZjM4NjllMWU3ZTFmOWU2NjI2YmVjMjA1YmIwZGM3NS4uZjk2
NmUyNzlhYjg2ZjU4Y2ZkZGFhMTMxODMzOGQxNDBhNGZhY2I5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCkBA
IC03Miw1ICs3MiwxMTAgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2F2ZUFuZFJlc3RvcmU7CiB9
OwogCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHRDRyA6IHB1YmxpYyBHcmFw
aGljc0NvbnRleHQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFJl
Zik7CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgR3JhcGhpY3NDb250ZXh0Q0coSERDLCBib29s
IGhhc0FscGhhID0gZmFsc2UpOyAvLyBGSVhNRTogVG8gYmUgcmVtb3ZlZC4KKyNlbmRpZgorCisg
ICAgfkdyYXBoaWNzQ29udGV4dENHKCk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgp
IGNvbnN0OworICAgIENHQ29udGV4dFJlZiBwbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBmaW5hbDsK
KworICAgIHZvaWQgc2F2ZSgpIGZpbmFsOworICAgIHZvaWQgcmVzdG9yZSgpIGZpbmFsOworCisg
ICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBib3JkZXJUaGlja25lc3Mg
PSAxKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBG
bG9hdFBvaW50JikgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKworICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9p
ZCBhcHBseUZpbGxQYXR0ZXJuKCkgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0aChjb25zdCBQYXRo
JikgZmluYWw7CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgZmluYWw7CisgICAgdm9p
ZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKworICAgIHZvaWQgYmVnaW5UcmFuc3Bh
cmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KSBmaW5hbDsKKyAgICB2b2lkIGVuZFRyYW5zcGFyZW5j
eUxheWVyKCkgZmluYWw7CisKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQg
ZmFjdG9yKSBmaW5hbDsKKworICAgIHVzaW5nIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3Q7Cisg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxs
Um91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBjb25zdCBDb2xvciYpIGZp
bmFsOworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZv
aWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpIGZpbmFsOwor
CisgICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
ICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIGVsbGlwc2UpIGZpbmFsOwor
CisgICAgdm9pZCBzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wpIGZpbmFsOworICAgIGJvb2wgaXND
QUxheWVyQ29udGV4dCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBzZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChib29sKSBmaW5hbDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBj
b25zdCBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAg
ICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisKKyAgICB2b2lkIGNsaXBP
dXQoY29uc3QgUGF0aCYpIGZpbmFsOworCisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJiwg
V2luZFJ1bGUgPSBXaW5kUnVsZTo6RXZlbk9kZCkgZmluYWw7CisKKyAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBmaW5h
bDsKKyAgICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZz
ZXQpIGZpbmFsOworICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIGZpbmFsOworICAgIHZv
aWQgc2V0TWl0ZXJMaW1pdChmbG9hdCkgZmluYWw7CisKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgc2VsZlNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSBmaW5hbDsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKE5hdGl2ZUltYWdl
JiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSBmaW5hbDsKKworICAgIHVz
aW5nIEdyYXBoaWNzQ29udGV4dDo6c2NhbGU7CisgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNp
emUmKSBmaW5hbDsKKyAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykgZmluYWw7
CisgICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgZmluYWw7CisKKyAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKyAgICB2b2lkIHNldENU
TShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKSBmaW5hbDsKKworICAgIEFmZmluZVRyYW5zZm9ybSBn
ZXRDVE0oSW5jbHVkZURldmljZVNjYWxlID0gUG9zc2libHlJbmNsdWRlRGV2aWNlU2NhbGUpIGNv
bnN0IGZpbmFsOworCisgICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiwgUm91bmRpbmdNb2RlID0gUm91bmRBbGxTaWRlcykgZmluYWw7CisKKyAgICB2b2lk
IGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBm
bG9hdCwgZmxvYXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IHZvaWQgZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiwgZG91YmxlLCBib29sJiwgY29uc3QgQ29s
b3ImKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVj
dD4mLCBkb3VibGUsIGJvb2wmLCBjb25zdCBDb2xvciYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2
b2lkIGRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywg
Y29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMs
IFN0cm9rZVN0eWxlKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtl
cihjb25zdCBGbG9hdFJlY3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisKKyAg
ICB2b2lkIHNldFVSTEZvclJlY3QoY29uc3QgVVJMJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7
CisKKyAgICB2b2lkIHNldERlc3RpbmF0aW9uRm9yUmVjdChjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRkRGVzdGluYXRpb25BdFBvaW50KGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworCisgICAgYm9vbCBz
dXBwb3J0c0ludGVybmFsTGlua3MoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncykgZmluYWw7CisKKyNpZiBPUyhXSU5ET1dTKQorICAgIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSogZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QgZmlu
YWw7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGUqIG1fZGF0YSB7IG51bGxwdHIgfTsKK307CisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCmluZGV4IDVmZmNlMTJmZWEyMTlmMzEwMGE4YmViOTYyMzMwODA4NzhjYTdi
YTYuLjY4NjVmMGJkNDFiYjQ4NDYwZGJhMWY0ZjZiYTU4MDc4NGNjYWVlNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGMKICAgICBpZiAoIWNnQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250
ZXh0LmdldCgpKTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dENHPihjZ0NvbnRleHQuZ2V0KCkpOwogCiAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgZGF0YSwgbnVtQnl0ZXMsIFtd
ICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CiAgICAgICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXRoQ0cuY3BwCmluZGV4IGNlZDNhZGJhMmI0YzEyZjBlODIzYTA4OGQyNWZjMTVh
YTg4OWE0MjcuLmYzM2RjZTkxNmRlYjM2ZTliMjUyYTI1YjgyODRlZDVkMWE4YWIxZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMjQ0
LDcgKzI0NCw3IEBAIGJvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGNvbnN0IEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDCiAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKGNvbnRleHQpOwogICAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgcGxhdGZvcm1QYXRo
KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAg
ICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgc3Ryb2tl
U3R5bGVBcHBsaWVyKGdyYXBoaWNzQ29udGV4dCk7CiAKICAgICBib29sIGhpdFN1Y2Nlc3MgPSBD
R0NvbnRleHRQYXRoQ29udGFpbnNQb2ludChjb250ZXh0LCBwb2ludCwga0NHUGF0aFN0cm9rZSk7
CkBAIC0zMDUsNyArMzA1LDcgQEAgRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChj
b25zdCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYgc3Ryb2sKICAgICBDR0NvbnRl
eHRBZGRQYXRoKGNvbnRleHQsIHBsYXRmb3JtUGF0aCgpKTsKIAogICAgIGlmIChzdHJva2VTdHls
ZUFwcGxpZXIpIHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250
ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OwogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CmluZGV4IDc2ZWE5YWY0ZDQyMzI0OTQxYTg5N2ZhYTNlNWRmZGFiMjNkZjgxMzQuLjA1YTM5MTY1
NDBiYjc2ZGEzZjBhYmFhMzM5NGZjOGRkMDg4YzhkYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtMzAsNyArMzAsNyBAQAog
I2lmIFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQzLDcgKzQz
LDcgQEAgc3RhdGljIHZvaWQgcGF0dGVybkNhbGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJl
ZiBjb250ZXh0KQogICAgIGlmICghcGxhdGZvcm1JbWFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgQ0dSZWN0IHJlY3QgPSBHcmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBp
eGVscygKKyAgICBDR1JlY3QgcmVjdCA9IEdyYXBoaWNzQ29udGV4dENHKGNvbnRleHQpLnJvdW5k
VG9EZXZpY2VQaXhlbHMoCiAgICAgICAgIEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgo
cGxhdGZvcm1JbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQocGxhdGZvcm1JbWFnZSkpKTsKICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgcmVjdCwgcGxhdGZvcm1JbWFnZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2Fk
ZUNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udENh
c2NhZGVDb2NvYS5tbQppbmRleCBlMjlhZWNkZmJmZTY4MDA2N2ZjYmExOTM5ZmFlNTFlZGM4Nzky
ZDRjLi5lMWU1YjQ0OGNiMjZmYzdlMDE3OGFiY2E4N2JlNDIyZmI1ODFjZjc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250Q2FzY2FkZUNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRDYXNj
YWRlQ29jb2EubW0KQEAgLTIzLDcgKzIzLDcgQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9y
dCAiRm9udENhc2NhZGUuaCIKIAotI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0
ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NT
UEkuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HcmFwaGljc0NvbnRleHRDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29h
Lm1tCmluZGV4IDE0MjFlYjkwZDdhNDlkMWU0ODI0YjVhYzg5Njg4MTNhMzA1NDNmN2QuLjM4OGFm
Y2Q2ZjQ2YWZjNDUyMjFmODA3MWQzNTA5NjdmMGU1MzU1MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4dENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dyYXBoaWNzQ29udGV4
dENvY29hLm1tCkBAIC0xMDYsNDggKzEwNiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3Rm9jdXNSaW5n
VG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aAog
ICAgIGRyYXdGb2N1c1JpbmcoY29udGV4dCwgY29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxvYXQg
b2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgcGF0aC5pc051bGwoKSkKKyAg
ICBpZiAocGF0aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPmRyYXdGb2N1c1JpbmcocGF0aCwgd2lkdGgsIG9mZnNldCwgY29s
b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgZHJhd0ZvY3VzUmluZ1RvQ29udGV4
dChwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aC5wbGF0Zm9ybVBhdGgoKSwgY29sb3IpOwogfQogCiAj
aWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgYm9vbCBkcmF3Rm9jdXNSaW5nVG9Db250ZXh0QXRU
aW1lKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1BhdGhSZWYgZm9jdXNSaW5nUGF0aCwgZG91Ymxl
IHRpbWVPZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyBib29sIGRyYXdGb2N1c1Jp
bmdUb0NvbnRleHRBdFRpbWUoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUGF0aFJlZiBmb2N1c1Jp
bmdQYXRoLCBkb3VibGUsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBVTlVTRURfUEFSQU0o
dGltZU9mZnNldCk7CiAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwogICAgIENHQ29u
dGV4dEFkZFBhdGgoY29udGV4dCwgZm9jdXNSaW5nUGF0aCk7CiAgICAgcmV0dXJuIGRyYXdGb2N1
c1JpbmdBdFRpbWUoY29udGV4dCwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKSwg
Y29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQ
YXRoJiBwYXRoLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNSZWRyYXcsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdGb2N1c1JpbmcoY29uc3Qg
UGF0aCYgcGF0aCwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBD
b2xvciYgY29sb3IpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSAvLyBGSVhNRTogaW1wbGVt
ZW50IGFuaW1hdGVkIGZvY3VzIHJpbmcgZHJhd2luZy4KKyAgICBpZiAocGF0aC5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgbmVlZHNSZWRyYXcgPSBkcmF3Rm9jdXNSaW5nVG9Db250
ZXh0QXRUaW1lKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpLCB0aW1lT2Zm
c2V0LCBjb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNv
bnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5l
ZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpk
cmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91YmxlIHRpbWVP
ZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
Ly8gRklYTUU6IGltcGxlbWVudCBhbmltYXRlZCBmb2N1cyByaW5nIGRyYXdpbmcuCi0gICAgICAg
IHJldHVybjsKLQogICAgIFJldGFpblB0cjxDR011dGFibGVQYXRoUmVmPiBmb2N1c1JpbmdQYXRo
ID0gYWRvcHRDRihDR1BhdGhDcmVhdGVNdXRhYmxlKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYg
cmVjdCA6IHJlY3RzKQogICAgICAgICBDR1BhdGhBZGRSZWN0KGZvY3VzUmluZ1BhdGguZ2V0KCks
IDAsIENHUmVjdChyZWN0KSk7CkBAIC0xNTcsMTYgKzE0Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZG91Ymxl
IHRpbWVPCiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lk
dGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRl
eHRDRzo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZsb2F0
LCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAg
IG1faW1wbC0+ZHJhd0ZvY3VzUmluZyhyZWN0cywgd2lkdGgsIG9mZnNldCwgY29sb3IpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgUmV0YWluUHRyPENHTXV0YWJsZVBhdGhSZWY+IGZv
Y3VzUmluZ1BhdGggPSBhZG9wdENGKENHUGF0aENyZWF0ZU11dGFibGUoKSk7CiAgICAgZm9yIChh
dXRvJiByZWN0IDogcmVjdHMpCiAgICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aC5n
ZXQoKSwgMCwgQ0dSZWN0SW5zZXQocmVjdCwgLW9mZnNldCwgLW9mZnNldCkpOwpAQCAtMTk5LDEx
ICsxNzYsOCBAQCBzdGF0aWMgQ0dDb2xvclJlZiBjb2xvckZvck1hcmtlckxpbmVTdHlsZShEb2N1
bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZSBzdHlsZSwgYgogICAgIH0KIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1
bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KICAgICAvLyBXZSB3YW50IHRvIGZpbmQgdGhlIG51bWJlciBv
ZiBmdWxsIGRvdHMsIHNvIHdlJ3JlIHNvbHZpbmcgdGhlIGVxdWF0aW9uczoKICAgICAvLyBkb3RE
aWFtZXRlciA9IGhlaWdodAogICAgIC8vIGRvdERpYW1ldGVyIC8gZG90R2FwID0gMTMuMjQ3IC8g
OS40NTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZS5tbQppbmRleCA1OGM1MTI0ZDRiNmM2MTM2NGU4ZDM2OTZmMzQ5NWZkYjI2NDU5N2Ew
Li5lMTM4YzMyMDFkZGU2NDUwMDViODZkMGE5ZjYxYThmNDBmNzQ2ODdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0z
NzEsNyArMzcxLDcgQEAgR3JhcGhpY3NDb250ZXh0JiBJT1N1cmZhY2U6OmVuc3VyZUdyYXBoaWNz
Q29udGV4dCgpCiAgICAgaWYgKG1fZ3JhcGhpY3NDb250ZXh0KQogICAgICAgICByZXR1cm4gKm1f
Z3JhcGhpY3NDb250ZXh0OwogCi0gICAgbV9ncmFwaGljc0NvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4oZW5zdXJlUGxhdGZvcm1Db250ZXh0KCkpOworICAgIG1fZ3JhcGhpY3ND
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRDRz4oZW5zdXJlUGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dCh0
cnVlKTsKIAogICAgIHJldHVybiAqbV9ncmFwaGljc0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
R2x5cGhzUmVjb3JkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCmluZGV4IDIwZGFlZjRiYjQx
ZjUwNjRmM2MxYmRhM2MyZmMzNjczMjAwNGYzZjcuLmQ3N2Y3NDE2ZGQ1NjVjM2QzZjliNDU1ODg2
MzA4YjZhMzliNWVmOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdHbHlwaHNSZWNvcmRlci5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIlRleHRGbGFncy5oIgor
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogI2lmIFVTRShDT1JFX1RFWFQpCiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgpAQCAtNTgsNyArNTksNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNvbnN0IEdseXBoQnVmZmVyR2x5
cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5nTW9kZSk7CiAKLSNpZiBVU0Uo
Q09SRV9URVhUKQorI2lmIFVTRShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCiAgICAgdm9p
ZCByZWNvcmRCZWdpbkxheWVyKENHUmVuZGVyaW5nU3RhdGVSZWYsIENHR1N0YXRlUmVmLCBDR1Jl
Y3QpOwogICAgIHZvaWQgcmVjb3JkRW5kTGF5ZXIoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3Rh
dGVSZWYpOwogICAgIHZvaWQgcmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVmLCBD
R0dTdGF0ZVJlZiwgY29uc3QgQ0dBZmZpbmVUcmFuc2Zvcm0qLCBjb25zdCBDR0dseXBoW10sIGNv
bnN0IENHUG9pbnQgcG9zaXRpb25zW10sIHNpemVfdCBjb3VudCk7CkBAIC02OCw3ICs2OSw5IEBA
IHB1YmxpYzoKICAgICBEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb247IH0KIAog
cHJpdmF0ZToKLSAgICBHcmFwaGljc0NvbnRleHQgY3JlYXRlSW50ZXJuYWxDb250ZXh0KCk7Cisj
aWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKKyAgICBVbmlxdWVSZWY8R3JhcGhp
Y3NDb250ZXh0PiBjcmVhdGVJbnRlcm5hbENvbnRleHQoKTsKKyNlbmRpZgogCiAgICAgdm9pZCBw
b3B1bGF0ZUludGVybmFsU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmKTsKICAgICB2
b2lkIHBvcHVsYXRlSW50ZXJuYWxDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7
CkBAIC04NSwxMyArODgsMTcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIHZvaWQgdXBkYXRlU2hh
ZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyLCBjb25z
dCBDb2xvciYgc2hhZG93Q29sb3IsIFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIAotI2lmIFVT
RShDT1JFX1RFWFQpCisjaWYgVVNFKENPUkVfVEVYVCkgJiYgIVBMQVRGT1JNKFdJTikKICAgICB2
b2lkIHVwZGF0ZVNoYWRvdyhDR1N0eWxlUmVmKTsKICNlbmRpZgogCiAgICAgUmVjb3JkZXImIG1f
b3duZXI7CiAgICAgRHJhd0dseXBoc0RlY29uc3RydWN0aW9uIG1fZHJhd0dseXBoc0RlY29uc3Ry
dWN0aW9uOwotICAgIEdyYXBoaWNzQ29udGV4dCBtX2ludGVybmFsQ29udGV4dDsKKworI2lmIFVT
RShDT1JFX1RFWFQpICYmICFQTEFURk9STShXSU4pCisgICAgVW5pcXVlUmVmPEdyYXBoaWNzQ29u
dGV4dD4gbV9pbnRlcm5hbENvbnRleHQ7CisjZW5kaWYKKwogICAgIGNvbnN0IEZvbnQqIG1fb3Jp
Z2luYWxGb250IHsgbnVsbHB0ciB9OwogICAgIEZvbnRTbW9vdGhpbmdNb2RlIG1fc21vb3RoaW5n
TW9kZSB7IEZvbnRTbW9vdGhpbmdNb2RlOjpBdXRvU21vb3RoaW5nIH07CiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fb3JpZ2luYWxUZXh0TWF0cml4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29y
ZGVyQ29yZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd0dseXBoc1JlY29yZGVyQ29yZVRleHQuY3BwCmluZGV4IGMw
NDg2NTJmOWIwZTY1YWI1YzJjOWNlNTk4YjUyNzcwMmM4YWEzM2QuLmNhY2Y3NjRmNWRlMmM4Y2Y2
ZDNmNDAwMDJmZWFmNWUxMjE2OTFjODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdHbHlwaHNSZWNvcmRlckNv
cmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3R2x5cGhzUmVjb3JkZXJDb3JlVGV4dC5jcHAKQEAgLTM0LDYg
KzM0LDcgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKICNp
bmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAK
ICNpbmNsdWRlIDxDb3JlVGV4dC9Db3JlVGV4dC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
QEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIENHRXJyb3IgZHJhd0ltYWdlKENHQ29udGV4dERlbGVn
YXRlUmVmIGRlbGVnYXRlLCBDR1JlbmRlcmluZ1N0YXRlUmVmIHJzdGEKICAgICByZXR1cm4ga0NH
RXJyb3JTdWNjZXNzOwogfQogCi1HcmFwaGljc0NvbnRleHQgRHJhd0dseXBoc1JlY29yZGVyOjpj
cmVhdGVJbnRlcm5hbENvbnRleHQoKQorVW5pcXVlUmVmPEdyYXBoaWNzQ29udGV4dD4gRHJhd0ds
eXBoc1JlY29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogewogICAgIGF1dG8gY29udGV4
dERlbGVnYXRlID0gYWRvcHRDRihDR0NvbnRleHREZWxlZ2F0ZUNyZWF0ZSh0aGlzKSk7CiAgICAg
Q0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGRlQmVn
aW5MYXllciwgcmVpbnRlcnByZXRfY2FzdDxDR0NvbnRleHREZWxlZ2F0ZUNhbGxiYWNrPigmYmVn
aW5MYXllcikpOwpAQCAtODQsNyArODUsNyBAQCBHcmFwaGljc0NvbnRleHQgRHJhd0dseXBoc1Jl
Y29yZGVyOjpjcmVhdGVJbnRlcm5hbENvbnRleHQoKQogICAgIENHQ29udGV4dERlbGVnYXRlU2V0
Q2FsbGJhY2soY29udGV4dERlbGVnYXRlLmdldCgpLCBkZURyYXdHbHlwaHMsIHJlaW50ZXJwcmV0
X2Nhc3Q8Q0dDb250ZXh0RGVsZWdhdGVDYWxsYmFjaz4oJldlYkNvcmU6OkRpc3BsYXlMaXN0Ojpk
cmF3R2x5cGhzKSk7CiAgICAgQ0dDb250ZXh0RGVsZWdhdGVTZXRDYWxsYmFjayhjb250ZXh0RGVs
ZWdhdGUuZ2V0KCksIGRlRHJhd0ltYWdlLCByZWludGVycHJldF9jYXN0PENHQ29udGV4dERlbGVn
YXRlQ2FsbGJhY2s+KCZkcmF3SW1hZ2UpKTsKICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Q29udGV4dENyZWF0ZVdpdGhEZWxlZ2F0ZShjb250ZXh0RGVsZWdhdGUuZ2V0KCksIGtDR0NvbnRl
eHRUeXBlVW5rbm93biwgbnVsbHB0ciwgbnVsbHB0cikpOwotICAgIHJldHVybiBHcmFwaGljc0Nv
bnRleHQoY29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R3JhcGhpY3ND
b250ZXh0Q0c+KGNvbnRleHQuZ2V0KCkpOwogfQogCiBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNSZWNvcmRlcihSZWNvcmRlciYgb3duZXIsIERyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbiBk
cmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCkBAIC0xMTksMzQgKzEyMCwzMSBAQCB2b2lkIERyYXdH
bHlwaHNSZWNvcmRlcjo6cG9wdWxhdGVJbnRlcm5hbFN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBjb250ZQogdm9pZCBEcmF3R2x5cGhzUmVjb3JkZXI6OnBvcHVsYXRlSW50ZXJuYWxD
b250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBjb250ZXh0U3RhdGUpCiB7CiAgICAg
aWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAgICAgICBt
X2ludGVybmFsQ29udGV4dC5zZXRGaWxsQ29sb3IobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5j
b2xvcik7CisgICAgICAgIG1faW50ZXJuYWxDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9vcmlnaW5h
bFN0YXRlLmZpbGxTdHlsZS5jb2xvcik7CiAgICAgZWxzZSBpZiAobV9vcmlnaW5hbFN0YXRlLmZp
bGxTdHlsZS5ncmFkaWVudCkKLSAgICAgICAgbV9pbnRlcm5hbENvbnRleHQuc2V0RmlsbEdyYWRp
ZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50LCBtX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOworICAgICAgICBtX2ludGVybmFsQ29u
dGV4dC0+c2V0RmlsbEdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50
LCBtX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0pOwogICAg
IGVsc2UgewogICAgICAgICBBU1NFUlQobV9vcmlnaW5hbFN0YXRlLmZpbGxTdHlsZS5wYXR0ZXJu
KTsKICAgICAgICAgaWYgKG1fb3JpZ2luYWxTdGF0ZS5maWxsU3R5bGUucGF0dGVybikKLSAgICAg
ICAgICAgIG1faW50ZXJuYWxDb250ZXh0LnNldEZpbGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUu
ZmlsbFN0eWxlLnBhdHRlcm4pOworICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldEZp
bGxQYXR0ZXJuKCptX29yaWdpbmFsU3RhdGUuZmlsbFN0eWxlLnBhdHRlcm4pOwogICAgIH0KIAog
ICAgIGlmIChtX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuY29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRTdHJva2VDb2xvcihtX29yaWdpbmFsU3RhdGUuc3Ry
b2tlU3R5bGUuY29sb3IpOworICAgICAgICBtX2ludGVybmFsQ29udGV4dC0+c2V0U3Ryb2tlQ29s
b3IobV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLmNvbG9yKTsKICAgICBlbHNlIGlmIChtX29y
aWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQpCi0gICAgICAgIG1faW50ZXJuYWxDb250
ZXh0LnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFsU3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGll
bnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKTsK
KyAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZUdyYWRpZW50KCptX29yaWdpbmFs
U3RhdGUuc3Ryb2tlU3R5bGUuZ3JhZGllbnQsIG1fb3JpZ2luYWxTdGF0ZS5zdHJva2VTdHlsZS5n
cmFkaWVudFNwYWNlVHJhbnNmb3JtKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUKG1fb3Jp
Z2luYWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICAgICAgaWYgKG1fb3JpZ2luYWxT
dGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKQotICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQu
c2V0U3Ryb2tlUGF0dGVybigqbV9vcmlnaW5hbFN0YXRlLnN0cm9rZVN0eWxlLnBhdHRlcm4pOwor
ICAgICAgICAgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFN0cm9rZVBhdHRlcm4oKm1fb3JpZ2lu
YWxTdGF0ZS5zdHJva2VTdHlsZS5wYXR0ZXJuKTsKICAgICB9CiAKLSAgICBtX2ludGVybmFsQ29u
dGV4dC5zZXRDVE0obV9vcmlnaW5hbFN0YXRlLmN0bSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQt
PnNldENUTShtX29yaWdpbmFsU3RhdGUuY3RtKTsKIAotICAgIG1faW50ZXJuYWxDb250ZXh0LnNl
dFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuaWdub3JlVHJh
bnNmb3Jtcyk7Ci0gICAgaWYgKGNvbnRleHRTdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzKQot
ICAgICAgICBtX2ludGVybmFsQ29udGV4dC5zZXRMZWdhY3lTaGFkb3cobV9vcmlnaW5hbFN0YXRl
LnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5zaGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0
YXRlLnNoYWRvdy5jb2xvcik7Ci0gICAgZWxzZQotICAgICAgICBtX2ludGVybmFsQ29udGV4dC5z
ZXRTaGFkb3cobV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5vZmZzZXQsIG1fb3JpZ2luYWxTdGF0ZS5z
aGFkb3cuYmx1ciwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5jb2xvcik7CisgICAgbV9pbnRlcm5h
bENvbnRleHQtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fb3JpZ2luYWxTdGF0ZS5zaGFk
b3cuaWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFNoYWRvdyht
X29yaWdpbmFsU3RhdGUuc2hhZG93Lm9mZnNldCwgbV9vcmlnaW5hbFN0YXRlLnNoYWRvdy5ibHVy
LCBtX29yaWdpbmFsU3RhdGUuc2hhZG93LmNvbG9yLCBjb250ZXh0U3RhdGUuc2hhZG93UmFkaXVz
TW9kZSk7CiAKLSAgICBtX2ludGVybmFsQ29udGV4dC5zZXRUZXh0RHJhd2luZ01vZGUoY29udGV4
dFN0YXRlLnRleHREcmF3aW5nTW9kZSk7CisgICAgbV9pbnRlcm5hbENvbnRleHQtPnNldFRleHRE
cmF3aW5nTW9kZShjb250ZXh0U3RhdGUudGV4dERyYXdpbmdNb2RlKTsKIH0KIAogdm9pZCBEcmF3
R2x5cGhzUmVjb3JkZXI6OnByZXBhcmVJbnRlcm5hbENvbnRleHQoY29uc3QgRm9udCYgZm9udCwg
Rm9udFNtb290aGluZ01vZGUgc21vb3RoaW5nTW9kZSkKQEAgLTMwMiw3ICszMDAsNyBAQCB2b2lk
IERyYXdHbHlwaHNSZWNvcmRlcjo6cmVjb3JkRHJhd0dseXBocyhDR1JlbmRlcmluZ1N0YXRlUmVm
LCBDR0dTdGF0ZVJlZiBnc3RhdAogICAgICAgICByZXR1cm47CiAKICNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIGF1dG8gdGV4dFBvc2l0aW9uID0gQ0dDb250ZXh0R2V0VGV4dFBvc2l0aW9uKG1faW50
ZXJuYWxDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBhdXRvIHRleHRQb3NpdGlvbiA9
IENHQ29udGV4dEdldFRleHRQb3NpdGlvbihtX2ludGVybmFsQ29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCkpOwogICAgIEFTU0VSVCghdGV4dFBvc2l0aW9uLngpOwogICAgIEFTU0VSVCghdGV4dFBv
c2l0aW9uLnkpOwogI2VuZGlmCkBAIC0zMjEsNyArMzE5LDcgQEAgdm9pZCBEcmF3R2x5cGhzUmVj
b3JkZXI6OnJlY29yZERyYXdHbHlwaHMoQ0dSZW5kZXJpbmdTdGF0ZVJlZiwgQ0dHU3RhdGVSZWYg
Z3N0YXQKICAgICAvLyBJZiB5b3Ugc2V0IHRoZXNlIHR3byBlcXVhbCB0byBlYWNoIG90aGVyLCBh
bmQgc29sdmUgZm9yIFgsIHlvdSBnZXQKICAgICAvLyBDVE0gKiBjdXJyZW50VGV4dE1hdHJpeCA9
IENUTSAqIFggKiBtX29yaWdpbmFsVGV4dE1hdHJpeAogICAgIC8vIGN1cnJlbnRUZXh0TWF0cml4
ICogaW52ZXJzZShtX29yaWdpbmFsVGV4dE1hdHJpeCkgPSBYCi0gICAgQWZmaW5lVHJhbnNmb3Jt
IGN1cnJlbnRUZXh0TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQWZmaW5lVHJhbnNmb3JtIGN1cnJlbnRUZXh0
TWF0cml4ID0gQ0dDb250ZXh0R2V0VGV4dE1hdHJpeChtX2ludGVybmFsQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkpOwogICAgIEFmZmluZVRyYW5zZm9ybSBjdG1GaXh1cDsKICAgICBpZiAoYXV0
byBpbnZlcnRlZE9yaWdpbmFsVGV4dE1hdHJpeCA9IG1fb3JpZ2luYWxUZXh0TWF0cml4LmludmVy
c2UoKSkKICAgICAgICAgY3RtRml4dXAgPSBjdXJyZW50VGV4dE1hdHJpeCAqIGludmVydGVkT3Jp
Z2luYWxUZXh0TWF0cml4LnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5jcHAKaW5kZXggNTRkODU0NzEyM2Y4OTQ3ZDZmMmZhY2Q3ZmNhNmY5
OTUxODFhMjY3MS4uMzk1N2M0NTc2ZmU5MTJkNjgxMDIwNzYxMDAxY2MyNGY2ODY4ODYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcApAQCAt
MzQsOSArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgRGlzcGxheUxpc3Qg
ewogCiBEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNLCBSZWNvcmRlcjo6RGVs
ZWdhdGUqIGRlbGVnYXRlKQotICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRp
c3BsYXlMaXN0Q29udGV4dCkgewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4o
ZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgp
LCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIGluaXRpYWxDVE0sIGRlbGVnYXRlKTsKLSAg
ICB9KQorICAgIDogbV9jb250ZXh0KG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRl
KCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgaW5pdGlhbENUTSwgZGVsZWdhdGUpCiB7
CiB9CiAKQEAgLTQ2LDEzICs0NCw2IEBAIHZvaWQgRHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiAgICAgbV9yZXBs
YXllZERpc3BsYXlMaXN0LnJlc2V0KCk7CiB9CiAKLVJlY29yZGVyJiBEcmF3aW5nQ29udGV4dDo6
cmVjb3JkZXIoKQotewotICAgIGF1dG8qIGdyYXBoaWNzQ29udGV4dEltcGwgPSBjb250ZXh0KCku
aW1wbCgpOwotICAgIEFTU0VSVChncmFwaGljc0NvbnRleHRJbXBsKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UmVjb3JkZXImPigqZ3JhcGhpY3NDb250ZXh0SW1wbCk7Ci19Ci0KIHZvaWQgRHJh
d2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQpCiB7CiAgICAgaWYgKG1fZGlzcGxheUxpc3QuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKaW5kZXggZDM3YzA3MzViZWI1NTQ5MmQ5
MGZmOWVjZTRjYTRkYjc5OTVkNWY1OC4uOTY1NjM2MzRkNTdmNDA5NGIzYzJjYmE2ZjA2NzQwZjUw
NjNkZDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBEcmF3aW5n
Q29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0gPSB7IH0sIFJlY29yZGVyOjpEZWxlZ2F0ZSogPSBudWxscHRyKTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
UmVjb3JkZXImIHJlY29yZGVyKCk7CisgICAgUmVjb3JkZXImIHJlY29yZGVyKCkgeyByZXR1cm4g
bV9jb250ZXh0OyB9OwogICAgIERpc3BsYXlMaXN0IHRha2VEaXNwbGF5TGlzdCgpIHsgcmV0dXJu
IHN0ZDo6ZXhjaGFuZ2UobV9kaXNwbGF5TGlzdCwgeyB9KTsgfQogICAgIERpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KICAgICBjb25zdCBEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxheURpc3Bs
YXlMaXN0KEdyYXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgR3JhcGhpY3NDb250
ZXh0IG1fY29udGV4dDsKKyAgICBSZWNvcmRlciBtX2NvbnRleHQ7CiAgICAgRGlzcGxheUxpc3Qg
bV9kaXNwbGF5TGlzdDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5NZW1vcnlEaXNwbGF5TGlzdD4g
bV9yZXBsYXllZERpc3BsYXlMaXN0OwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5jcHAKaW5kZXggMWE0
ZWE2ZGUzYjVhOGNlMzVkOGU3NzlmY2VjZWZiNDZiMTgyYzBhMy4uZjIyMmUyMTgzYTM5MTAzYmQ2
OTg1MzQ0NjRkZjNjYjBhOGZmOTA3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SXRlbXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1z
LmNwcApAQCAtNjA1LDExICs2MDUsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiB0cywgY29uc3QgRHJhd0VsbGlwc2UmIGl0ZW0pCiAKIHZvaWQgRHJhd1BhdGg6
OmFwcGx5KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKIHsKLSNpZiBVU0UoQ0cpCiAg
ICAgY29udGV4dC5kcmF3UGF0aChtX3BhdGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY29u
dGV4dCk7Ci0jZW5kaWYKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIGNvbnN0IERyYXdQYXRoJikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
CmluZGV4IDA3NDA0MWYyNmExZTk2NGRjNGM3NmY0ODJiYzRjOTkzZTg3ZWUzMTUuLmYxMTdjZmE4
MzkzNjA4OWU3MWZkMDVhYjc4NjQ4YmQyNDhkNWU3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaApAQCAtMjc5LDEwICsyNzksNiBAQCBwdWJsaWM6CiAgICAgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHN0cm9rZVBhdHRlcm5JbWFnZUlkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX3N0cm9rZVBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogICAgIFJlbmRlcmlu
Z1Jlc291cmNlSWRlbnRpZmllciBmaWxsUGF0dGVybkltYWdlSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fZmlsbFBhdHRlcm4udGlsZUltYWdlSWRlbnRpZmllcjsgfQogCi0gICAgc3RhdGlj
IHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpOwotCi0gICAg
c3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBHcmFw
aGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdz
KTsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBj
b25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8U2V0U3Rh
dGU+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTMzNSw5ICszMzEsNyBAQCB2b2lkIFNldFN0YXRl
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKICAgICAgICAgZW5jb2RlciA8PCBzdGF0
ZS5zaGFkb3dPZmZzZXQ7CiAgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93Qmx1cjsKICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0ZS5zaGFkb3dDb2xvcjsKLSNpZiBVU0UoQ0cpCi0gICAgICAg
IGVuY29kZXIgPDwgc3RhdGUuc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSNlbmRpZiAvLyBVU0Uo
Q0cpCisgICAgICAgIGVuY29kZXIgPDwgc3RhdGUuc2hhZG93UmFkaXVzTW9kZTsKICAgICB9CiAK
ICAgICBpZiAoY2hhbmdlRmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0cm9r
ZVRoaWNrbmVzc0NoYW5nZSkpCkBAIC00NjMsMTQgKzQ1NywxMiBAQCBPcHRpb25hbDxTZXRTdGF0
ZT4gU2V0U3RhdGU6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogCiAgICAgICAgIHN0YXRlQ2hh
bmdlLm1fc3RhdGUuc2hhZG93Q29sb3IgPSAqc2hhZG93Q29sb3I7CiAKLSNpZiBVU0UoQ0cpCi0g
ICAgICAgIE9wdGlvbmFsPGJvb2w+IHNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0gICAgICAgIGRl
Y29kZXIgPj4gc2hhZG93c1VzZUxlZ2FjeVJhZGl1czsKLSAgICAgICAgaWYgKCFzaGFkb3dzVXNl
TGVnYWN5UmFkaXVzKQorICAgICAgICBPcHRpb25hbDxTaGFkb3dSYWRpdXNNb2RlPiBzaGFkb3dS
YWRpdXNNb2RlOworICAgICAgICBkZWNvZGVyID4+IHNoYWRvd1JhZGl1c01vZGU7CisgICAgICAg
IGlmICghc2hhZG93UmFkaXVzTW9kZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAKLSAgICAgICAgc3RhdGVDaGFuZ2UubV9zdGF0ZS5zaGFkb3dzVXNlTGVnYWN5UmFkaXVzID0g
KnNoYWRvd3NVc2VMZWdhY3lSYWRpdXM7Ci0jZW5kaWYgLy8gVVNFKENHKQorICAgICAgICBzdGF0
ZUNoYW5nZS5tX3N0YXRlLnNoYWRvd1JhZGl1c01vZGUgPSBXVEZNb3ZlKCpzaGFkb3dSYWRpdXNN
b2RlKTsKICAgICB9CiAKICAgICBpZiAoc3RhdGVDaGFuZ2UubV9jaGFuZ2VGbGFncy5jb250YWlu
cyhHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKSkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDY5NDQ4MjhkZmM2NGI4NzRi
OTM3Y2VlYWRmMmFlZGMyYTY3MzgxMTUuLjgyYjJjN2FiNjUxMzgyMTBiZjNiNjU0ZTU5MmVkMzA3
MWU0ZjgxMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5jcHAKQEAg
LTMzLDE1ICszMywxNSBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIERpc3BsYXlMaXN0
IHsKIAotUmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIGNv
bnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlh
bENUTSwgRGVsZWdhdGUqIGRlbGVnYXRlLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNE
ZWNvbnN0cnVjdGlvbiBkcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24pCi0gICAgOiBHcmFwaGljc0Nv
bnRleHRJbXBsKGNvbnRleHQpCi0gICAgLCBtX2Rpc3BsYXlMaXN0KGRpc3BsYXlMaXN0KQorUmVj
b3JkZXI6OlJlY29yZGVyKERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIGluaXRpYWxDVE0sIERlbGVnYXRlKiBkZWxlZ2F0ZSwgRHJhd0dseXBo
c1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gZHJhd0dseXBoc0RlY29uc3RydWN0
aW9uKQorICAgIDogbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKICAgICAsIG1fZGVsZWdhdGUo
ZGVsZWdhdGUpCiAgICAgLCBtX2lzTmVzdGVkKGZhbHNlKQogICAgICwgbV9kcmF3R2x5cGhzUmVj
b3JkZXIoKnRoaXMsIGRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbikKQEAgLTUwLDkgKzUwLDggQEAg
UmVjb3JkZXI6OlJlY29yZGVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgRGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0LCBjb25zdCBHcmEKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKHsgc3RhdGUs
IGluaXRpYWxDVE0sIGluaXRpYWxDbGlwIH0pOwogfQogCi1SZWNvcmRlcjo6UmVjb3JkZXIoUmVj
b3JkZXImIHBhcmVudCwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSYgc3RhdGUsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgaW5pdGlhbENUTSkKLSAgICA6IEdyYXBoaWNzQ29udGV4dEltcGwoY29u
dGV4dCkKLSAgICAsIG1fZGlzcGxheUxpc3QocGFyZW50Lm1fZGlzcGxheUxpc3QpCitSZWNvcmRl
cjo6UmVjb3JkZXIoUmVjb3JkZXImIHBhcmVudCwgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUm
IHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIGluaXRpYWxDVE0pCisgICAgOiBtX2Rpc3BsYXlMaXN0KHBhcmVudC5tX2Rpc3BsYXlMaXN0
KQogICAgICwgbV9kZWxlZ2F0ZShwYXJlbnQubV9kZWxlZ2F0ZSkKICAgICAsIG1faXNOZXN0ZWQo
dHJ1ZSkKICAgICAsIG1fZHJhd0dseXBoc1JlY29yZGVyKCp0aGlzLCBwYXJlbnQubV9kcmF3R2x5
cGhzUmVjb3JkZXIuZHJhd0dseXBoc0RlY29uc3RydWN0aW9uKCkpCkBAIC0xNjYsMTEgKzE2NSw2
IEBAIFJlbmRlcmluZ01vZGUgUmVjb3JkZXI6OnJlbmRlcmluZ01vZGUoKSBjb25zdAogICAgIHJl
dHVybiBtX2RlbGVnYXRlID8gbV9kZWxlZ2F0ZS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsKIH0KIAotdm9pZCBSZWNvcmRlcjo6Y2xlYXJTaGFkb3coKQot
ewotICAgIGFwcGVuZDxDbGVhclNoYWRvdz4oKTsKLX0KLQogdm9pZCBSZWNvcmRlcjo6c2V0TGlu
ZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7CiAgICAgYXBwZW5kPFNldExpbmVDYXA+KGxpbmVDYXAp
OwpAQCAtMjA2LDYgKzIwMCwxMCBAQCB2b2lkIFJlY29yZGVyOjphcHBlbmREcmF3R2x5cGhzSXRl
bVdpdGhDYWNoZWRGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEdseXBoQgogCiB2b2lkIFJl
Y29yZGVyOjpkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImIGltYWdlQnVmZmVy
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogeworICAgIGlmICghY2FuRHJhd0lt
YWdlQnVmZmVyKGltYWdlQnVmZmVyKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQ6OmRyYXdJ
bWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlciwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgIG1fZGlzcGxheUxpc3QuY2FjaGVJbWFnZUJ1ZmZlcihp
bWFnZUJ1ZmZlcik7CiAgICAgYXBwZW5kPERyYXdJbWFnZUJ1ZmZlcj4oaW1hZ2VCdWZmZXIucmVu
ZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKCksIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
IH0KQEAgLTI3MCw3ICsyNjgsNyBAQCB2b2lkIFJlY29yZGVyOjpzZXRDVE0oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCiAgICAgYXBwZW5kPFNldENUTT4odHJhbnNmb3JtKTsKIH0K
IAotQWZmaW5lVHJhbnNmb3JtIFJlY29yZGVyOjpnZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpJbmNs
dWRlRGV2aWNlU2NhbGUpCitBZmZpbmVUcmFuc2Zvcm0gUmVjb3JkZXI6OmdldENUTShHcmFwaGlj
c0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogUmVz
cGVjdCB0aGUgZ2l2ZW4gdmFsdWUgb2YgSW5jbHVkZURldmljZVNjYWxlLgogICAgIHJldHVybiBj
dXJyZW50U3RhdGUoKS5jdG07CkBAIC0yOTgsNyArMjk2LDcgQEAgdm9pZCBSZWNvcmRlcjo6ZHJh
d0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludDIp
CiAgICAgYXBwZW5kPERyYXdMaW5lPihwb2ludDEsIHBvaW50Mik7CiB9CiAKLXZvaWQgUmVjb3Jk
ZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZsb2F0IHRoaWNr
bmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91Ymxl
TGluZXMpCit2b2lkIFJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHBy
aW50aW5nLCBib29sIGRvdWJsZUxpbmVzLCBTdHJva2VTdHlsZSkKIHsKICAgICBhcHBlbmQ8RHJh
d0xpbmVzRm9yVGV4dD4oRmxvYXRQb2ludCgpLCB0b0Zsb2F0U2l6ZShwb2ludCksIHRoaWNrbmVz
cywgd2lkdGhzLCBwcmludGluZywgZG91YmxlTGluZXMpOwogfQpAQCAtMzI4LDYgKzMyNiwxOCBA
QCB2b2lkIFJlY29yZGVyOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0CiAgICAgYXBwZW5kPERyYXdGb2N1c1JpbmdSZWN0cz4o
cmVjdHMsIHdpZHRoLCBvZmZzZXQsIGNvbG9yKTsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3Zv
aWQgUmVjb3JkZXI6OmRyYXdGb2N1c1JpbmcoY29uc3QgUGF0aCYsIGRvdWJsZSwgYm9vbCYsIGNv
bnN0IENvbG9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFJlY29yZGVy
OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlLCBib29sJiwg
Y29uc3QgQ29sb3ImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisjZW5kaWYKKwogdm9p
ZCBSZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGFwcGVu
ZDxGaWxsUmVjdD4ocmVjdCk7CkBAIC00NDAsMTAgKzQ1MCw5IEBAIHZvaWQgUmVjb3JkZXI6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIHdpbmRSdWxlKQogICAgIGFwcGVuZDxD
bGlwUGF0aD4ocGF0aCwgd2luZFJ1bGUpOwogfQogCi1JbnRSZWN0IFJlY29yZGVyOjpjbGlwQm91
bmRzKCkKK0ludFJlY3QgUmVjb3JkZXI6OmNsaXBCb3VuZHMoKSBjb25zdAogewotICAgIFdURkxv
Z0Fsd2F5cygiR2V0dGluZyB0aGUgY2xpcCBib3VuZHMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCBE
aXNwbGF5TGlzdDo6UmVjb3JkZXIuIik7Ci0gICAgcmV0dXJuIEludFJlY3QoLTIwNDgsIC0yMDQ4
LCA0MDk2LCA0MDk2KTsKKyAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChjdXJyZW50U3RhdGUo
KS5jbGlwQm91bmRzKTsKIH0KIAogdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQpAQCAtNDUy
LDM1ICs0NjEsMzQgQEAgdm9pZCBSZWNvcmRlcjo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXImIGltYWdlQnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3QKICAgICBhcHBlbmQ8Q2xpcFRv
SW1hZ2VCdWZmZXI+KGltYWdlQnVmZmVyLnJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcigpLCBk
ZXN0UmVjdCk7CiB9CiAKLXZvaWQgUmVjb3JkZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNv
bG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0
aW9uKQorR3JhcGhpY3NDb250ZXh0OjpDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQgUmVjb3Jk
ZXI6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBj
b25zdCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UmIGNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3Jh
cGhpY3NDb250ZXh0Jik+JiYgZHJhd2luZ0Z1bmN0aW9uKQogewotICAgIEdyYXBoaWNzQ29udGV4
dCBuZXN0ZWRDb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIHsKLSAgICAgICAg
YXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRlc3RpbmF0aW9uLnNp
emUoKSk7CisgICAgYXV0byBpbml0aWFsQ2xpcCA9IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGRl
c3RpbmF0aW9uLnNpemUoKSk7CiAKLSAgICAgICAgLy8gVGhlIGluaXRpYWwgQ1RNIG1hdGNoZXMg
SW1hZ2VCdWZmZXIncyBpbml0aWFsIENUTS4KLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5z
Zm9ybSA9IGdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2Nh
bGUpOwotICAgICAgICBGbG9hdFNpemUgc2NhbGVGYWN0b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0
cmFuc2Zvcm0ueVNjYWxlKCkpOwotICAgICAgICBhdXRvIHNjYWxlZFNpemUgPSBleHBhbmRlZElu
dFNpemUoZGVzdGluYXRpb24uc2l6ZSgpICogc2NhbGVGYWN0b3IpOwotICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gaW5pdGlhbENUTTsKLSAgICAgICAgaW5pdGlhbENUTS5zY2FsZSgxLCAtMSk7Ci0g
ICAgICAgIGluaXRpYWxDVE0udHJhbnNsYXRlKDAsIC1zY2FsZWRTaXplLmhlaWdodCgpKTsKLSAg
ICAgICAgaW5pdGlhbENUTS5zY2FsZShzY2FsZWRTaXplIC8gZGVzdGluYXRpb24uc2l6ZSgpKTsK
KyAgICAvLyBUaGUgaW5pdGlhbCBDVE0gbWF0Y2hlcyBJbWFnZUJ1ZmZlcidzIGluaXRpYWwgQ1RN
LgorICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBnZXRDVE0oR3JhcGhpY3NDb250ZXh0
OjpEZWZpbml0ZWx5SW5jbHVkZURldmljZVNjYWxlKTsKKyAgICBGbG9hdFNpemUgc2NhbGVGYWN0
b3IodHJhbnNmb3JtLnhTY2FsZSgpLCB0cmFuc2Zvcm0ueVNjYWxlKCkpOworICAgIGF1dG8gc2Nh
bGVkU2l6ZSA9IGV4cGFuZGVkSW50U2l6ZShkZXN0aW5hdGlvbi5zaXplKCkgKiBzY2FsZUZhY3Rv
cik7CisgICAgQWZmaW5lVHJhbnNmb3JtIGluaXRpYWxDVE07CisgICAgaW5pdGlhbENUTS5zY2Fs
ZSgxLCAtMSk7CisgICAgaW5pdGlhbENUTS50cmFuc2xhdGUoMCwgLXNjYWxlZFNpemUuaGVpZ2h0
KCkpOworICAgIGluaXRpYWxDVE0uc2NhbGUoc2NhbGVkU2l6ZSAvIGRlc3RpbmF0aW9uLnNpemUo
KSk7CiAKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmRlcj4obmV3IFJlY29y
ZGVyKCp0aGlzLCBjb250ZXh0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBpbml0aWFsQ2xpcCwg
aW5pdGlhbENUTSkpOwotICAgIH0pOworICAgIFJlY29yZGVyIG5lc3RlZENvbnRleHQoKnRoaXMs
IEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIGluaXRpYWxDbGlwLCBpbml0aWFsQ1RNKTsKICAgICBh
cHBlbmQ8QmVnaW5DbGlwVG9EcmF3aW5nQ29tbWFuZHM+KGRlc3RpbmF0aW9uLCBjb2xvclNwYWNl
KTsKICAgICBkcmF3aW5nRnVuY3Rpb24obmVzdGVkQ29udGV4dCk7CiAgICAgYXBwZW5kPEVuZENs
aXBUb0RyYXdpbmdDb21tYW5kcz4oZGVzdGluYXRpb24pOwotfQogCi0jaWYgRU5BQkxFKFZJREVP
KQotYm9vbCBSZWNvcmRlcjo6Y2FuUGFpbnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVy
JiBwbGF5ZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICEhcGxheWVyLmlkZW50aWZpZXIoKTsKKyAg
ICByZXR1cm4gQ2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0OjpTdWNjZXNzOwogfQogCisjaWYg
RU5BQkxFKFZJREVPKQogdm9pZCBSZWNvcmRlcjo6cGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxh
eWVyJiBwbGF5ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pCiB7CisgICAgaWYgKCFw
bGF5ZXIuaWRlbnRpZmllcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDo6cGFpbnRGcmFt
ZUZvck1lZGlhKHBsYXllciwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQog
ICAgIEFTU0VSVChwbGF5ZXIuaWRlbnRpZmllcigpKTsKICAgICBhcHBlbmQ8UGFpbnRGcmFtZUZv
ck1lZGlhPihwbGF5ZXIsIGRlc3RpbmF0aW9uKTsKIH0KQEAgLTUxNyw3ICs1MjUsNyBAQCBGbG9h
dFJlY3QgUmVjb3JkZXI6OmV4dGVudEZyb21Mb2NhbEJvdW5kcyhjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpIGNvbnN0CiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKICAgICBmbG9hdCBzaGFkb3dS
YWRpdXM7CiAgICAgQ29sb3Igc2hhZG93Q29sb3I7Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dCgp
LmdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3IpKSB7Cisg
ICAgaWYgKGdldFNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29sb3Ip
KSB7CiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dFeHRlbnQgPSBib3VuZHM7CiAgICAgICAgIHNo
YWRvd0V4dGVudC5tb3ZlKHNoYWRvd09mZnNldCk7CiAgICAgICAgIHNoYWRvd0V4dGVudC5pbmZs
YXRlKHNoYWRvd1BhaW50aW5nRXh0ZW50KHNoYWRvd1JhZGl1cykpOwpAQCAtNTQ1LDExICs1NTMs
NiBAQCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIFJlY29yZGVyOjpjdG0oKSBjb25zdAogICAgIHJl
dHVybiBjdXJyZW50U3RhdGUoKS5jdG07CiB9CiAKLWNvbnN0IEZsb2F0UmVjdCYgUmVjb3JkZXI6
OmNsaXBCb3VuZHMoKSBjb25zdAotewotICAgIHJldHVybiBjdXJyZW50U3RhdGUoKS5jbGlwQm91
bmRzOwotfQotCiB2b2lkIFJlY29yZGVyOjpDb250ZXh0U3RhdGU6OnRyYW5zbGF0ZShmbG9hdCB4
LCBmbG9hdCB5KQogewogICAgIGN0bS50cmFuc2xhdGUoeCwgeSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNv
cmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBiODc2ZDZhZGI1MTQ3M2YxZjMwYWFiZGMyYmEyNWFh
M2I2MDI0MTliLi4yOTJjYjk2OGYyNzk3Y2E5OTc2OTc5YjY0ZDMxMzg2ZDAxODFkNjY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RSZWNvcmRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNp
bmNsdWRlICJEaXNwbGF5TGlzdC5oIgogI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd0dseXBoc1Jl
Y29yZGVyLmgiCiAjaW5jbHVkZSAiRGlzcGxheUxpc3RJdGVtcy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIiAvLyBGb3IgSW1hZ2U6OlRpbGVSdWxlLgogI2luY2x1ZGUgIlRleHRGbGFncy5o
IgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAtNTAsMTIgKzUwLDEyIEBAIHN0cnVj
dCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIAogbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKIAotY2xh
c3MgUmVjb3JkZXIgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0SW1wbCB7CitjbGFzcyBSZWNvcmRl
ciA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29yZGVyKTsKIHB1YmxpYzoKICAgICBjbGFz
cyBEZWxlZ2F0ZTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRleHQm
LCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxvYXRS
ZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgRGVsZWdhdGUqID0gbnVs
bHB0ciwgRHJhd0dseXBoc1JlY29yZGVyOjpEcmF3R2x5cGhzRGVjb25zdHJ1Y3Rpb24gPSBEcmF3
R2x5cGhzUmVjb3JkZXI6OkRyYXdHbHlwaHNEZWNvbnN0cnVjdGlvbjo6RGVjb25zdHJ1Y3QpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIFJlY29yZGVyKERpc3BsYXlMaXN0JiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0U3RhdGUmLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlwLCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBEZWxlZ2F0ZSogPSBudWxscHRyLCBEcmF3R2x5cGhzUmVjb3JkZXI6OkRyYXdH
bHlwaHNEZWNvbnN0cnVjdGlvbiA9IERyYXdHbHlwaHNSZWNvcmRlcjo6RHJhd0dseXBoc0RlY29u
c3RydWN0aW9uOjpEZWNvbnN0cnVjdCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+UmVj
b3JkZXIoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0UGl4ZWxCdWZmZXIoY29uc3Qg
UGl4ZWxCdWZmZXJGb3JtYXQmIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCk7CkBAIC03Nyw4NSArNzcsMTAwIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgRHJhd0dseXBoc1JlY29yZGVyOwotICAgIFJlY29yZGVyKFJlY29yZGVyJiBwYXJlbnQs
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBpbml0aWFsQ1RNKTsK
LQotICAgIGJvb2wgaGFzUGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICBib29sIGNhbkRyYXdJbWFnZUJ1ZmZlcihjb25zdCBJbWFnZUJ1ZmZlciYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBwbGF0Zm9ybUNv
bnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0
YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3coKSBvdmVycmlk
ZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0IGRhc2hPZmZzZXQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0TGluZUpvaW4oTGluZUpvaW4pIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TWl0
ZXJMaW1pdChmbG9hdCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IEdyYWRpZW50Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmLCBjb25zdCBD
b2xvciYsIEJsZW5kTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9s
ZVJlY3QsIGNvbnN0IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQ
YXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGlu
ZVdpZHRoKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0cm9rZVBhdGgoY29uc3QgUGF0aCYpIG92ZXJy
aWRlOwotICAgIHZvaWQgc3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKyAgICBSZWNv
cmRlcihSZWNvcmRlciYgcGFyZW50LCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0
IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgaW5pdGlhbENU
TSk7CisKKyAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzPworICAgIGJvb2wgY2Fu
RHJhd0ltYWdlQnVmZmVyKGNvbnN0IEltYWdlQnVmZmVyJikgY29uc3Q7CisgICAgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG51
bGxwdHI7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCBmaW5hbDsK
KworI2lmIFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQorICAgIHZvaWQgc2V0SXNDQUxheWVyQ29u
dGV4dChib29sKSBmaW5hbCB7IH0KKyAgICBib29sIGlzQ0FMYXllckNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
Ym9vbCkgZmluYWwgeyB9CisjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2b2lkIGFwcGx5U3Ry
b2tlUGF0dGVybigpIG92ZXJyaWRlOwotICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybigpIG92ZXJy
aWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiwgY29uc3QgQ29sb3ImKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgdm9p
ZCBkcmF3TGluZUZvclRleHQoY29uc3QgRmxvYXRSZWN0JiwgYm9vbCwgYm9vbCwgU3Ryb2tlU3R5
bGUpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworICAgIHZvaWQgdXBkYXRlU3Rh
dGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Rh
dGVDaGFuZ2VGbGFncykgZmluYWw7CisKKyAgICB2b2lkIHNldExpbmVDYXAoTGluZUNhcCkgZmlu
YWw7CisgICAgdm9pZCBzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmLCBmbG9hdCBkYXNoT2Zm
c2V0KSBmaW5hbDsKKyAgICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBmaW5hbDsKKyAgICB2
b2lkIHNldE1pdGVyTGltaXQoZmxvYXQpIGZpbmFsOworCisgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
LCBHcmFkaWVudCYpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBmaW5hbDsKKyAgICB2
b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29sb3Im
LCBCbGVuZE1vZGUpIGZpbmFsOworICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpIGZpbmFs
OworICAgIHZvaWQgZmlsbEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9p
ZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCkgZmluYWw7Cisg
ICAgdm9pZCBzdHJva2VQYXRoKGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIHN0cm9rZUVs
bGlwc2UoY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgdm9pZCBjbGVhclJlY3QoY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisKKyNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkKKyAgICB2
b2lkIGFwcGx5U3Ryb2tlUGF0dGVybigpIGZpbmFsOworICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVy
bigpIGZpbmFsOwogI2VuZGlmCiAKLSAgICB2b2lkIGRyYXdHbHlwaHMoY29uc3QgRm9udCYsIGNv
bnN0IEdseXBoQnVmZmVyR2x5cGgqLCBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50LCBGb250U21vb3RoaW5n
TW9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBjb25zdCBH
bHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZhbmNlKiwgdW5zaWduZWQgbnVt
R2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCwgRm9udFNtb290aGluZ01vZGUp
IGZpbmFsOwogCiAgICAgdm9pZCBhcHBlbmREcmF3R2x5cGhzSXRlbVdpdGhDYWNoZWRGb250KGNv
bnN0IEZvbnQmLCBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiwgY29uc3QgR2x5cGhCdWZmZXJBZHZh
bmNlKiwgdW5zaWduZWQgY291bnQsIGNvbnN0IEZsb2F0UG9pbnQmIGxvY2FsQW5jaG9yLCBGb250
U21vb3RoaW5nTW9kZSk7CiAKLSAgICB2b2lkIGRyYXdJbWFnZUJ1ZmZlcihXZWJDb3JlOjpJbWFn
ZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0UmVjdCYg
c291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
ZHJhd05hdGl2ZUltYWdlKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJu
KE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgZHJhd1Jl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgYm9yZGVyVGhpY2tuZXNzKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9h
dCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29s
IGRvdWJsZUxpbmVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJr
ZXIoY29uc3QgRmxvYXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkcmF3UGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1Jp
bmcoY29uc3QgUGF0aCYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+
JiwgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgc2F2ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdG9yZSgpIG92ZXJyaWRlOwot
Ci0gICAgdm9pZCB0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUo
Y29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRUcmFu
c3BhcmVuY3lMYXllcigpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xp
cFBhdGgoY29uc3QgUGF0aCYsIFdpbmRSdWxlKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGNsaXBC
b3VuZHMoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKFdlYkNvcmU6Oklt
YWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRGVzdGlu
YXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3SW1hZ2VCdWZmZXIoV2ViQ29yZTo6SW1hZ2VCdWZmZXImLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBGbG9hdFJlY3QmIHNvdXJjZSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBmaW5hbDsKKyAgICB2b2lkIGRyYXdOYXRpdmVJbWFn
ZShOYXRpdmVJbWFnZSYsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisgICAgdm9pZCBkcmF3UGF0dGVybihOYXRpdmVJbWFnZSYsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgZmluYWw7CisKKyAgICB2b2lkIGRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0IGJvcmRlclRoaWNrbmVzcykgZmluYWw7CisgICAgdm9pZCBkcmF3TGluZShjb25zdCBG
bG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGZpbmFsOworICAgIHZvaWQgZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJy
YXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVMaW5lcywgU3Ryb2tlU3R5bGUp
IGZpbmFsOworICAgIHZvaWQgZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmLCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSkgZmluYWw7CisgICAgdm9pZCBkcmF3RWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKworICAgIHZvaWQgZHJhd1BhdGgoY29uc3QgUGF0
aCYpIGZpbmFsOworCisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBmbG9hdCB3
aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYpIGZpbmFsOworICAgIHZvaWQgZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYsIGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZz
ZXQsIGNvbnN0IENvbG9yJikgZmluYWw7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAgdm9pZCBk
cmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmLCBkb3VibGUgdGltZU9mZnNldCwgYm9vbCYgbmVlZHNS
ZWRyYXcsIGNvbnN0IENvbG9yJikgZmluYWw7CisgICAgdm9pZCBkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxGbG9hdFJlY3Q+JiwgZG91YmxlIHRpbWVPZmZzZXQsIGJvb2wmIG5lZWRzUmVkcmF3
LCBjb25zdCBDb2xvciYpIGZpbmFsOworI2VuZGlmCisKKyAgICB2b2lkIHNhdmUoKSBmaW5hbDsK
KyAgICB2b2lkIHJlc3RvcmUoKSBmaW5hbDsKKworICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpIGZpbmFsOworICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKSBm
aW5hbDsKKyAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYpIGZpbmFsOworICAgIHZvaWQg
Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIHZvaWQgc2V0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpIGZpbmFsOworICAgIEFmZmluZVRyYW5zZm9ybSBnZXRD
VE0oR3JhcGhpY3NDb250ZXh0OjpJbmNsdWRlRGV2aWNlU2NhbGUpIGNvbnN0IGZpbmFsOworCisg
ICAgdm9pZCBiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpIGZpbmFsOworICAg
IHZvaWQgZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKSBmaW5hbDsKKworICAgIHZvaWQgY2xpcChjb25z
dCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikg
ZmluYWw7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBmaW5hbDsKKyAgICB2b2lkIGNs
aXBQYXRoKGNvbnN0IFBhdGgmLCBXaW5kUnVsZSkgZmluYWw7CisgICAgSW50UmVjdCBjbGlwQm91
bmRzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Q2xpcFRvRHJhd2luZ0NvbW1hbmRzUmVzdWx0IGNsaXBUb0RyYXdpbmdDb21t
YW5kcyhjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uLCBjb25zdCBEZXN0aW5hdGlvbkNvbG9y
U3BhY2UmLCBGdW5jdGlvbjx2b2lkKEdyYXBoaWNzQ29udGV4dCYpPiYmKSBmaW5hbDsKKwogI2lm
IEVOQUJMRShWSURFTykKLSAgICB2b2lkIHBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24pIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUGFp
bnRGcmFtZUZvck1lZGlhKGNvbnN0IE1lZGlhUGxheWVyJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwYWludEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uKSBmaW5hbDsKICNlbmRpZgogCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFj
dG9yKGZsb2F0KSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpIGZpbmFsOwogCi0gICAgRmxvYXRSZWN0IHJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxv
YXRSZWN0JiwgR3JhcGhpY3NDb250ZXh0OjpSb3VuZGluZ01vZGUpIG92ZXJyaWRlOworICAgIEZs
b2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYsIEdyYXBoaWNzQ29u
dGV4dDo6Um91bmRpbmdNb2RlKSBmaW5hbDsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIGNs
YXNzLi4uIEFyZ3M+CiAgICAgdm9pZCBhcHBlbmQoQXJncyYmLi4uIGFyZ3MpCkBAIC0xNzMsNyAr
MTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAg
IGF1dG8gaXRlbSA9IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAgICAgICAg
IGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKGdyYXBoaWNzQ29udGV4dCgpKSkKKyAg
ICAgICAgICAgIGlmIChhdXRvIHJlY3QgPSBpdGVtLmxvY2FsQm91bmRzKCp0aGlzKSkKICAgICAg
ICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdpbmdJdGVtRXh0ZW50KGV4dGVudEZyb21M
b2NhbEJvdW5kcygqcmVjdCkpOwogICAgICAgICAgICAgZWxzZSBpZiAoYXV0byByZWN0ID0gaXRl
bS5nbG9iYWxCb3VuZHMoKSkKICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlMaXN0LmFkZERyYXdp
bmdJdGVtRXh0ZW50KCpyZWN0KTsKQEAgLTE5NSw3ICsyMTAsNiBAQCBwcml2YXRlOgogICAgIEZs
b2F0UmVjdCBleHRlbnRGcm9tTG9jYWxCb3VuZHMoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAg
ICAgCiAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBjdG0oKSBjb25zdDsKLSAgICBjb25zdCBG
bG9hdFJlY3QmIGNsaXBCb3VuZHMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBDb250ZXh0U3RhdGUg
ewogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCmluZGV4IDY1YmNhNjcwZjkyODZkMjVhMTk1
MTkyMWI4NWYwYTA1YTAxNTJkNTEuLjg5ZDg4MmM1N2Y0NzYxZTU0NmRkNDI0NzAxZjMzZDJmYjIw
MzFmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9D
b2xvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29s
b3JNYWMubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIFVTRShBUFBLSVQpCiAKKyNpbXBvcnQg
IkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQuaCIKICNpbXBvcnQgPHd0Zi9CbG9ja09iakNFeGNlcHRpb25zLmg+CiAjaW1wb3J0IDx3dGYv
TG9jay5oPgpAQCAtODUsNyArODYsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U1JHQkE8dWludDhfdD4+
IG1ha2VTaW1wbGVDb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogICAgICAgICBSZXRh
aW5QdHI8TlNCaXRtYXBJbWFnZVJlcD4gb2Zmc2NyZWVuUmVwID0gYWRvcHROUyhbW05TQml0bWFw
SW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwgcGl4ZWxzV2lkZTox
IHBpeGVsc0hpZ2g6MQogICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4IHNhbXBsZXNQZXJQaXhl
bDo0IGhhc0FscGhhOllFUyBpc1BsYW5hcjpOTyBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNv
bG9yU3BhY2UgYnl0ZXNQZXJSb3c6NCBiaXRzUGVyUGl4ZWw6MzJdKTsKIAotICAgICAgICBHcmFw
aGljc0NvbnRleHQgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dDb250ZXh0KTsKKyAg
ICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgYml0bWFwQ29udGV4dChbTlNHcmFwaGljc0NvbnRleHQg
Z3JhcGhpY3NDb250ZXh0V2l0aEJpdG1hcEltYWdlUmVwOm9mZnNjcmVlblJlcC5nZXQoKV0uQ0dD
b250ZXh0KTsKICAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChiaXRtYXBDb250ZXh0KTsKIAogICAgICAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01h
a2VSZWN0KDAsIDAsIDEsIDEpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJMYXllci5tbQppbmRleCBjZTdhYmQ3YjRlOTVlZWIzODk2YWU1ZDliM2NhNGQx
Y2UwZmViOWVmLi41NTQ4MGI1MmI5MWUwMjg2MmZmMGJmYzEzMDZkYTgwZDYwM2M1NDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBA
IC0yNiw3ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIldlYkxheWVyLmgi
CiAKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKICNpbXBvcnQgIkdyYXBoaWNzTGF5ZXJDQS5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxh
eWVyLmgiCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KQEAgLTUxLDcgKzUxLDcg
QEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewogICAgIGF1
dG8gbGF5ZXIgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllckZvckxh
eWVyKChfX2JyaWRnZSB2b2lkKilzZWxmKTsKICAgICBpZiAobGF5ZXIpIHsKLSAgICAgICAgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAgICAg
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Q0cgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OlJlcGFpbnRSZWN0TGlzdCByZWN0c1RvUGFp
bnQgPSBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNvbGxlY3RSZWN0c1RvUGFpbnQoZ3JhcGhp
Y3NDb250ZXh0LCBsYXllci5nZXQoKSk7CiAgICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXll
cjo6ZHJhd0xheWVyQ29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBsYXllci5nZXQoKSwgcmVjdHNU
b1BhaW50LCBzZWxmLmlzUmVuZGVyaW5nSW5Db250ZXh0ID8gV2ViQ29yZTo6R3JhcGhpY3NMYXll
clBhaW50U25hcHNob3R0aW5nIDogV2ViQ29yZTo6R3JhcGhpY3NMYXllclBhaW50Tm9ybWFsKTsK
ICAgICB9CkBAIC0xMjgsNyArMTI4LDcgQEAgLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRl
eHRSZWYpY29udGV4dAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBsYXll
ciA9IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyRm9yTGF5ZXIoKF9f
YnJpZGdlIHZvaWQqKXNlbGYpOwogICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgewot
ICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQp
OworICAgICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUp
OwogICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXIt
PmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05p
Y29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAppbmRleCBmMzI3NjQzNjg1MWNjN2UwMWQ0
NzBjNTcwZDlkOWYwNmMyM2Q1ZmM1Li41Nzc0ZDBkZTBlOTQwOTJkODRiNzMyZTk4NDM5MDYzNjNl
MDU2MjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNv
c2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJhdGlvblJlY29yZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09wZXJh
dGlvblJlY29yZGVyLmNwcApAQCAtNzIsOSArNzIsOCBAQCBhdXRvIGNyZWF0ZUNvbW1hbmQoKSAt
PiBzdGQ6OmVuYWJsZV9pZl90PHN0ZDo6aXNfYmFzZV9vZjxPcGVyYXRpb25EYXRhPD4sIFQ+Ojp2
YQogICAgIHJldHVybiBtYWtlVW5pcXVlPFQ+KCk7CiB9CiAKLUNhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBQYWlu
dGluZ09wZXJhdGlvbnMmIGNvbW1hbmRMaXN0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChj
b250ZXh0KQotICAgICwgbV9jb21tYW5kTGlzdChjb21tYW5kTGlzdCkKK0NhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OkNhaXJvT3BlcmF0aW9uUmVjb3JkZXIoUGFpbnRpbmdPcGVyYXRpb25zJiBjb21t
YW5kTGlzdCkKKyAgICA6IG1fY29tbWFuZExpc3QoY29tbWFuZExpc3QpCiB7CiAgICAgbV9zdGF0
ZVN0YWNrLmFwcGVuZCh7IHsgfSwgeyB9LCBGbG9hdFJlY3Q6OmluZmluaXRlUmVjdCgpIH0pOwog
fQpAQCAtMTU0LDEwICsxNTMsNiBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnVwZGF0
ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgR3JhcAogICAgIH0KIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGVhclNoYWRvdygpCi17Ci19Ci0KIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c2V0TGluZUNhcChMaW5lQ2FwIGxpbmVDYXApCiB7
CiAgICAgc3RydWN0IFNldExpbmVDYXAgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0
aW9uRGF0YTxMaW5lQ2FwPiB7CkBAIC0yNTAsNyArMjQ1LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxG
aWxsUmVjdD4ocmVjdCwgQ2Fpcm86OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3Rh
dGUoc3RhdGUpKSk7CiB9CiAKQEAgLTI3MCw3ICsyNjUsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9u
UmVjb3JkZXI6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgICAgICB9CiAgICAgfTsKIAotICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxS
ZWN0PihyZWN0LCBjb2xvciwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0
YXRlKCkpKSk7CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGNvbG9y
LCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUoKSkpKTsKIH0KIAogdm9pZCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFk
aWVudCkKQEAgLTI5Miw3ICsyODcsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgR3JhZGllbnQmIGdyYWRpZW50KQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8RmlsbFJlY3Q+KHJlY3QsIGdyYWRpZW50LmNyZWF0ZVBhdHRlcm4oMS4wLCBzdGF0ZS5m
aWxsR3JhZGllbnRTcGFjZVRyYW5zZm9ybSkpKTsKIH0KIApAQCAtMzE2LDcgKzMxMSw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUmVjdD4ocmVjdCwgY29sb3Is
IGNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSks
IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yKSk7CiB9CiAKQEAgLTM0Niw3ICszNDEsNyBAQCB2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiByb3VuZGVkUmVjdAogICAgICAgICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRl
ID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0
YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJvdW5kZWRSZWN0Pihyb3VuZGVk
UmVjdCwgY29sb3IsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBibGVuZE1vZGUsIENhaXJvOjpT
aGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtMzY3LDcgKzM2Miw3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zCiAgICAgfTsKIAogICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0gICAgYXBw
ZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3QsIHJvdW5kZWRI
b2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCkpKSk7
CisgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RmlsbFJlY3RXaXRoUm91bmRlZEhvbGU+KHJlY3Qs
IHJvdW5kZWRIb2xlUmVjdCwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKCkpKSk7CiB9CiAKIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKQEAg
LTM4Niw3ICszODEsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxQYXRoKGNv
bnN0IFBhdGgmIHBhdGgpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBn
cmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUo
KTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxGaWxsUGF0aD4ocGF0aCwgQ2Fpcm86OkZpbGxT
b3VyY2Uoc3RhdGUpLCBDYWlybzo6U2hhZG93U3RhdGUoc3RhdGUpKSk7CiB9CiAKQEAgLTQwOCw3
ICs0MDMsNyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmZpbGxFbGxpcHNlKGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9
IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0
ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPEZpbGxFbGxpcHNlPihyZWN0LCBDYWlybzo6
RmlsbFNvdXJjZShzdGF0ZSksIENhaXJvOjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAt
NDI4LDcgKzQyMyw3IEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICAgICAgfQogICAgIH07
CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7CisgICAgYXV0
byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21tYW5kPFN0cm9r
ZVJlY3Q+KHJlY3QsIGxpbmVXaWR0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDQ4LDcgKzQ0Myw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAg
ICB9CiAgICAgfTsKIAotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUo
KTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNv
bW1hbmQ8U3Ryb2tlUGF0aD4ocGF0aCwgQ2Fpcm86OlN0cm9rZVNvdXJjZShzdGF0ZSksIENhaXJv
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpKTsKIH0KIApAQCAtNDcwLDcgKzQ2NSw3IEBAIHZvaWQgQ2Fp
cm9PcGVyYXRpb25SZWNvcmRlcjo6c3Ryb2tlRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQo
KS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQo
Y3JlYXRlQ29tbWFuZDxTdHJva2VFbGxpcHNlPihyZWN0LCBDYWlybzo6U3Ryb2tlU291cmNlKHN0
YXRlKSwgQ2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSkpOwogfQogCkBAIC01MjMsNyArNTE4LDcg
QEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8m
IHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKKyAgICBhdXRvJiBzdGF0ZSA9IHRo
aXMtPnN0YXRlKCk7CiAgICAgYXBwZW5kKGNyZWF0ZUNvbW1hbmQ8RHJhd0dseXBocz4oQ2Fpcm86
OkZpbGxTb3VyY2Uoc3RhdGUpLCBDYWlybzo6U3Ryb2tlU291cmNlKHN0YXRlKSwKICAgICAgICAg
Q2Fpcm86OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsCiAgICAgICAgIFJlZlB0cjxjYWlyb19z
Y2FsZWRfZm9udF90Pihmb250LnBsYXRmb3JtRGF0YSgpLnNjYWxlZEZvbnQoKSksCkBAIC01NTMs
NyArNTQ4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TmF0aXZlSW1hZ2Uo
TmF0aXZlSW1hZ2UmIG5hdGl2ZUltYWdlLCBjb25zdCBGbG8KICAgICB9OwogCiAgICAgVU5VU0VE
X1BBUkFNKGltYWdlU2l6ZSk7Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3Jl
YXRlQ29tbWFuZDxEcmF3TmF0aXZlSW1hZ2U+KG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKSwg
ZGVzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRpb25zKG9wdGlvbnMsIHN0YXRlLmlt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpLCBzdGF0ZS5hbHBoYSwgQ2Fpcm86OlNoYWRvd1N0YXRl
KHN0YXRlKSkpOwogfQogCkBAIC01OTMsNyArNTg4LDcgQEAgdm9pZCBDYWlyb09wZXJhdGlvblJl
Y29yZGVyOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNr
bmUKICAgICAgICAgfQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVu
ZChjcmVhdGVDb21tYW5kPERyYXdSZWN0PihyZWN0LCBib3JkZXJUaGlja25lc3MsIHN0YXRlLmZp
bGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yKSk7CiB9CiAKQEAg
LTYxMywxMSArNjA4LDExIEBAIHZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmUo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50CiAgICAgICAgIH0KICAg
ICB9OwogCi0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAg
IGF1dG8mIHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxE
cmF3TGluZT4ocG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VD
b2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpKTsKIH0K
IAotdm9pZCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpkcmF3TGluZXNGb3JUZXh0KGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJheSYgd2lkdGhz
LCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMpCit2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdMaW5lc0ZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGZs
b2F0IHRoaWNrbmVzcywgY29uc3QgRGFzaEFycmF5JiB3aWR0aHMsIGJvb2wgcHJpbnRpbmcsIGJv
b2wgZG91YmxlVW5kZXJsaW5lcywgU3Ryb2tlU3R5bGUpCiB7CiAgICAgc3RydWN0IERyYXdMaW5l
c0ZvclRleHQgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9uRGF0YTxGbG9hdFBv
aW50LCBmbG9hdCwgRGFzaEFycmF5LCBib29sLCBib29sLCBDb2xvcj4gewogICAgICAgICB2aXJ0
dWFsIH5EcmF3TGluZXNGb3JUZXh0KCkgPSBkZWZhdWx0OwpAQCAtNjMzLDcgKzYyOCw3IEBAIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCwgZmxvYXQgdGhpCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgYXV0byYgc3Rh
dGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIGF1dG8mIHN0YXRlID0gdGhpcy0+
c3RhdGUoKTsKICAgICBhcHBlbmQoY3JlYXRlQ29tbWFuZDxEcmF3TGluZXNGb3JUZXh0Pihwb2lu
dCwgdGhpY2tuZXNzLCB3aWR0aHMsIHByaW50aW5nLCBkb3VibGVVbmRlcmxpbmVzLCBzdGF0ZS5z
dHJva2VDb2xvcikpOwogfQogCkBAIC02NzIsMTQgKzY2NywxMCBAQCB2b2lkIENhaXJvT3BlcmF0
aW9uUmVjb3JkZXI6OmRyYXdFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAg
fQogICAgIH07CiAKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7
CisgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIGFwcGVuZChjcmVhdGVDb21t
YW5kPERyYXdFbGxpcHNlPihyZWN0LCBzdGF0ZS5maWxsQ29sb3IsIHN0YXRlLnN0cm9rZVN0eWxl
LCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKSk7CiB9CiAKLXZvaWQg
Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KIHZv
aWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRo
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAg
c3RydWN0IERyYXdGb2N1c1JpbmcgZmluYWwgOiBQYWludGluZ09wZXJhdGlvbiwgT3BlcmF0aW9u
RGF0YTxQYXRoLCBmbG9hdCwgQ29sb3I+IHsKQEAgLTkwMyw3ICs4OTQsNyBAQCB2b2lkIENhaXJv
T3BlcmF0aW9uUmVjb3JkZXI6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKICAgICBzdGF0ZS5jdG1JbnZlcnNlID0gaW52ZXJzZS52YWx1ZSgpOwogfQogCi1BZmZpbmVU
cmFuc2Zvcm0gQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6
SW5jbHVkZURldmljZVNjYWxlKQorQWZmaW5lVHJhbnNmb3JtIENhaXJvT3BlcmF0aW9uUmVjb3Jk
ZXI6OmdldENUTShHcmFwaGljc0NvbnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKS5jdG07CiB9CkBAIC0xMDMyLDcgKzEwMjMs
NyBAQCB2b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBh
dGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIH0KIH0KIAotSW50UmVjdCBDYWlyb09wZXJhdGlv
blJlY29yZGVyOjpjbGlwQm91bmRzKCkKK0ludFJlY3QgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6
Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgYXV0byYgc3RhdGUgPSBtX3N0YXRlU3RhY2subGFz
dCgpOwogICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHN0YXRlLmN0bUludmVyc2UubWFwUmVj
dChzdGF0ZS5jbGlwQm91bmRzKSk7CkBAIC0xMDc2LDE1ICsxMDY3LDE3IEBAIHZvaWQgQ2Fpcm9P
cGVyYXRpb25SZWNvcmRlcjo6YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxQYWludGluZ09wZXJhdGlv
bj4mJiBjb21tYW5kCiAgICAgbV9jb21tYW5kTGlzdC5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7
CiB9CiAKLXZvaWQgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcjo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRz
KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9u
PHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCitHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdp
bmdDb21tYW5kc1Jlc3VsdCBDYWlyb09wZXJhdGlvblJlY29yZGVyOjpjbGlwVG9EcmF3aW5nQ29t
bWFuZHMoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVu
Y3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikKIHsKICAgICAvLyBGSVhNRTogTm90IGlt
cGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1Y2Nl
c3M7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi12b2lkIENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6
OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lk
IENhaXJvT3BlcmF0aW9uUmVjb3JkZXI6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYg
cGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RpbmF0aW9uKQogewogICAgIC8vIEZJWE1FOiBO
b3QgaW1wbGVtZW50ZWQuCisgICAgR3JhcGhpY3NDb250ZXh0OjpwYWludEZyYW1lRm9yTWVkaWEo
cGxheWVyLCBkZXN0aW5hdGlvbik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRp
b25SZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9j
YWlyby9OaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oCmluZGV4IDMwOGYxZmY2MzY1NmFk
YTQwOWYwZDVmNTAzNmJjOTFlMjVkN2I2ZDIuLjc3YWU1MGRmMDQ5MmQzYWJmODhmZGY3YzVjMzM5
OTcyNzdiYmM1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvY2Fpcm8vTmljb3NpYUNhaXJvT3BlcmF0aW9uUmVjb3JkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFDYWlyb09w
ZXJhdGlvblJlY29yZGVyLmgKQEAgLTI4LDIxICsyOCwyMCBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKICNpbmNsdWRlICJOaWNvc2lhUGFpbnRpbmdPcGVyYXRpb24uaCIKIAogbmFtZXNwYWNl
IE5pY29zaWEgewogCi1jbGFzcyBDYWlyb09wZXJhdGlvblJlY29yZGVyIGZpbmFsIDogcHVibGlj
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGwgeworY2xhc3MgQ2Fpcm9PcGVyYXRpb25SZWNv
cmRlciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgewogcHVibGljOgot
ICAgIENhaXJvT3BlcmF0aW9uUmVjb3JkZXIoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgUGFp
bnRpbmdPcGVyYXRpb25zJik7CisgICAgQ2Fpcm9PcGVyYXRpb25SZWNvcmRlcihQYWludGluZ09w
ZXJhdGlvbnMmKTsKIAogcHJpdmF0ZToKICAgICBib29sIGhhc1BsYXRmb3JtQ29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQqIHBsYXRmb3JtQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0K
IAogICAgIHZvaWQgdXBkYXRlU3RhdGUoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3Rh
dGUmLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncykgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBjbGVhclNoYWRvdygpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRM
aW5lQ2FwKFdlYkNvcmU6OkxpbmVDYXApIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0TGluZURhc2go
Y29uc3QgV2ViQ29yZTo6RGFzaEFycmF5JiwgZmxvYXQpIG92ZXJyaWRlOwpAQCAtNTMsNiArNTIs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIFdlYkNvcmU6OkdyYWRpZW50Jikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBmaWxsUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLCBjb25zdCBXZWJDb3Jl
OjpDb2xvciYsIFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUp
IG92ZXJyaWRlOworICAgIHZvaWQgZmlsbFJvdW5kZWRSZWN0SW1wbChjb25zdCBXZWJDb3JlOjpG
bG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiwgV2ViQ29yZTo6Qmxl
bmRNb2RlKSBvdmVycmlkZTsKICAgICB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0Um91bmRlZFJlY3QmLCBj
b25zdCBXZWJDb3JlOjpDb2xvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgZmlsbFBhdGgoY29uc3Qg
V2ViQ29yZTo6UGF0aCYpIG92ZXJyaWRlOwpAQCAtNzAsMTAgKzcwLDkgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJy
aWRlOwogICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UG9pbnQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdMaW5lc0ZvclRl
eHQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYsIGZsb2F0IHRoaWNrbmVzcywgY29uc3QgV2Vi
Q29yZTo6RGFzaEFycmF5JiwgYm9vbCwgYm9vbCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3TGlu
ZXNGb3JUZXh0KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmLCBmbG9hdCB0aGlja25lc3MsIGNv
bnN0IFdlYkNvcmU6OkRhc2hBcnJheSYsIGJvb2wsIGJvb2wsIFdlYkNvcmU6OlN0cm9rZVN0eWxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJy
aWRlOwogICAgIHZvaWQgZHJhd0VsbGlwc2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChjb25zdCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgV2ViQ29yZTo6UGF0aCYsIGZsb2F0LCBm
bG9hdCwgY29uc3QgV2ViQ29yZTo6Q29sb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIGRyYXdGb2N1
c1JpbmcoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNv
bnN0IFdlYkNvcmU6OkNvbG9yJikgb3ZlcnJpZGU7CkBAIC04Niw3ICs4NSw3IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBzY2FsZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmKSBvdmVycmlkZTsKICAg
ICB2b2lkIGNvbmNhdENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNldENUTShjb25zdCBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0mKSBvdmVy
cmlkZTsKLSAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6SW5jbHVkZURldmljZVNjYWxlKSBvdmVycmlkZTsKKyAgICBXZWJDb3JlOjpB
ZmZpbmVUcmFuc2Zvcm0gZ2V0Q1RNKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpIG92
ZXJyaWRlOwpAQCAtOTUsMTIgKzk0LDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGlwT3V0KGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcE91dChjb25z
dCBXZWJDb3JlOjpQYXRoJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBjbGlwUGF0aChjb25zdCBXZWJD
b3JlOjpQYXRoJiwgV2ViQ29yZTo6V2luZFJ1bGUpIG92ZXJyaWRlOwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgY2xpcEJvdW5kcygpIG92ZXJyaWRlOworICAgIFdlYkNvcmU6OkludFJlY3QgY2xpcEJv
dW5kcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXImLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGRl
c3RpbmF0aW9uLCBjb25zdCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UmLCBGdW5jdGlv
bjx2b2lkKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpPiYmKSBvdmVycmlkZTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBjbGlwVG9E
cmF3aW5nQ29tbWFuZHMoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29u
c3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xvclNwYWNlJiwgRnVuY3Rpb248dm9pZChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKFZJREVPKQogICAg
IHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKFdlYkNvcmU6Ok1lZGlhUGxheWVyJiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWlu
dEZyYW1lRm9yTWVkaWEoY29uc3QgV2ViQ29yZTo6TWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICAgICB2b2lkIGFwcGx5RGV2aWNlU2NhbGVG
YWN0b3IoZmxvYXQpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lhUGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS9jYWlyby9OaWNvc2lh
UGFpbnRpbmdDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDAwMTEwMGY3Nzc4MWU0Y2Y1YjhjMWQ4N2Ey
YzZjMzdjY2U4YWFmNTQuLjQ5YWJjYWE0NTI1MzE0NTM4NGIzNTU4ODQ2ODY3ZTBjZmJkMDZhZDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvY2Fp
cm8vTmljb3NpYVBhaW50aW5nQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL2NhaXJvL05pY29zaWFQYWludGluZ0NvbnRleHRDYWly
by5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpZiBVU0UoQ0FJUk8pCiAKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIk5pY29zaWFCdWZmZXIu
aCIKICNpbmNsdWRlICJOaWNvc2lhQ2Fpcm9PcGVyYXRpb25SZWNvcmRlci5oIgogI2luY2x1ZGUg
Ik5pY29zaWFQYWludGluZ09wZXJhdGlvblJlcGxheUNhaXJvLmgiCkBAIC03MSw3ICs3MSw3IEBA
IFBhaW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6Rm9yUGFpbnRpbmcoQnVmZmVyJiBi
dWZmZXIpCiAKICAgICBtX2NhaXJvLmNvbnRleHQgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9j
YWlyby5zdXJmYWNlLmdldCgpKSk7CiAgICAgbV9wbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVl
PFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dENhaXJvPihtX2NhaXJvLmNvbnRleHQuZ2V0KCkpOwot
ICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeSgqbV9w
bGF0Zm9ybUNvbnRleHQpKTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VVbmlxdWU8V2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0Q2Fpcm8+KCptX3BsYXRmb3JtQ29udGV4dCk7CiB9CiAKIFBh
aW50aW5nQ29udGV4dENhaXJvOjpGb3JQYWludGluZzo6fkZvclBhaW50aW5nKCkKQEAgLTEwNCwx
MSArMTA0LDcgQEAgdm9pZCBQYWludGluZ0NvbnRleHRDYWlybzo6Rm9yUGFpbnRpbmc6OnJlcGxh
eShjb25zdCBQYWludGluZ09wZXJhdGlvbnMmIHBhaW50aW4KIAogUGFpbnRpbmdDb250ZXh0Q2Fp
cm86OkZvclJlY29yZGluZzo6Rm9yUmVjb3JkaW5nKFBhaW50aW5nT3BlcmF0aW9ucyYgcGFpbnRp
bmdPcGVyYXRpb25zKQogewotICAgIG1fZ3JhcGhpY3NDb250ZXh0ID0gbWFrZVVuaXF1ZTxXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ+KAotICAgICAgICBbJnBhaW50aW5nT3BlcmF0aW9uc10oV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxDYWlyb09wZXJhdGlvblJlY29yZGVyPihjb250ZXh0LCBwYWludGlu
Z09wZXJhdGlvbnMpOwotICAgICAgICB9KTsKKyAgICBtX2dyYXBoaWNzQ29udGV4dCA9IG1ha2VV
bmlxdWU8Q2Fpcm9PcGVyYXRpb25SZWNvcmRlcj4ocGFpbnRpbmdPcGVyYXRpb25zKTsKIH0KIAog
UGFpbnRpbmdDb250ZXh0Q2Fpcm86OkZvclJlY29yZGluZzo6fkZvclJlY29yZGluZygpID0gZGVm
YXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vR3JhcGhpY3NDb250ZXh0Q0dXaW4uY3BwCmluZGV4IDgzMGFlZDA4MjJmNTc1ZDUyYzhi
ZGJkMWNlMjgyYjhlYmE3ZDUwYmIuLmQ5NzlmM2RmMDRiOWRlYzU5NGZlNTkzZWMxNjE3ODJhM2Jh
ODA1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFwaGljc0NvbnRleHRDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENHV2luLmNwcApAQCAtMjksNyArMjksNyBAQAogI2lm
IFVTRShDRykKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGwuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oIgogI2luY2x1ZGUgIlBhdGguaCIK
IApAQCAtNjcsMzIgKzY3LDE5IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBDR0Nv
bnRleHRXaXRoSERDKEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgcmV0dXJuIGNvbnRleHQ7
CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFz
QWxwaGEpCitHcmFwaGljc0NvbnRleHRDRzo6R3JhcGhpY3NDb250ZXh0Q0coSERDIGhkYywgYm9v
bCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4dENHKENHQ29udGV4dFdpdGhIREMoaGRj
LCBoYXNBbHBoYSkuZ2V0KCkpCiB7Ci0gICAgcGxhdGZvcm1Jbml0KGhkYywgaGFzQWxwaGEpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFz
QWxwaGEpCi17Ci0gICAgaWYgKCFoZGMpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YSA9
IG5ldyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQ0dDb250ZXh0V2l0aEhEQyhoZGMs
IGhhc0FscGhhKSk7CiAgICAgbV9kYXRhLT5tX2hkYyA9IGhkYzsKLSAgICBpZiAobV9kYXRhLT5t
X2NnQ29udGV4dCkgewotICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNvbnRleHQgc3RhcnRzIGlu
IHN5bmMgd2l0aCBvdXIgc3RhdGUuCi0gICAgICAgIHNldFBsYXRmb3JtRmlsbENvbG9yKGZpbGxD
b2xvcigpKTsKLSAgICAgICAgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihzdHJva2VDb2xvcigpKTsK
LSAgICB9CiB9CiAKIC8vIEZJWE1FOiBJcyBpdCBwb3NzaWJsZSB0byBtZXJnZSBnZXRXaW5kb3dz
Q29udGV4dCBhbmQgY3JlYXRlV2luZG93c0JpdG1hcCBpbnRvIGEgc2luZ2xlIEFQSQogLy8gc3Vp
dGFibGUgZm9yIGFsbCBjbGllbnRzPwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5k
b3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib29sIHN1cHBvcnRB
bHBoYUJsZW5kKQogewotICAgIGJvb2wgY3JlYXRlZEJpdG1hcCA9IG1faW1wbCB8fCAhbV9kYXRh
LT5tX2hkYyB8fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICBib29sIGNyZWF0ZWRCaXRt
YXAgPSAhZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjIHx8IGlzSW5UcmFuc3BhcmVu
Y3lMYXllcigpOwogICAgIGlmICghY3JlYXRlZEJpdG1hcCkgewotICAgICAgICBtX2RhdGEtPnJl
c3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPnJlc3RvcmUoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTEwLDcgKzk3LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChIREMgaGRjLCBjb25zdCBJbnRSZWN0JiBk
c3RSZWN0LCBib28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3VwcG9ydEFscGhhQmxlbmQgPyBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IDoga0NHSW1hZ2VBbHBoYU5vbmVTa2lwRmlyc3QpKSk7CiAKICAgICBhdXRvIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShiaXRtYXBDb250ZXh0LmdldCgp
KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0NvbnRleHQuZ2V0KCksIGRz
dFJlY3QsIGltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoZGVwcmVjYXRlZFBy
aXZhdGVDb250ZXh0KCktPm1fY2dDb250ZXh0LmdldCgpLCBkc3RSZWN0LCBpbWFnZS5nZXQoKSk7
CiAgICAgCiAgICAgLy8gRGVsZXRlIGFsbCBvdXIganVuay4KICAgICA6OkRlbGV0ZURDKGhkYyk7
CkBAIC0xMjQsMjEgKzExMSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1dpbmRvd3NC
aXRtYXAoV2luZG93c0JpdG1hcCogaW1hZ2UsIGNvbnN0IEludFBvaW50JiBwbwogICAgIFJldGFp
blB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhDRkRhdGEoaW1hZ2VEYXRhLmdldCgpKSk7CiAgICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGNnSW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoaW1hZ2UtPnNpemUoKS53
aWR0aCgpLCBpbWFnZS0+c2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgaW1hZ2UtPmJ5dGVzUGVyUm93
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtD
R0ltYWdlQWxwaGFGaXJzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKG1fZGF0YS0+bV9jZ0Nv
bnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXpl
KCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAor
ICAgIENHQ29udGV4dERyYXdJbWFnZShkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9jZ0Nv
bnRleHQuZ2V0KCksIENHUmVjdE1ha2UocG9pbnQueCgpLCBwb2ludC55KCksIGltYWdlLT5zaXpl
KCkud2lkdGgoKSwgaW1hZ2UtPnNpemUoKS5oZWlnaHQoKSksIGNnSW1hZ2UuZ2V0KCkpOyAgIAog
fQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRo
LCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdy
YXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdp
ZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICAvLyBGSVhNRTog
aW1wbGVtZW50CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhl
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyBmdW5jdGlvbiBpbiBHcmFwaGljc0NvbnRl
eHRNYWMubW0uCiAvLyBUaGUgY29kZSBjb3VsZCBtb3ZlIHRvIEdyYXBoaWNzQ29udGV4dENHLmNw
cCBhbmQgYmUgc2hhcmVkLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwgZmxvYXQgb2Zmc2V0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dENHOjpkcmF3Rm9jdXNSaW5n
KGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIGZsb2F0IHJhZGl1cyA9ICh3aWR0aCAtIDEpIC8gMi4wZjsK
ICAgICBvZmZzZXQgKz0gcmFkaXVzOwogICAgIENHQ29sb3JSZWYgY29sb3JSZWYgPSBjb2xvci5p
c1ZhbGlkKCkgPyBjYWNoZWRDR0NvbG9yKGNvbG9yKSA6IG51bGxwdHI7CkBAIC0xNjQsMTEgKzE0
OCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdEb3RzRm9yRG9jdW1l
bnRNYXJrZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBz
dHlsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Q0c6OmRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBEb2N1bWVudE1hcmtlckxpbmVTdHlsZSBzdHlsZSkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAo
c3R5bGUubW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6U3BlbGxpbmcgJiYg
c3R5bGUubW9kZSAhPSBEb2N1bWVudE1hcmtlckxpbmVTdHlsZTo6TW9kZTo6R3JhbW1hcikKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yNDQsNSArMjI1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgpCiAgICAgQ0dDb250ZXh0Rmx1c2gobV9jZ0NvbnRleHQu
Z2V0KCkpOwogfQogCitHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIEdyYXBoaWNzQ29u
dGV4dENHOjpkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGE7Cit9CisKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRDYWlyb1dpbi5jcHAKaW5k
ZXggZjE0NDI1NzJjYzZkMWQ1NGJiZWU1OGJkYmMzNmVkZjc3NGFhYmI2NC4uZjNjOGYxZGQxMTQ1
YjIxZWM1NjFkYWY5MGExM2UzNmNmMzdkNGI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dENhaXJvV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0Q2Fpcm9X
aW4uY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
ICNpbmNsdWRlICJESUJQaXhlbERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaCIKICNpbmNsdWRlICJQYXRoLmgi
CiAKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgpAQCAtNjYsMjggKzY2LDkgQEAgc3RhdGljIGNh
aXJvX3QqIGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoSERDIGhkYywgYm9vbCBoYXNBbHBoYSkK
ICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHQoSERDIGRjLCBib29sIGhhc0FscGhhKQorR3JhcGhpY3NDb250ZXh0Q2Fpcm86OkdyYXBoaWNz
Q29udGV4dENhaXJvKEhEQyBkYywgYm9vbCBoYXNBbHBoYSkKKyAgICA6IEdyYXBoaWNzQ29udGV4
dENhaXJvKGNyZWF0ZUNhaXJvQ29udGV4dFdpdGhIREMoZGMsIGhhc0FscGhhKSkKIHsKLSAgICBw
bGF0Zm9ybUluaXQoZGMsIGhhc0FscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBs
YXRmb3JtSW5pdChIREMgZGMsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgaWYgKCFkYykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fdCogY3IgPSBjcmVhdGVDYWlyb0NvbnRleHRXaXRoSERD
KGRjLCBoYXNBbHBoYSk7Ci0KLSAgICBtX2RhdGEgPSBuZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0Q2Fpcm8+KGNyKSk7Ci0gICAgbV9k
YXRhLT5wbGF0Zm9ybUNvbnRleHQuc2V0R3JhcGhpY3NDb250ZXh0UHJpdmF0ZShtX2RhdGEpOwot
ICAgIG1fZGF0YS0+bV9oZGMgPSBkYzsKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPmNyKCkp
IHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250ZXh0IHN0YXJ0cyBpbiBzeW5jIHdpdGgg
b3VyIHN0YXRlLgotICAgICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihmaWxsQ29sb3IoKSk7Ci0g
ICAgICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7Ci0gICAgfQotICAg
IGlmIChjcikKLSAgICAgICAgY2Fpcm9fZGVzdHJveShjcik7CiB9CiAjZW5kaWYKIApAQCAtMTI3
LDkgKzEwOCw5IEBAIHN0YXRpYyB2b2lkIGRyYXdCaXRtYXBUb0NvbnRleHQoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRElCCiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpyZWxlYXNlV2luZG93c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVj
dCwgYm9vbCBzdXBwb3J0QWxwaGFCbGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBt
X2ltcGwgfHwgIW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAg
Ym9vbCBjcmVhdGVkQml0bWFwID0gIWRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYyB8
fCBpc0luVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBpZiAoIWhkYyB8fCAhY3JlYXRlZEJpdG1h
cCkgewotICAgICAgICBtX2RhdGEtPnJlc3RvcmUoKTsKKyAgICAgICAgZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPnJlc3RvcmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4
LDQgKzE1OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpmbHVzaCgp
CiB9CiAjZW5kaWYKIAorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBHcmFwaGljc0Nv
bnRleHRDYWlybzo6ZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLmdldCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNw
cAppbmRleCAyOWE4MmE4OTc4MjI5YjBmNTg3M2FiZGY4MmJmYWY4MDZjZjE2NTk4Li42NWU5N2Y5
NzM0NjkyMjgyZDI3ZmMxZWQ3ODQ4OGQxODE3M2MxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRE
aXJlY3QyRC5jcHAKQEAgLTQ3LDE3ICs0NywxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEp
CitHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQoSERDIGhk
YywgYm9vbCBoYXNBbHBoYSkKIHsKICAgICBwbGF0Zm9ybUluaXQoaGRjLCBoYXNBbHBoYSk7CiB9
CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBoZGMsIElEMkQxRENSZW5k
ZXJUYXJnZXQqKiByZW5kZXJUYXJnZXQsIFJFQ1QgcmVjdCwgYm9vbCBoYXNBbHBoYSkKK0dyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpHcmFwaGljc0NvbnRleHREaXJlY3QyRChIREMgaGRjLCBJRDJE
MURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRUNUIHJlY3QsIGJvb2wgaGFzQWxwaGEp
CiB7CiAgICAgLy8gQ3JlYXRlIGEgREMgcmVuZGVyIHRhcmdldC4KICAgICBhdXRvIHRhcmdldFBy
b3BlcnRpZXMgPSBEaXJlY3QyRDo6cmVuZGVyVGFyZ2V0UHJvcGVydGllcygpOwogCi0gICAgSFJF
U1VMVCBociA9IEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpLT5DcmVhdGVEQ1JlbmRl
clRhcmdldCgmdGFyZ2V0UHJvcGVydGllcywgcmVuZGVyVGFyZ2V0KTsKKyAgICBIUkVTVUxUIGhy
ID0gR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRlRENSZW5k
ZXJUYXJnZXQoJnRhcmdldFByb3BlcnRpZXMsIHJlbmRlclRhcmdldCk7CiAgICAgUkVMRUFTRV9B
U1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICAoKnJlbmRlclRhcmdldCktPkJpbmREQyhoZGMs
ICZyZWN0KTsKQEAgLTY3LDEyICs2NywxMiBAQCBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29u
dGV4dChIREMgaGRjLCBJRDJEMURDUmVuZGVyVGFyZ2V0KiogcmVuZGVyVGFyZ2V0LCBSRQogICAg
IG1fZGF0YS0+bV9oZGMgPSBoZGM7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250
ZXh0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0
bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyZXJUeXBlKQorR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OkdyYXBoaWNzQ29udGV4dERpcmVjdDJEKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBw
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgQml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVy
ZXJUeXBlKQogewogICAgIHBsYXRmb3JtSW5pdChwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCwgcmVu
ZGVyZXJUeXBlKTsKIH0KIAotSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZh
Y3RvcnkoKQorSUQyRDFGYWN0b3J5KiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c3lzdGVtRmFj
dG9yeSgpCiB7CiAgICAgc3RhdGljIElEMkQxRmFjdG9yeSogZGlyZWN0MkRGYWN0b3J5ID0gbnVs
bHB0cjsKICAgICBpZiAoIWRpcmVjdDJERmFjdG9yeSkgewpAQCAtODksNyArODksNyBAQCBJRDJE
MUZhY3RvcnkqIEdyYXBoaWNzQ29udGV4dDo6c3lzdGVtRmFjdG9yeSgpCiAgICAgcmV0dXJuIGRp
cmVjdDJERmFjdG9yeTsKIH0KIAotSUQyRDFSZW5kZXJUYXJnZXQqIEdyYXBoaWNzQ29udGV4dDo6
ZGVmYXVsdFJlbmRlclRhcmdldCgpCitJRDJEMVJlbmRlclRhcmdldCogR3JhcGhpY3NDb250ZXh0
RGlyZWN0MkQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKQogewogICAgIHN0YXRpYyBJRDJEMVJlbmRl
clRhcmdldCogZGVmYXVsdFJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAgICAgaWYgKCFkZWZhdWx0
UmVuZGVyVGFyZ2V0KSB7CkBAIC0xMDQsNyArMTA0LDcgQEAgSUQyRDFSZW5kZXJUYXJnZXQqIEdy
YXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpCiAgICAgcmV0dXJuIGRlZmF1bHRS
ZW5kZXJUYXJnZXQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoSERD
IGhkYywgYm9vbCBoYXNBbHBoYSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBsYXRm
b3JtSW5pdChIREMgaGRjLCBib29sIGhhc0FscGhhKQogewogICAgIGlmICghaGRjKQogICAgICAg
ICByZXR1cm47CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxh
dGZvcm1Jbml0KEhEQyBoZGMsIGJvb2wgaGFzQWxwaGEpCiAgICAgLy8gRklYTUU6IG1fc3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShD
R0NvbnRleHRHZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEKiBwbGF0Zm9ybUNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwbGF0
Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBsYXRmb3JtQ29udGV4dCkKIHsKICAg
ICBwbGF0Zm9ybUluaXQocGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlw
ZTo6R1BVTWVtb3J5KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtSW5pdChQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0LCBCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
cGxhdGZvcm1Jbml0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEKiBwbGF0Zm9ybUNvbnRleHQsIEJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlIHJlbmRlcmluZ1R5cGUpCiB7CiAgICAgaWYgKCFwbGF0
Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NSwxNiArMTU1LDEzIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUluaXQoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQqIHBs
YXRmb3JtQ29udGV4dCwgQml0CiAgICAgLy8gRklYTUU6IG1fc3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSA9IGNvbnZlcnRJbnRlcnBvbGF0aW9uUXVhbGl0eShDR0NvbnRleHRHZXRJbnRl
cnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRleHQoKSkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6cGxhdGZvcm1EZXN0cm95KCkKK0dyYXBoaWNzQ29udGV4dERpcmVjdDJEOjp+R3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQoKQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLVBsYXRm
b3JtQ29udGV4dERpcmVjdDJEKiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNv
bnN0CitQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBs
YXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJu
IG1faW1wbC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKCFwYWludGluZ0Rpc2FibGVk
KCkpOwogICAgIHJldHVybiAmbV9kYXRhLT5wbGF0Zm9ybUNvbnRleHQoKTsKIH0KIApAQCAtMTk1
LDMzICsxOTIsMjggQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpjdXJy
ZW50R2xvYmFsQWxwaGEoKSBjb25zdAogICAgIHJldHVybiBtX2FscGhhOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6c2F2ZSgpCiB7Ci0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAg
ICBHcmFwaGljc0NvbnRleHQ6OnNhdmUoKTsKICAgICBEaXJlY3QyRDo6c2F2ZSgqcGxhdGZvcm1D
b250ZXh0KCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3Rh
dGUoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7Ci0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmUo
KTsKICAgICBEaXJlY3QyRDo6cmVzdG9yZSgqcGxhdGZvcm1Db250ZXh0KCkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BsYXRmb3JtSW1hZ2UoY29uc3QgQ09NUHRyPElEMkQxQml0
bWFwPiYgaW1hZ2UsIGNvbnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd05hdGl2
ZUltYWdlKE5hdGl2ZUltYWdlJiBuYXRpdmVJbWFnZSwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6
OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBpbWFnZVNp
emUsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zLCBzdGF0ZS5hbHBoYSwgRGlyZWN0MkQ6OlNo
YWRvd1N0YXRlKHN0YXRlKSk7CisgICAgRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZSgqcGxhdGZv
cm1Db250ZXh0KCksIG5hdGl2ZUltYWdlLnBsYXRmb3JtSW1hZ2UoKS5nZXQoKSwgaW1hZ2VTaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucywgc3RhdGUuYWxwaGEsIERpcmVjdDJEOjpTaGFk
b3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRv
d3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvb2wgc3VwcG9ydEFs
cGhhQmxlbmQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyZWxlYXNlV2luZG93c0Nv
bnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0QWxwaGFC
bGVuZCkKIHsKLSAgICBib29sIGNyZWF0ZWRCaXRtYXAgPSBtX2ltcGwgfHwgIW1fZGF0YS0+bV9o
ZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgYm9vbCBjcmVhdGVkQml0bWFwID0g
IW1fZGF0YS0+bV9oZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgaWYgKCFjcmVh
dGVkQml0bWFwKSB7Ci0gICAgICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
ICAgIERpcmVjdDJEOjpyZXN0b3JlKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yNjIsMzQgKzI1NCwzNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVs
ZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwog
ICAgIDo6RGVsZXRlREMoaGRjKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdXaW5k
b3dzQml0bWFwKFdpbmRvd3NCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3V2luZG93c0JpdG1hcChXaW5kb3dzQml0
bWFwKiBpbWFnZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBQYXRoJiBwYXRoLCBmbG9hdCB3aWR0aCwgZmxv
YXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0
aCwgZmxvYXQgb2Zmc2V0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywg
ZmxvYXQgd2lkdGgsIGZsb2F0IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIERvY3VtZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQogeworICAgIERpcmVjdDJE
OjpkcmF3RG90c0ZvckRvY3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHls
ZSk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlw
ZSkKK0dyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZSByZW5kZXJpbmdU
eXBlKQogICAgIDogbV9wbGF0Zm9ybUNvbnRleHQocGxhdGZvcm1Db250ZXh0KQogICAgICwgbV9y
ZW5kZXJlclR5cGUocmVuZGVyaW5nVHlwZSkKIHsKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0
LnJlbmRlclRhcmdldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5
cGUgPT0gR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KQorICAgIGlmIChtX3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3
KCk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4m
JiBvd25lZFBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdD
b250ZXh0VHlwZSByZW5kZXJpbmdUeXBlKQorR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEPiYmIG93bmVkUGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGUgcmVuZGVyaW5nVHlwZSkKICAgICA6
IG1fb3duZWRQbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShvd25lZFBsYXRmb3JtQ29udGV4dCkpCiAg
ICAgLCBtX3BsYXRmb3JtQ29udGV4dCgqbV9vd25lZFBsYXRmb3JtQ29udGV4dCkKICAgICAsIG1f
cmVuZGVyZXJUeXBlKHJlbmRlcmluZ1R5cGUpCkBAIC0yOTcsNyArMjkwLDcgQEAgR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoc3Rk
Ojp1bmlxdWVfcHRyPFAKICAgICBpZiAoIW1fcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9yZW5kZXJlclR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KQorICAgIGlmICht
X3JlbmRlcmVyVHlwZSA9PSBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6Qml0bWFwUmVuZGVyaW5n
Q29udGV4dFR5cGU6OkdQVU1lbW9yeSkKICAgICAgICAgYmVnaW5EcmF3KCk7CiB9CiAKQEAgLTMx
MCw5ICszMDMsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUoKQogICAgICAgICBlbmREcmF3KCk7CiB9CiAKLUlEMkQxU29s
aWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHQ6OmJydXNoV2l0aENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKK0lEMkQxU29saWRDb2xvckJydXNoKiBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
YnJ1c2hXaXRoQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5icnVzaFdpdGhD
b2xvcihjb2xvcldpdGhHbG9iYWxBbHBoYShjb2xvcikpLmdldCgpOwogfQogCkBAIC0zNzIsNzMg
KzM2NCw2MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6cm90YXRlKGZs
b2F0IGFuZ2xlKQogewogfQogCi1EMkQxX0NPTE9SX0YgR3JhcGhpY3NDb250ZXh0Ojpjb2xvcldp
dGhHbG9iYWxBbHBoYShjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CitEMkQxX0NPTE9SX0YgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbG9yV2l0aEdsb2JhbEFscGhhKGNvbnN0IENvbG9yJiBj
b2xvcikgY29uc3QKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yLnRvU1JHQkFMb3Nz
eTxmbG9hdD4oKTsKICAgICByZXR1cm4gRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEgKiBtX2RhdGEt
PmN1cnJlbnRHbG9iYWxBbHBoYSgpKTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0
Ojpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERp
cmVjdDJEOjpzb2xpZFN0cm9rZUJydXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1D
b250ZXh0KCktPm1fc29saWRTdHJva2VCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVzaCogR3Jh
cGhpY3NDb250ZXh0Ojpzb2xpZEZpbGxCcnVzaCgpIGNvbnN0CitJRDJEMUJydXNoKiBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6c29saWRGaWxsQnJ1c2goKSBjb25zdAogewogICAgIHJldHVybiBw
bGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZEZpbGxCcnVzaC5nZXQoKTsKIH0KIAotSUQyRDFCcnVz
aCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuU3Ryb2tlQnJ1c2goKSBjb25zdAorSUQyRDFCcnVz
aCogR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnBhdHRlcm5TdHJva2VCcnVzaCgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRlcm5TdHJva2VCcnVzaC5nZXQo
KTsKIH0KIAotSUQyRDFCcnVzaCogR3JhcGhpY3NDb250ZXh0OjpwYXR0ZXJuRmlsbEJydXNoKCkg
Y29uc3QKK0lEMkQxQnJ1c2gqIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpwYXR0ZXJuRmlsbEJy
dXNoKCkgY29uc3QKIHsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVybkZp
bGxCcnVzaC5nZXQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luRHJhdygpCit2
b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpiZWdpbkRyYXcoKQogewotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmJlZ2luRHJhdygp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kRHJhdygpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dERpcmVjdDJEOjplbmREcmF3KCkKIHsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0
KCkpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5lbmREcmF3KCk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmbHVzaCgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmbHVzaCgp
CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6Zmx1
c2goKnBsYXRmb3JtQ29udGV4dCgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQ
bGF0Zm9ybVBhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6ZHJhd1BhdHRlcm4oY29uc3QgUGxhdGZvcm1JbWFnZVB0ciYgaW1hZ2UsIGNvbnN0IEZsb2F0
U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgIXBhdHRlcm5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCisgICAgaWYgKCFwYXR0ZXJu
VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
aGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGF1dG8gdGlsZUltYWdlID0gaW1hZ2U7CiAgICAg
RGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKCpwbGF0Zm9ybUNvbnRleHQoKSwgV1RGTW92ZSh0aWxlSW1h
Z2UpLCBJbnRTaXplKGltYWdlLnNpemUoKSksIGRlc3RSZWN0LCB0aWxlUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMuY29tcG9zaXRlT3BlcmF0b3IoKSwgb3B0aW9ucy5ibGVu
ZE1vZGUoKSk7CiB9CiAKIC8vIERyYXdzIGEgZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tl
ZCBib3JkZXIuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBmbG9hdCBib3JkZXJUaGlja25lc3MpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGJvcmRlclRoaWNrbmVz
cykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd1JlY3QocmVjdCwgYm9yZGVyVGhp
Y2tuZXNzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEFTU0VSVCghcmVjdC5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3Rh
dGUgPSB0aGlzLT5zdGF0ZSgpOwogICAgIERpcmVjdDJEOjpkcmF3UmVjdCgqcGxhdGZvcm1Db250
ZXh0KCksIHJlY3QsIGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJv
a2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IpOwogfQpAQCAtNDkwLDUyICs0NjksMjkgQEAgRDJE
MV9TVFJPS0VfU1RZTEVfUFJPUEVSVElFUyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnN0cm9rZVN0eWxlUHJvcGVydGkKICAgICByZXR1cm4gRDJEMTo6U3Ryb2tlU3R5bGVQcm9wZXJ0
aWVzKG1fcGxhdGZvcm1Db250ZXh0Lm1fbGluZUNhcCwgbV9wbGF0Zm9ybUNvbnRleHQubV9saW5l
Q2FwLCBtX3BsYXRmb3JtQ29udGV4dC5tX2xpbmVDYXAsIG1fcGxhdGZvcm1Db250ZXh0Lm1fbGlu
ZUpvaW4sIG1fcGxhdGZvcm1Db250ZXh0Lm1fbWl0ZXJMaW1pdCwgRDJEMV9EQVNIX1NUWUxFX1NP
TElELCAwLjBmKTsKIH0KIAotSUQyRDFTdHJva2VTdHlsZSogR3JhcGhpY3NDb250ZXh0OjpwbGF0
Zm9ybVN0cm9rZVN0eWxlKCkgY29uc3QKK0lEMkQxU3Ryb2tlU3R5bGUqIEdyYXBoaWNzQ29udGV4
dERpcmVjdDJEOjpzdHJva2VTdHlsZSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1BsYXRmb3Jt
Q29udGV4dCgpKTsKICAgICByZXR1cm4gcGxhdGZvcm1Db250ZXh0KCktPnN0cm9rZVN0eWxlKCk7
CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiBwb2ludDEsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50MikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdMaW5lKGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQyKQogewotICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIGlmIChzdHJv
a2VTdHlsZSgpID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+ZHJhd0xpbmUocG9pbnQxLCBwb2ludDIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBh
dXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmRyYXdMaW5lKCpwbGF0
Zm9ybUNvbnRleHQoKSwgcG9pbnQxLCBwb2ludDIsIHN0YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5z
dHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMp
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0VsbGlwc2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3RWxsaXBz
ZShyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgRGly
ZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCwgc3RhdGUuZmlsbENv
bG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3RhdGUuc3Ryb2tlQ29sb3IsIHN0YXRlLnN0cm9rZVRo
aWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4o
KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBhdXRv
IGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gdXNlclRv
QmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5lZWRlZCBvbiBXaW5kb3dzCiAK
QEAgLTU0MywxMSArNDk5LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0
dGVybigpCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fcGF0dGVyblN0cm9rZUJydXNoID0gYWRv
cHRDT00obV9zdGF0ZS5zdHJva2VQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oKnRoaXMs
IHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YXBwbHlGaWxsUGF0dGVybigpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjphcHBs
eUZpbGxQYXR0ZXJuKCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gdXNlclRvQmFzZUNUTTsgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG5l
ZWRlZCBvbiBXaW5kb3dzCiAKQEAgLTU1NSwxNzkgKzUwOCwxMDQgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oKQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tX3BhdHRl
cm5GaWxsQnJ1c2ggPSBhZG9wdENPTShtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oKnRoaXMsIHBhdHRlcm5BbHBoYSwgdXNlclRvQmFzZUNUTSkpOwogfQogCi12b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmRyYXdQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmRyYXdQYXRoKHBhdGgpOworICAg
IGlmIChwYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6
OmRyYXdQYXRoKGNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3VyY2Uoc3RhdGUsICp0
aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQordm9pZCBHcmFwaGljc0NvbnRleHRE
aXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpIHx8IHBhdGguaXNFbXB0eSgpKQorICAgIGlmIChwYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPmZpbGxQ
YXRoKHBhdGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0
byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6ZmlsbFBhdGgo
Y29udGV4dCwgcGF0aCwgRGlyZWN0MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpz
dHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSB8fCBwYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkg
ewotICAgICAgICBtX2ltcGwtPnN0cm9rZVBhdGgocGF0aCk7CisgICAgaWYgKHBhdGguaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29u
dGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRlKCk7CiAgICAgYXV0byYgY29u
dGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3QyRDo6c3Ryb2tlUGF0aChjb250
ZXh0LCBwYXRoLCBEaXJlY3QyRDo6U3Ryb2tlU291cmNlKHN0YXRlLCAqdGhpcyksIERpcmVjdDJE
OjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9p
bXBsLT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VS
VChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgp
OwogICAgIGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6
OmZpbGxSZWN0KGNvbnRleHQsIHJlY3QsIERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCAqdGhp
cyksIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShzdGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3Ip
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+
ZmlsbFJlY3QocmVjdCwgY29sb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBhdXRvJiBzdGF0ZSA9IHRoaXMtPnN0YXRl
KCk7CiAgICAgYXV0byYgY29udGV4dCA9ICpwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBEaXJlY3Qy
RDo6ZmlsbFJlY3QoY29udGV4dCwgcmVjdCwgY29sb3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShz
dGF0ZSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1GaWxsUm91bmRlZFJl
Y3QoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9p
ZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBHcmFkaWVudCYgZ3JhZGllbnQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICBhdXRvIGJydXNoID0gZ3JhZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCkpOworICAgIGlmICghYnJ1c2gpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFT
U0VSVCghbV9pbXBsKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoR3JhZGllbnQobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIGJydXNoLmdldCgpKTsKK30KIAotICAgIEFTU0VSVChoYXNQbGF0
Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29tcG9zaXRlT3BlcmF0
b3IgY29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCit7CisgICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOworICAgIENvbXBvc2l0ZU9wZXJhdG9y
IHByZXZpb3VzT3BlcmF0b3IgPSBzdGF0ZS5jb21wb3NpdGVPcGVyYXRvcjsKKworICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBjb21w
b3NpdGVPcGVyYXRvciwgYmxlbmRNb2RlKTsKKyAgICBEaXJlY3QyRDo6ZmlsbFJlY3QobV9wbGF0
Zm9ybUNvbnRleHQsIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsK
KyAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29u
dGV4dCwgcHJldmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUm91bmRlZFJlY3RJbXBsKGNvbnN0IEZsb2F0Um91
bmRlZFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3sKICAgICBhdXRvJiBzdGF0ZSA9
IHRoaXMtPnN0YXRlKCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdCgqcGxhdGZvcm1D
b250ZXh0KCksIHJlY3QsIGNvbG9yLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcm91bmRlZEhvbGVSZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpmaWxsUmVj
dFdpdGhSb3VuZGVkSG9sZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIHJvdW5kZWRIb2xlUmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsK
LSAgICAgICAgbV9pbXBsLT5maWxsUmVjdFdpdGhSb3VuZGVkSG9sZShyZWN0LCByb3VuZGVkSG9s
ZVJlY3QsIGNvbG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgYXV0byYgc3RhdGUgPSB0aGlzLT5zdGF0ZSgpOwogICAg
IGF1dG8mIGNvbnRleHQgPSAqcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgRGlyZWN0MkQ6OmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKGNvbnRleHQsIHJlY3QsIHJvdW5kZWRIb2xlUmVjdCwgRGlyZWN0
MkQ6OkZpbGxTb3VyY2Uoc3RhdGUsICp0aGlzKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGlwKHJlY3QpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBE
aXJlY3QyRDo6Y2xpcCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit2b2lkIEdyYXBoaWNz
Q29udGV4dERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBs
KSB7Ci0gICAgICAgIG1faW1wbC0+Y2xpcE91dChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNs
aXBPdXQoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0
MkQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1w
bC0+Y2xpcE91dChwYXRoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OmNsaXBPdXQoKnBsYXRmb3JtQ29u
dGV4dCgpLCBwYXRoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0
IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPmNsaXBQYXRoKHBhdGgsIGNsaXBSdWxlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAg
ICAgRGlyZWN0MkQ6OmNsaXBQYXRoKCpwbGF0Zm9ybUNvbnRleHQoKSwgcGF0aCwgY2xpcFJ1bGUp
OwogfQogCi1JbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CitJbnRS
ZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpjbGlwQm91bmRzKCkgY29uc3QKIHsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAg
aWYgKG1faW1wbCkKLSAgICAgICAgcmV0dXJuIG1faW1wbC0+Y2xpcEJvdW5kcygpOwotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRl
OjpnZXRDbGlwQm91bmRzKCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKQEAgLTczNSwxOCArNjEz
LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpiZWdpblRyYW5zcGFy
ZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpi
ZWdpblBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBB
U1NFUlQoIW1faW1wbCk7Ci0KKyAgICBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSk7CiAgICAgc2F2ZSgpOwogCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG9wYWNp
dHk7CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpi
ZWdpblRyYW5zcGFyZW5jeUxheWVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgb3BhY2l0eSk7CiB9CiAK
QEAgLTc1NCwxMTkgKzYyNywxMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKIHsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFBsYXRmb3JtVHJhbnNwYXJlbmN5TGF5ZXIoKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7
CisgICAgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIERpcmVj
dDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcigqcGxhdGZvcm1Db250ZXh0KCkpOwogCi0gICAgQVNT
RVJUKCFtX2ltcGwpOwotCiAgICAgbV9zdGF0ZS5hbHBoYSA9IG1fZGF0YS0+Y3VycmVudEdsb2Jh
bEFscGhhKCk7CiAKICAgICByZXN0b3JlKCk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0Ojpz
dXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCitib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzdXBwb3J0c1RyYW5zcGFyZW5jeUxheWVycygpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXpl
JiBvZmZzZXQsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBz
dGF0ZSwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MgZmxhZ3MpCiB7Ci0g
ICAgKHZvaWQpb2Zmc2V0OwotICAgICh2b2lkKWJsdXI7Ci0gICAgKHZvaWQpY29sb3I7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0
ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdlKQorICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0
cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsK
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQotewotICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQorICAgIGlmIChmbGFncyAmIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHls
ZUNoYW5nZSkKKyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRm
b3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUpOwogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VTdHlsZShTdHJva2VTdHlsZSBzdHlsZSkKLXsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYgR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkgeworICAgICAgICBpZiAoc3RhdGUuc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMpIHsKKyAgICAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAorICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBD
YW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKKyAgICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0
ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5z
dGF0ZSgpKTsKKyAgICAgICAgICAgIGF1dG8mIHNoYWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09m
ZnNldDsKKyAgICAgICAgICAgIG11dGFibGVTdGF0ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09m
ZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0LmhlaWdodCgpIH07CisgICAgICAgIH0KKyAgICB9
CiAKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0
ZTo6c2V0U3Ryb2tlU3R5bGUoKnBsYXRmb3JtQ29udGV4dCgpLCBzdHlsZSk7Ci19CisgICAgaWYg
KGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OkNvbXBvc2l0ZU9wZXJhdGlvbkNoYW5nZSkK
KyAgICAgICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9y
bUNvbnRleHQsIHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yLCBzdGF0ZS5ibGVuZE1vZGUpOwogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKLXsKLSAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzICYg
R3JhcGhpY3NDb250ZXh0U3RhdGU6OlNob3VsZEFudGlhbGlhc0NoYW5nZSkKKyAgICAgICAgRGly
ZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRpYWxpYXMobV9wbGF0Zm9ybUNvbnRleHQsIHN0YXRl
LnNob3VsZEFudGlhbGlhcyk7CiAKLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIC8vIE1heWJl
IHRoaXMgc2hvdWxkIGJlIHBhcnQgb2YgdGhlIHN0YXRlLgotICAgICAgICBtX2ltcGwtPnNldE1p
dGVyTGltaXQobGltaXQpOwotICAgICAgICByZXR1cm47CisgICAgaWYgKGZsYWdzLmNvbnRhaW5z
KEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdHJva2VDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNT
RVJUKG1fc3RhdGUuc3Ryb2tlQ29sb3IgPT0gY29sb3IpOworICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+bV9zb2xpZFN0cm9rZUJydXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7
ICAgIAorICAgIH0KKyAgICAKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhpY3NDb250ZXh0
U3RhdGU6OkZpbGxDb2xvckNoYW5nZSkpIHsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUuZmlsbENv
bG9yID09IGNvbG9yKTsKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPm1fc29saWRGaWxsQnJ1
c2ggPSBicnVzaFdpdGhDb2xvcihmaWxsQ29sb3IoKSk7CiAgICAgfQogCi0gICAgQVNTRVJUKGhh
c1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZv
cm1Db250ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOworICAgIGlmIChmbGFncy5jb250YWlucyhHcmFwaGljc0NvbnRleHRT
dGF0ZTo6U2hvdWxkU21vb3RoRm9udHNDaGFuZ2UpKSB7CisgICAgICAgIGF1dG8gZm9udFNtb290
aGluZ01vZGUgPSBlbmFibGUgPyBEMkQxX1RFWFRfQU5USUFMSUFTX01PREVfQ0xFQVJUWVBFIDog
RDJEMV9URVhUX0FOVElBTElBU19NT0RFX0FMSUFTRUQ7CisgICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlhc01vZGUoZm9udFNtb290aGluZ01v
ZGUpOworICAgIH0KIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5jbGVhclJl
Y3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoZmxhZ3MuY29udGFpbnMoR3JhcGhp
Y3NDb250ZXh0U3RhdGU6OkFscGhhQ2hhbmdlKSkgeworICAgICAgICBBU1NFUlQobV9zdGF0ZS5h
bHBoYSA9PSBhbHBoYSk7CisgICAgICAgIG1fZGF0YS0+c2V0QWxwaGEoYWxwaGEpOwogICAgIH0K
IAotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmNsZWFy
UmVjdCgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgIGlmIChmbGFncy5jb250YWlucyhH
cmFwaGljc0NvbnRleHRTdGF0ZTo6SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eUNoYW5nZSkpIHsK
KyAgICAgICAgRDJEMV9JTlRFUlBPTEFUSU9OX01PREUgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xB
VElPTl9NT0RFX05FQVJFU1RfTkVJR0hCT1I7CisKKyAgICAgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgICAgIGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6CisgICAgICAgICAgICBx
dWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdElu
dGVycG9sYXRlOgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQT0xBVElPTl9NT0RF
X05FQVJFU1RfTkVJR0hCT1I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl
cnBvbGF0aW9uUXVhbGl0eTo6TG93OgorICAgICAgICAgICAgcXVhbGl0eSA9IEQyRDFfSU5URVJQ
T0xBVElPTl9NT0RFX0xJTkVBUjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
dGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06CisgICAgICAgICAgICBxdWFsaXR5ID0gRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfQ1VCSUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKKyAgICAgICAgICAgIHF1YWxpdHkgPSBEMkQx
X0lOVEVSUE9MQVRJT05fTU9ERV9ISUdIX1FVQUxJVFlfQ1VCSUM7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogU2V0SW50ZXJwb2xhdGlvblF1YWxpdHko
cGxhdGZvcm1Db250ZXh0KCksIHF1YWxpdHkpOworICAgIH0KIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBE
aXJlY3QyRDo6c2V0TWl0ZXJMaW1pdCgqcGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKK30KIAot
ICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVX
aWR0aCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIERpcmVjdDJEOjpj
bGVhclJlY3QoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKK30KIAotICAgIEFTU0VSVChoYXNQ
bGF0Zm9ybUNvbnRleHQoKSk7Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzdHJva2VS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewogICAgIGF1dG8m
IHN0YXRlID0gdGhpcy0+c3RhdGUoKTsKICAgICBhdXRvJiBjb250ZXh0ID0gKnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgIERpcmVjdDJEOjpzdHJva2VSZWN0KGNvbnRleHQsIHJlY3QsIGxpbmVXaWR0
aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgKnRoaXMpLCBEaXJlY3QyRDo6U2hhZG93
U3RhdGUoc3RhdGUpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGlu
ZUNhcCBjYXApCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRMaW5lQ2FwKExpbmVD
YXAgY2FwKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zZXRMaW5lQ2FwKGNhcCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKCpwbGF0Zm9ybUNvbnRleHQoKSwgY2FwKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFz
aGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6c2V0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCiB7Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1f
aW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVEYXNoKGRhc2hlcywgZGFzaE9mZnNldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBpZiAoZGFzaE9mZnNldCA8IDApIHsKICAg
ICAgICAgZmxvYXQgbGVuZ3RoID0gMDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk
YXNoZXMuc2l6ZSgpOyArK2kpCkBAIC04NzUsMzQxICs3NDIsMTczIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRMaW5lRGFzaChjb25zdCBEYXNoQXJyYXkmIGRhc2hlcywgZmxvYXQgZGFzaE9m
ZnNldCkKICAgICAgICAgICAgIGRhc2hPZmZzZXQgPSBmbW9kKGRhc2hPZmZzZXQsIGxlbmd0aCkg
KyBsZW5ndGg7CiAgICAgfQogCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAg
ICBEaXJlY3QyRDo6c2V0TGluZURhc2goKnBsYXRmb3JtQ29udGV4dCgpLCBkYXNoZXMsIGRhc2hP
ZmZzZXQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvaW4g
am9pbikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldExpbmVKb2luKExpbmVKb2lu
IGpvaW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKG1faW1wbCkgewotICAgICAgICBtX2ltcGwtPnNldExpbmVKb2luKGpvaW4pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBEaXJlY3QyRDo6c2V0TGluZUpvaW4oKnBsYXRmb3JtQ29udGV4dCgpLCBqb2luKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCwg
V2luZFJ1bGUgZmlsbFJ1bGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzY2FsZShj
b25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgY2xpcFBhdGgocGF0aCwgZmlsbFJ1bGUpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQot
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5zY2FsZShzaXplKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0
MkQ6OnNjYWxlKCpwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZSk7CiAgICAgLy8gRklYTUU6IG1fZGF0
YS0+bV91c2VyVG9EZXZpY2VUcmFuc2Zvcm1Lbm93blRvQmVJZGVudGl0eSA9IGZhbHNlOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IGFuZ2xlKQordm9pZCBHcmFwaGlj
c0NvbnRleHREaXJlY3QyRDo6cm90YXRlKGZsb2F0IGFuZ2xlKQogewotICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2ltcGwpIHsKLSAgICAg
ICAgbV9pbXBsLT5yb3RhdGUoYW5nbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
QVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKICAgICBEaXJlY3QyRDo6cm90YXRlKCpwbGF0
Zm9ybUNvbnRleHQoKSwgYW5nbGUpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2
aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQordm9pZCBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkgewotICAg
ICAgICBtX2ltcGwtPnRyYW5zbGF0ZSh4LCB5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgRGlyZWN0MkQ6OnRyYW5zbGF0
ZSgqcGxhdGZvcm1Db250ZXh0KCksIHgsIHkpOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNl
clRvRGV2aWNlVHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNvbmNhdENUTShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+Y29uY2F0
Q1RNKHRyYW5zZm9ybSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFz
UGxhdGZvcm1Db250ZXh0KCkpOwogICAgIERpcmVjdDJEOjpjb25jYXRDVE0oKnBsYXRmb3JtQ29u
dGV4dCgpLCB0cmFuc2Zvcm0pOwogICAgIC8vIEZJWE1FOiBtX2RhdGEtPm1fdXNlclRvRGV2aWNl
VHJhbnNmb3JtS25vd25Ub0JlSWRlbnRpdHkgPSBmYWxzZTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbC0+c2V0Q1RNKHRyYW5zZm9ybSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkp
OwogICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0Q1RNKCpwbGF0Zm9ybUNvbnRleHQoKSwgdHJhbnNm
b3JtKTsKICAgICAvLyBGSVhNRTogbV9kYXRhLT5tX3VzZXJUb0RldmljZVRyYW5zZm9ybUtub3du
VG9CZUlkZW50aXR5ID0gZmFsc2U7CiB9CiAKLUFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHQ6OmdldENUTShJbmNsdWRlRGV2aWNlU2NhbGUgaW5jbHVkZVNjYWxlKSBjb25zdAorQWZmaW5l
VHJhbnNmb3JtIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpnZXRDVE0oSW5jbHVkZURldmljZVNj
YWxlIGluY2x1ZGVTY2FsZSkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAobV9pbXBsKQotICAg
ICAgICByZXR1cm4gbV9pbXBsLT5nZXRDVE0oaW5jbHVkZVNjYWxlKTsKLQotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAgcmV0dXJuIERpcmVjdDJEOjpTdGF0ZTo6Z2V0Q1RN
KCpwbGF0Zm9ybUNvbnRleHQoKSk7CiB9CiAKLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJv
dW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBSb3VuZGluZ01vZGUgcm91
bmRpbmdNb2RlKQorRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpyb3VuZFRvRGV2
aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgUm91bmRpbmdNb2RlIHJvdW5kaW5nTW9k
ZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm4gcmVjdDsK
LQotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIHJldHVybiBtX2ltcGwtPnJvdW5kVG9EZXZpY2VQ
aXhlbHMocmVjdCwgcm91bmRpbmdNb2RlKTsKLQogICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6
OnJvdW5kVG9EZXZpY2VQaXhlbHMoKnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGJvb2wgcHJpbnRpbmcsIGJvb2wgZG91YmxlTGluZXMsIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
KQotewotICAgIERhc2hBcnJheSB3aWR0aHM7Ci0gICAgd2lkdGhzLmFwcGVuZCgwKTsKLSAgICB3
aWR0aHMuYXBwZW5kKHJlY3Qud2lkdGgoKSk7Ci0gICAgZHJhd0xpbmVzRm9yVGV4dChyZWN0Lmxv
Y2F0aW9uKCksIHJlY3QuaGVpZ2h0KCksIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZUxpbmVzLCBz
dHJva2VTdHlsZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZXNGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBmbG9hdCB0aGlja25lc3MsIGNvbnN0IERhc2hBcnJh
eSYgd2lkdGhzLCBib29sIHByaW50aW5nLCBib29sIGRvdWJsZVVuZGVybGluZXMsIFN0cm9rZVN0
eWxlIHN0cm9rZVN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3QyRDo6ZHJhd0xpbmVz
Rm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBE
YXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBkb3VibGVVbmRlcmxpbmVzLCBT
dHJva2VTdHlsZSBzdHJva2VTdHlsZSkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBpZiAoIXdpZHRocy5zaXplKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsLT5kcmF3TGluZXNGb3JUZXh0
KHBvaW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKICAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dCgqcGxhdGZvcm1Db250ZXh0KCksIHBv
aW50LCB0aGlja25lc3MsIHdpZHRocywgcHJpbnRpbmcsIGRvdWJsZVVuZGVybGluZXMsIG1fc3Rh
dGUuc3Ryb2tlQ29sb3IpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVj
dChjb25zdCBVUkwmIGxpbmssIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCit2b2lkIEdyYXBo
aWNzQ29udGV4dERpcmVjdDJEOjpzZXRVUkxGb3JSZWN0KGNvbnN0IFVSTCYgbGluaywgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9pbXBsKSB7Ci0gICAgICAgIFdURkxvZ0Fsd2F5cygi
R3JhcGhpY3NDb250ZXh0OjpzZXRVUkxGb3JSZWN0KCkgaXMgbm90IHlldCBjb21wYXRpYmxlIHdp
dGggcmVjb3JkaW5nIGNvbnRleHRzLiIpOwotICAgICAgICByZXR1cm47IC8vIEZJWE1FIGZvciBk
aXNwbGF5IGxpc3RzLgotICAgIH0KLQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50
ZXJwb2xhdGlvblF1YWxpdHkgbW9kZSkKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQo
KSk7Ci0KLSAgICBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERSBxdWFsaXR5ID0gRDJEMV9JTlRFUlBP
TEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLQotICAgIHN3aXRjaCAobW9kZSkgewotICAg
IGNhc2UgSW50ZXJwb2xhdGlvblF1YWxpdHk6OkRlZmF1bHQ6Ci0gICAgICAgIHF1YWxpdHkgPSBE
MkQxX0lOVEVSUE9MQVRJT05fTU9ERV9ORUFSRVNUX05FSUdIQk9SOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpEb05vdEludGVycG9sYXRlOgotICAgICAg
ICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTkVBUkVTVF9ORUlHSEJPUjsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6TG93OgotICAgICAg
ICBxdWFsaXR5ID0gRDJEMV9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEludGVycG9sYXRpb25RdWFsaXR5OjpNZWRpdW06Ci0gICAgICAgIHF1YWxp
dHkgPSBEMkQxX0lOVEVSUE9MQVRJT05fTU9ERV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJbnRlcnBvbGF0aW9uUXVhbGl0eTo6SGlnaDoKLSAgICAgICAgcXVhbGl0eSA9IEQyRDFf
SU5URVJQT0xBVElPTl9NT0RFX0hJR0hfUVVBTElUWV9DVUJJQzsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIC8vIEZJWE1FOiBTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShwbGF0Zm9ybUNvbnRl
eHQoKSwgcXVhbGl0eSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0NBTGF5ZXJD
b250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJE
OjpzZXRJc0NBTGF5ZXJDb250ZXh0KGJvb2wgaXNMYXllckNvbnRleHQpCiB7Ci0gICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1faW1wbCkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBwcm9iYWJhbHkgbm90IG5l
ZWRlZC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDo6
aXNDQUxheWVyQ29udGV4dCgpIGNvbnN0Citib29sIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpp
c0NBTGF5ZXJDb250ZXh0KCkgY29uc3QKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGSVhNRQotICAgIGlmIChtX2ltcGwpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcHJvYmFiYWx5
IG5vdCBuZWVkZWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sIGlz
QWNjZWxlcmF0ZWQpCit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sIGlzQWNjZWxlcmF0ZWQpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUUKLSAgICBpZiAobV9pbXBsKQot
ICAgICAgICByZXR1cm47Ci0KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEdyYXBo
aWNzQ29udGV4dDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAorYm9vbCBHcmFwaGljc0Nv
bnRleHREaXJlY3QyRDo6aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdAogewotICAgIGlmICgh
aGFzUGxhdGZvcm1Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIHJldHVy
biBEaXJlY3QyRDo6U3RhdGU6OmlzQWNjZWxlcmF0ZWRDb250ZXh0KCpwbGF0Zm9ybUNvbnRleHQo
KSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShUZXh0RHJhd2luZ01vZGVGbGFncyBtb2RlKQordm9pZCBHcmFwaGljc0NvbnRleHREaXJlY3Qy
RDo6YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikKIHsKLSAg
ICAodm9pZCltb2RlOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAg
ICBBU1NFUlQobV9zdGF0ZS5zdHJva2VDb2xvciA9PSBjb2xvcik7Ci0gICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bV9zb2xpZFN0cm9rZUJy
dXNoID0gYnJ1c2hXaXRoQ29sb3Ioc3Ryb2tlQ29sb3IoKSk7CisgICAgLy8gVGhpcyBpcyBhIG5v
LW9wIGZvciBEaXJlY3QyRC4KIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGly
ZWN0MkQ6OmZpbGxFbGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKIHsKLSAgICBBU1NF
UlQobV9zdGF0ZS5zdHJva2VUaGlja25lc3MgPT0gdGhpY2tuZXNzKTsKLSAgICBtX2RhdGEtPnNl
dFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotfQorICAgIGlmIChtX3N0YXRlLmZpbGxHcmFk
aWVudCB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgYmUgYWJsZSB0byBmaWxsIGVsbGlwc2VzIHdpdGggcGF0dGVybi9ncmFkaWVudCBicnVzaGVz
IGluIEQyRC4KKyAgICAgICAgZmlsbEVsbGlwc2VBc1BhdGgoZWxsaXBzZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUuZmlsbENvbG9yID09
IGNvbG9yKTsKLSAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5tX3NvbGlkRmlsbEJydXNoID0gYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKCkp
OworICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2Us
IG1fc3RhdGUuZmlsbENvbG9yLCBtX3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNv
bG9yLCBtX3N0YXRlLnN0cm9rZVRoaWNrbmVzcyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVNob3VsZEFudGlhbGlhcyhib29sIGVuYWJsZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0RGlyZWN0MkQ6OnN0cm9rZUVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQog
ewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJy
dXNoZXMgaW4gRDJELgorICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwogICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotICAgIEFTU0VSVCho
YXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OlN0YXRlOjpzZXRTaG91bGRBbnRp
YWxpYXMoKnBsYXRmb3JtQ29udGV4dCgpLCBlbmFibGUpOworICAgIERpcmVjdDJEOjpkcmF3RWxs
aXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIGVsbGlwc2UsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1f
c3RhdGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoYm9vbCBlbmFibGUp
Cit2b2lkIEdyYXBoaWNzQ29udGV4dERpcmVjdDJEOjpkcmF3R2x5cGhzKGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgRm9udFNtb290aGluZ01vZGUg
Zm9udFNtb290aGluZykKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIFVOVVNF
RF9QQVJBTShmb250U21vb3RoaW5nKTsKKyAgICBpZiAoIWZvbnQucGxhdGZvcm1EYXRhKCkuc2l6
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQoIW1faW1wbCk7CisgICAgYXV0byB4
T2Zmc2V0ID0gcG9pbnQueCgpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gZ2x5cGhzKG51
bUdseXBocyk7CisgICAgVmVjdG9yPGZsb2F0PiBob3Jpem9udGFsQWR2YW5jZXMobnVtR2x5cGhz
KTsKKyAgICBWZWN0b3I8RFdSSVRFX0dMWVBIX09GRlNFVD4gZ2x5cGhPZmZzZXRzKG51bUdseXBo
cyk7CiAKLSAgICBhdXRvIGZvbnRTbW9vdGhpbmdNb2RlID0gZW5hYmxlID8gRDJEMV9URVhUX0FO
VElBTElBU19NT0RFX0NMRUFSVFlQRSA6IEQyRDFfVEVYVF9BTlRJQUxJQVNfTU9ERV9BTElBU0VE
OwotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+U2V0VGV4dEFudGlhbGlh
c01vZGUoZm9udFNtb290aGluZ01vZGUpOwotfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICBpZiAoaSArIGZyb20gPj0gZ2x5cGhCdWZmZXIu
YWR2YW5jZXNDb3VudCgpKQorICAgICAgICAgICAgYnJlYWs7CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUFscGhhKGZsb2F0IGFscGhhKQotewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBhZHZhbmNlID0gZ2x5cGhC
dWZmZXIuYWR2YW5jZXMoaSArIGZyb20pOworICAgICAgICBpZiAoIWFkdmFuY2UpCisgICAgICAg
ICAgICBjb250aW51ZTsKIAotICAgIEFTU0VSVChtX3N0YXRlLmFscGhhID09IGFscGhhKTsKLSAg
ICBtX2RhdGEtPnNldEFscGhhKGFscGhhKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ2x5cGhzW2ldID0gZ2x5cGhCdWZmZXIuZ2x5
cGhBdChpICsgZnJvbSk7CisgICAgICAgIGhvcml6b250YWxBZHZhbmNlc1tpXSA9IGFkdmFuY2Ut
PndpZHRoKCk7CisgICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hZHZhbmNlT2Zmc2V0ID0gYWR2YW5j
ZS0+d2lkdGgoKTsKKyAgICAgICAgZ2x5cGhPZmZzZXRzW2ldLmFzY2VuZGVyT2Zmc2V0ID0gYWR2
YW5jZS0+aGVpZ2h0KCk7CisgICAgfQogCi0gICAgQVNTRVJUKCFtX2ltcGwpOworICAgIGRvdWJs
ZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5zeW50aGV0aWNCb2xkT2Zmc2V0KCk7CiAKLSAg
ICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIERpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKCpwbGF0Zm9ybUNvbnRleHQoKSwgY29tcG9zaXRlT3BlcmF0b3Is
IGJsZW5kTW9kZSk7CisgICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgp
OworICAgIERpcmVjdDJEOjpkcmF3R2x5cGhzKG1fcGxhdGZvcm1Db250ZXh0LCBEaXJlY3QyRDo6
RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U3Ryb2tlU291
cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksCisgICAgICAgIERpcmVjdDJEOjpTaGFkb3dT
dGF0ZShzdGF0ZSksIHBvaW50LCBmb250LCBzeW50aGV0aWNCb2xkT2Zmc2V0LCBnbHlwaHMsIGhv
cml6b250YWxBZHZhbmNlcywgZ2x5cGhPZmZzZXRzLCB4T2Zmc2V0LAorICAgICAgICBzdGF0ZS50
ZXh0RHJhd2luZ01vZGUsIHN0YXRlLnN0cm9rZVRoaWNrbmVzcywgc3RhdGUuc2hhZG93T2Zmc2V0
LCBzdGF0ZS5zaGFkb3dDb2xvcik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9y
bUFwcGx5RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpCitHcmFwaGlj
c0NvbnRleHQ6OkNsaXBUb0RyYXdpbmdDb21tYW5kc1Jlc3VsdCBHcmFwaGljc0NvbnRleHREaXJl
Y3QyRDo6Y2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IERlc3Rp
bmF0aW9uQ29sb3JTcGFjZSYsIEZ1bmN0aW9uPHZvaWQoR3JhcGhpY3NDb250ZXh0Jik+JiYpCiB7
Ci0gICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBEaXJlY3QyRC4KKyAgICAvLyBGSVhNRTogTm90
IGltcGxlbWVudGVkLgorICAgIHJldHVybiBDbGlwVG9EcmF3aW5nQ29tbWFuZHNSZXN1bHQ6OlN1
Y2Nlc3M7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybUZpbGxFbGxpcHNlKGNv
bnN0IEZsb2F0UmVjdCYgZWxsaXBzZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQ6OmNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50IHx8
IG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIGZpbGwgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJydXNoZXMgaW4gRDJE
LgotICAgICAgICBmaWxsRWxsaXBzZUFzUGF0aChlbGxpcHNlKTsKKyAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gYnVmZmVyLmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgaWYg
KCFpbWFnZSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIEFTU0VSVChoYXNQbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxFbGxpcHNlKCpwbGF0Zm9ybUNvbnRleHQo
KSwgZWxsaXBzZSwgbV9zdGF0ZS5maWxsQ29sb3IsIG1fc3RhdGUuc3Ryb2tlU3R5bGUsIG1fc3Rh
dGUuc3Ryb2tlQ29sb3IsIG1fc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKKyAgICBhdXRvKiBjb250
ZXh0ID0gJmdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29udGV4dCkpCisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpwbGF0Zm9ybVN0cm9rZUVsbGlwc2Uo
Y29uc3QgRmxvYXRSZWN0JiBlbGxpcHNlKQorI2lmIEVOQUJMRShWSURFTykKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQ6OnBhaW50RnJhbWVGb3JNZWRpYShNZWRpYVBsYXllciYsIGNvbnN0
IEZsb2F0UmVjdCYpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKCFtX2ltcGwpOwotCi0gICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYmUgYWJsZSB0byBzdHJva2UgZWxsaXBzZXMgd2l0aCBwYXR0ZXJuL2dyYWRpZW50IGJy
dXNoZXMgaW4gRDJELgotICAgICAgICBzdHJva2VFbGxpcHNlQXNQYXRoKGVsbGlwc2UpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBEaXJlY3QyRDo6ZHJhd0VsbGlwc2UoKnBsYXRmb3JtQ29udGV4dCgpLCBlbGxpcHNlLCBt
X3N0YXRlLnN0cm9rZVN0eWxlLCBtX3N0YXRlLnN0cm9rZUNvbG9yLCBtX3N0YXRlLnN0cm9rZVRo
aWNrbmVzcyk7CisgICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KIH0KKyNlbmRpZgorCiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJiNzBjM2MxNzNjOTFhNzZiZWJkMmU4ZTZkZjIxNTVmMWExNTRhYzEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNp
bmNsdWRlICJEaXJlY3QyRE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0
LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dERpcmVjdDJELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OmNyZWF0ZUZhY3RvcnkoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFj
dG9yeSgKLSAgICAgICAgWyZwbGF0Zm9ybUNvbnRleHRdKEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEPihjb250ZXh0LCBwbGF0Zm9ybUNvbnRleHQpOwotICAgICAgICB9KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHRJbXBsRmFjdG9yeSBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3RvcnkoSUQyRDFSZW5kZXJUYXJnZXQqIHJl
bmRlclRhcmdldCkKLXsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRl
eHRJbXBsRmFjdG9yeSgKLSAgICAgICAgW3JlbmRlclRhcmdldF0oR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ+KGNvbnRleHQsIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIH0p
OwotfQotCi1HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OkdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQpCi0gICAgOiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQpCi0g
ICAgLCBtX3BsYXRmb3JtQ29udGV4dChwbGF0Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUo
bWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250
ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1v
cnkpKQotewotICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUo
bV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3ByaXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1D
b250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJRDJEMVJlbmRlclRhcmdl
dCogcmVuZGVyVGFyZ2V0KQotICAgIDogR3JhcGhpY3NDb250ZXh0SW1wbChjb250ZXh0KQotICAg
ICwgbV9vd25lZFBsYXRmb3JtQ29udGV4dChtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEPihyZW5kZXJUYXJnZXQpKQotICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoKm1fb3duZWRQbGF0
Zm9ybUNvbnRleHQpCi0gICAgLCBtX3ByaXZhdGUobWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU+KG1fcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1h
cFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpKQotewotICAgIG1fcGxhdGZvcm1Db250
ZXh0LnNldEdyYXBoaWNzQ29udGV4dFByaXZhdGUobV9wcml2YXRlLmdldCgpKTsKLSAgICBtX3By
aXZhdGUtPnN5bmNDb250ZXh0KG1fcGxhdGZvcm1Db250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0SW1wbERpcmVjdDJEOjp+R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEKCkKLXsKLSAgICBt
X3BsYXRmb3JtQ29udGV4dC5zZXRHcmFwaGljc0NvbnRleHRQcml2YXRlKG51bGxwdHIpOwotfQot
Ci1ib29sIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6aGFzUGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQq
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gJm1fcGxhdGZvcm1Db250ZXh0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEltcGxEaXJlY3QyRDo6dXBkYXRlU3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyBmbGFncykKLXsKLSAg
ICBpZiAoZmxhZ3MgJiBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3Ryb2tlVGhpY2tuZXNzQ2hhbmdl
KQotICAgICAgICBEaXJlY3QyRDo6U3RhdGU6OnNldFN0cm9rZVRoaWNrbmVzcyhtX3BsYXRmb3Jt
Q29udGV4dCwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzKTsKLQotICAgIGlmIChmbGFncyAmIEdyYXBo
aWNzQ29udGV4dFN0YXRlOjpTdHJva2VTdHlsZUNoYW5nZSkKLSAgICAgICAgRGlyZWN0MkQ6OlN0
YXRlOjpzZXRTdHJva2VTdHlsZShtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc3Ryb2tlU3R5bGUp
OwotCi0gICAgaWYgKGZsYWdzICYgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlNoYWRvd0NoYW5nZSkg
ewotICAgICAgICBpZiAoc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAg
ICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3
aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4dAotICAgICAgICAgICAgLy8gV2UgZmxpcCB0aGUg
aGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKLSAg
ICAgICAgICAgIGF1dG8mIG11dGFibGVTdGF0ZSA9IGNvbnN0X2Nhc3Q8R3JhcGhpY3NDb250ZXh0
U3RhdGUmPihncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKTsKLSAgICAgICAgICAgIGF1dG8mIHNo
YWRvd09mZnNldCA9IHN0YXRlLnNoYWRvd09mZnNldDsKLSAgICAgICAgICAgIG11dGFibGVTdGF0
ZS5zaGFkb3dPZmZzZXQgPSB7IHNoYWRvd09mZnNldC53aWR0aCgpLCAtc2hhZG93T2Zmc2V0Lmhl
aWdodCgpIH07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFwaGljc0Nv
bnRleHRTdGF0ZTo6Q29tcG9zaXRlT3BlcmF0aW9uQ2hhbmdlKQotICAgICAgICBEaXJlY3QyRDo6
U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuY29t
cG9zaXRlT3BlcmF0b3IsIHN0YXRlLmJsZW5kTW9kZSk7Ci0KLSAgICBpZiAoZmxhZ3MgJiBHcmFw
aGljc0NvbnRleHRTdGF0ZTo6U2hvdWxkQW50aWFsaWFzQ2hhbmdlKQotICAgICAgICBEaXJlY3Qy
RDo6U3RhdGU6OnNldFNob3VsZEFudGlhbGlhcyhtX3BsYXRmb3JtQ29udGV4dCwgc3RhdGUuc2hv
dWxkQW50aWFsaWFzKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNs
ZWFyU2hhZG93KCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lQ2FwKG1f
cGxhdGZvcm1Db250ZXh0LCBsaW5lQ2FwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNo
T2Zmc2V0KQotewotICAgIERpcmVjdDJEOjpzZXRMaW5lRGFzaChtX3BsYXRmb3JtQ29udGV4dCwg
ZGFzaGVzLCBkYXNoT2Zmc2V0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQotewotICAgIERpcmVjdDJEOjpzZXRM
aW5lSm9pbihtX3BsYXRmb3JtQ29udGV4dCwgbGluZUpvaW4pOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlckxpbWl0KQotewot
ICAgIERpcmVjdDJEOjpzZXRNaXRlckxpbWl0KG1fcGxhdGZvcm1Db250ZXh0LCBtaXRlckxpbWl0
KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBEaXJlY3QyRDo6RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3Qy
RDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGly
ZWN0MkQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29s
b3IsIERpcmVjdDJEOjpTaGFkb3dTdGF0ZShncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpKSk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIEdyYWRpZW50JiBncmFkaWVudCkKLXsKLSAgICBhdXRvIGJydXNoID0gZ3Jh
ZGllbnQuY3JlYXRlQnJ1c2gobV9wbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwotICAg
IGlmICghYnJ1c2gpCi0gICAgICAgIHJldHVybjsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdp
dGhHcmFkaWVudChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgYnJ1c2guZ2V0KCkpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9w
ZXJhdG9yLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhp
Y3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJh
dG9yID0gc3RhdGUuY29tcG9zaXRlT3BlcmF0b3I7Ci0KLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgY29tcG9zaXRlT3BlcmF0b3Is
IGJsZW5kTW9kZSk7Ci0gICAgRGlyZWN0MkQ6OmZpbGxSZWN0KG1fcGxhdGZvcm1Db250ZXh0LCBy
ZWN0LCBjb2xvciwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSk7Ci0gICAgRGlyZWN0MkQ6
OlN0YXRlOjpzZXRDb21wb3NpdGVPcGVyYXRpb24obV9wbGF0Zm9ybUNvbnRleHQsIHByZXZpb3Vz
T3BlcmF0b3IsIEJsZW5kTW9kZTo6Tm9ybWFsKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIEJsZW5kTW9kZSBibGVuZE1vZGUpCi17Ci0gICAgYXV0byYg
c3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotCi0gICAgQ29tcG9zaXRlT3BlcmF0
b3IgcHJldmlvdXNPcGVyYXRvciA9IHN0YXRlLmNvbXBvc2l0ZU9wZXJhdG9yOwotICAgIERpcmVj
dDJEOjpTdGF0ZTo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG1fcGxhdGZvcm1Db250ZXh0LCBwcmV2
aW91c09wZXJhdG9yLCBibGVuZE1vZGUpOwotCi0gICAgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlIHNo
YWRvd1N0YXRlKHN0YXRlKTsKLSAgICBpZiAocmVjdC5pc1JvdW5kZWQoKSkKLSAgICAgICAgRGly
ZWN0MkQ6OmZpbGxSb3VuZGVkUmVjdChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgY29sb3IsIHNo
YWRvd1N0YXRlKTsKLSAgICBlbHNlCi0gICAgICAgIERpcmVjdDJEOjpmaWxsUmVjdChtX3BsYXRm
b3JtQ29udGV4dCwgcmVjdC5yZWN0KCksIGNvbG9yLCBzaGFkb3dTdGF0ZSk7Ci0KLSAgICBEaXJl
Y3QyRDo6U3RhdGU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihtX3BsYXRmb3JtQ29udGV4dCwgcHJl
dmlvdXNPcGVyYXRvciwgQmxlbmRNb2RlOjpOb3JtYWwpOwotfQotCi12b2lkIEdyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRDo6ZmlsbFJlY3RXaXRoUm91bmRlZEhvbGUoY29uc3QgRmxvYXRSZWN0
JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiByb3VuZGVkSG9sZVJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvcikKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRl
KCk7Ci0KLSAgICBEaXJlY3QyRDo6RmlsbFNvdXJjZSBmaWxsU291cmNlKHN0YXRlLCBncmFwaGlj
c0NvbnRleHQoKSk7Ci0gICAgZmlsbFNvdXJjZS5icnVzaCA9IG1fcGxhdGZvcm1Db250ZXh0LmJy
dXNoV2l0aENvbG9yKGNvbG9yKTsKLQotICAgIERpcmVjdDJEOjpmaWxsUmVjdFdpdGhSb3VuZGVk
SG9sZShtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCwgcm91bmRlZEhvbGVSZWN0LCBmaWxsU291cmNl
LCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKSkpOwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0g
ICAgRGlyZWN0MkQ6OmZpbGxQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBEaXJlY3QyRDo6
RmlsbFNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3Rh
dGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmZpbGxF
bGxpcHNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0
aC5hZGRFbGxpcHNlKHJlY3QpOwotICAgIGZpbGxQYXRoKHBhdGgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGZsb2F0IGxpbmVXaWR0aCkKLXsKLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgp
LnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OnN0cm9rZVJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIGxpbmVXaWR0aCwgRGlyZWN0MkQ6OlN0cm9rZVNvdXJjZShzdGF0ZSwgZ3JhcGhpY3NDb250
ZXh0KCkpLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAg
ICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6
OnN0cm9rZVBhdGgobV9wbGF0Zm9ybUNvbnRleHQsIHBhdGgsIERpcmVjdDJEOjpTdHJva2VTb3Vy
Y2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwgRGlyZWN0MkQ6OlNoYWRvd1N0YXRlKHN0YXRl
KSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBQYXRoIHBhdGg7Ci0gICAgcGF0aC5hZGRF
bGxpcHNlKHJlY3QpOwotICAgIHN0cm9rZVBhdGgocGF0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0SW1wbERpcmVjdDJEOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewot
ICAgIERpcmVjdDJEOjpjbGVhclJlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3QpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZHJhd0dseXBocyhjb25zdCBGb250JiBm
b250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIEZvbnRTbW9vdGhpbmdNb2Rl
IGZvbnRTbW9vdGhpbmcpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGZvbnRTbW9vdGhpbmcpOwotICAg
IGlmICghZm9udC5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8geE9mZnNldCA9IHBvaW50LngoKTsKLSAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IGds
eXBocyhudW1HbHlwaHMpOwotICAgIFZlY3RvcjxmbG9hdD4gaG9yaXpvbnRhbEFkdmFuY2VzKG51
bUdseXBocyk7Ci0gICAgVmVjdG9yPERXUklURV9HTFlQSF9PRkZTRVQ+IGdseXBoT2Zmc2V0cyhu
dW1HbHlwaHMpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytp
KSB7Ci0gICAgICAgIGlmIChpICsgZnJvbSA+PSBnbHlwaEJ1ZmZlci5hZHZhbmNlc0NvdW50KCkp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBhdXRvIGFkdmFuY2UgPSBnbHlwaEJ1ZmZl
ci5hZHZhbmNlcyhpICsgZnJvbSk7Ci0gICAgICAgIGlmICghYWR2YW5jZSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGdseXBoc1tpXSA9IGdseXBoQnVmZmVyLmdseXBoQXQoaSAr
IGZyb20pOwotICAgICAgICBob3Jpem9udGFsQWR2YW5jZXNbaV0gPSBhZHZhbmNlLT53aWR0aCgp
OwotICAgICAgICBnbHlwaE9mZnNldHNbaV0uYWR2YW5jZU9mZnNldCA9IGFkdmFuY2UtPndpZHRo
KCk7Ci0gICAgICAgIGdseXBoT2Zmc2V0c1tpXS5hc2NlbmRlck9mZnNldCA9IGFkdmFuY2UtPmhl
aWdodCgpOwotICAgIH0KLQotICAgIGRvdWJsZSBzeW50aGV0aWNCb2xkT2Zmc2V0ID0gZm9udC5z
eW50aGV0aWNCb2xkT2Zmc2V0KCk7Ci0KLSAgICBhdXRvJiBzdGF0ZSA9IGdyYXBoaWNzQ29udGV4
dCgpLnN0YXRlKCk7Ci0gICAgRGlyZWN0MkQ6OmRyYXdHbHlwaHMobV9wbGF0Zm9ybUNvbnRleHQs
IERpcmVjdDJEOjpGaWxsU291cmNlKHN0YXRlLCBncmFwaGljc0NvbnRleHQoKSksIERpcmVjdDJE
OjpTdHJva2VTb3VyY2Uoc3RhdGUsIGdyYXBoaWNzQ29udGV4dCgpKSwKLSAgICAgICAgRGlyZWN0
MkQ6OlNoYWRvd1N0YXRlKHN0YXRlKSwgcG9pbnQsIGZvbnQsIHN5bnRoZXRpY0JvbGRPZmZzZXQs
IGdseXBocywgaG9yaXpvbnRhbEFkdmFuY2VzLCBnbHlwaE9mZnNldHMsIHhPZmZzZXQsCi0gICAg
ICAgIHN0YXRlLnRleHREcmF3aW5nTW9kZSwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNzLCBzdGF0ZS5z
aGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0NvbG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsRGlyZWN0MkQ6OmRyYXdOYXRpdmVJbWFnZShOYXRpdmVJbWFnZSYgaW1hZ2UsIGNvbnN0
IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCkuc3RhdGUoKTsKLSAgICBEaXJl
Y3QyRDo6ZHJhd05hdGl2ZUltYWdlKG1fcGxhdGZvcm1Db250ZXh0LCBpbWFnZS5wbGF0Zm9ybUlt
YWdlKCkuZ2V0KCksIGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMsIHN0YXRl
LmFscGhhLCBEaXJlY3QyRDo6U2hhZG93U3RhdGUoc3RhdGUpKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdQYXR0ZXJuKChOYXRpdmVJbWFnZSYgaW1hZ2UsIGNv
bnN0IEZsb2F0U2l6ZSYgaW1hZ2VTaXplLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0g
aW1hZ2UucGxhdGZvcm1JbWFnZSgpKQotICAgICAgICBEaXJlY3QyRDo6ZHJhd1BhdHRlcm4obV9w
bGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoc3VyZmFjZSksIEludFNpemUoaW1hZ2VTaXplKSwgZGVz
dFJlY3QsIHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucy5jb21wb3Np
dGVPcGVyYXRvcigpLCBvcHRpb25zLmJsZW5kTW9kZSgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQ6OmRyYXdSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQg
Ym9yZGVyVGhpY2tuZXNzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd1JlY3QobV9wbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IGJvcmRlclRoaWNrbmVzcywgc3RhdGUuZmlsbENvbG9yLCBzdGF0ZS5zdHJva2VTdHlsZSwgc3Rh
dGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd0xpbmUoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dDIpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwotICAg
IERpcmVjdDJEOjpkcmF3TGluZShtX3BsYXRmb3JtQ29udGV4dCwgcG9pbnQxLCBwb2ludDIsIHN0
YXRlLnN0cm9rZVN0eWxlLCBzdGF0ZS5zdHJva2VDb2xvciwgc3RhdGUuc3Ryb2tlVGhpY2tuZXNz
LCBzdGF0ZS5zaG91bGRBbnRpYWxpYXMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgZmxvYXQg
dGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmIHdpZHRocywgYm9vbCBwcmludGluZywgYm9vbCBk
b3VibGVVbmRlcmxpbmVzKQotewotICAgIGF1dG8mIHN0YXRlID0gZ3JhcGhpY3NDb250ZXh0KCku
c3RhdGUoKTsKLSAgICBEaXJlY3QyRDo6ZHJhd0xpbmVzRm9yVGV4dChtX3BsYXRmb3JtQ29udGV4
dCwgcG9pbnQsIHRoaWNrbmVzcywgd2lkdGhzLCBwcmludGluZywgZG91YmxlVW5kZXJsaW5lcywg
c3RhdGUuc3Ryb2tlQ29sb3IpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3Qy
RDo6ZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIERvY3Vt
ZW50TWFya2VyTGluZVN0eWxlIHN0eWxlKQotewotICAgIERpcmVjdDJEOjpkcmF3RG90c0ZvckRv
Y3VtZW50TWFya2VyKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0LCBzdHlsZSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpkcmF3RWxsaXBzZShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCi17Ci0gICAgYXV0byYgc3RhdGUgPSBncmFwaGljc0NvbnRleHQoKS5zdGF0ZSgpOwot
ICAgIERpcmVjdDJEOjpmaWxsRWxsaXBzZSgqcGxhdGZvcm1Db250ZXh0KCksIHJlY3QsIHN0YXRl
LmZpbGxDb2xvciwgc3RhdGUuc3Ryb2tlU3R5bGUsIHN0YXRlLnN0cm9rZUNvbG9yLCBzdGF0ZS5z
dHJva2VUaGlja25lc3MpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
ZHJhd1BhdGgoY29uc3QgUGF0aCYpCi17Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERp
cmVjdDJEOjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9h
dCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVTRURfUEFSQU0ob2Zmc2V0
KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGZs
b2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBVTlVT
RURfUEFSQU0ob2Zmc2V0KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6c2F2ZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnNhdmUobV9w
bGF0Zm9ybUNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6
cmVzdG9yZSgpCi17Ci0gICAgRGlyZWN0MkQ6OnJlc3RvcmUobV9wbGF0Zm9ybUNvbnRleHQpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6dHJhbnNsYXRlKGZsb2F0IHgs
IGZsb2F0IHkpCi17Ci0gICAgRGlyZWN0MkQ6OnRyYW5zbGF0ZShtX3BsYXRmb3JtQ29udGV4dCwg
eCwgeSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpyb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpCi17Ci0gICAgRGlyZWN0MkQ6OnJvdGF0ZShtX3BsYXRmb3JtQ29u
dGV4dCwgYW5nbGVJblJhZGlhbnMpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJl
Y3QyRDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIERpcmVjdDJEOjpzY2Fs
ZShtX3BsYXRmb3JtQ29udGV4dCwgc2l6ZSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1w
bERpcmVjdDJEOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCi17
Ci0gICAgRGlyZWN0MkQ6OmNvbmNhdENUTShtX3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKLXsKLSAgICBEaXJlY3QyRDo6U3RhdGU6OnNldENUTSht
X3BsYXRmb3JtQ29udGV4dCwgdHJhbnNmb3JtKTsKLX0KLQotQWZmaW5lVHJhbnNmb3JtIEdyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Z2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6SW5jbHVkZURl
dmljZVNjYWxlKQotewotICAgIHJldHVybiBEaXJlY3QyRDo6U3RhdGU6OmdldENUTShtX3BsYXRm
b3JtQ29udGV4dCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpiZWdp
blRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgRGlyZWN0MkQ6OmJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXIobV9wbGF0Zm9ybUNvbnRleHQsIG9wYWNpdHkpOwotfQotCi12b2lk
IEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQotewot
ICAgIERpcmVjdDJEOjplbmRUcmFuc3BhcmVuY3lMYXllcihtX3BsYXRmb3JtQ29udGV4dCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcChtX3BsYXRmb3JtQ29udGV4dCwgcmVjdCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBEaXJlY3QyRDo6Y2xpcE91dChtX3BsYXRmb3JtQ29udGV4
dCwgcmVjdCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwT3V0
KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgRGlyZWN0MkQ6OmNsaXBPdXQobV9wbGF0Zm9ybUNv
bnRleHQsIHBhdGgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRDo6Y2xp
cFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCi17Ci0gICAgRGlyZWN0
MkQ6OmNsaXBQYXRoKG1fcGxhdGZvcm1Db250ZXh0LCBwYXRoLCBjbGlwUnVsZSk7Ci19Ci0KLUlu
dFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpjbGlwQm91bmRzKCkKLXsKLSAgICBy
ZXR1cm4gRGlyZWN0MkQ6OlN0YXRlOjpnZXRDbGlwQm91bmRzKG1fcGxhdGZvcm1Db250ZXh0KTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGNvbnRl
eHQgPSAmZ3JhcGhpY3NDb250ZXh0KCk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGltYWdlLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb250ZXh0KSkKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmFwcGx5RGV2aWNl
U2NhbGVGYWN0b3IoZmxvYXQpCi17Ci19Ci0KLUZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHRJbXBs
RGlyZWN0MkQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBHcmFw
aGljc0NvbnRleHQ6OlJvdW5kaW5nTW9kZSkKLXsKLSAgICByZXR1cm4gRGlyZWN0MkQ6OlN0YXRl
Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKG1fcGxhdGZvcm1Db250ZXh0LCByZWN0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNsaXBUb0RyYXdpbmdDb21tYW5kcyhjb25z
dCBGbG9hdFJlY3QmLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIEZ1bmN0aW9uPHZvaWQoR3JhcGhp
Y3NDb250ZXh0Jik+JiYpCi17Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZC4KLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLXZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJEOjpwYWlu
dEZyYW1lRm9yTWVkaWEoTWVkaWFQbGF5ZXImLCBjb25zdCBGbG9hdFJlY3QmKQotewotICAgIC8v
IEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQuCi19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWIwNDUwNTMxNzAzZmI5
MGVlYTdiNDJmMjQ3NGY1OTM2YmQzYmEyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1w
bC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQgZmluYWwgOiBwdWJsaWMg
R3JhcGhpY3NDb250ZXh0SW1wbCB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0SW1wbEZhY3RvcnkgY3JlYXRlRmFjdG9y
eShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBH
cmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dEltcGxGYWN0b3J5IGNyZWF0ZUZhY3Rvcnko
SUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAgIEdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRChH
cmFwaGljc0NvbnRleHQmLCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpOwotICAgIEdyYXBoaWNz
Q29udGV4dEltcGxEaXJlY3QyRChHcmFwaGljc0NvbnRleHQmLCBJRDJEMVJlbmRlclRhcmdldCop
OwotICAgIHZpcnR1YWwgfkdyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRCgpOwotCi0gICAgYm9v
bCBoYXNQbGF0Zm9ybUNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCogcGxhdGZvcm1Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lk
IHVwZGF0ZVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0
U3RhdGU6OlN0YXRlQ2hhbmdlRmxhZ3MpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTaGFkb3co
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0TGluZUNhcChMaW5lQ2FwKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYsIGZsb2F0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldExpbmVKb2luKExpbmVKb2luKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE1pdGVy
TGltaXQoZmxvYXQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IENvbG9yJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBH
cmFkaWVudCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgQ29sb3ImLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiwgY29uc3QgQ29s
b3ImLCBCbGVuZE1vZGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZmlsbFJlY3RXaXRoUm91bmRlZEhv
bGUoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYsIGNvbnN0IENvbG9y
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBmaWxsRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3Ryb2tlUGF0aChjb25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdHJva2VFbGxpcHNl
KGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3R2x5cGhzKGNvbnN0IEZvbnQmLCBj
b25zdCBHbHlwaEJ1ZmZlciYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRmxvYXRQb2ludCYs
IEZvbnRTbW9vdGhpbmdNb2RlKSBvdmVycmlkZTsKLQotICAgIGJvb2wgZHJhd0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0aW5hdGlvbiwgY29uc3QgRmxvYXRS
ZWN0JiBzb3VyY2UsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBkcmF3TmF0aXZlSW1hZ2UoTmF0aXZlSW1hZ2UmLCBjb25zdCBGbG9hdFNpemUmIGltYWdl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oKE5hdGl2ZUltYWdlJiwgY29uc3QgRmxvYXRTaXplJiBpbWFnZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBkcmF3UmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9h
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3TGluZShjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJhd0xpbmVzRm9yVGV4dChjb25zdCBG
bG9hdFBvaW50JiwgZmxvYXQgdGhpY2tuZXNzLCBjb25zdCBEYXNoQXJyYXkmLCBib29sLCBib29s
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdEb3RzRm9yRG9jdW1lbnRNYXJrZXIoY29uc3QgRmxv
YXRSZWN0JiwgRG9jdW1lbnRNYXJrZXJMaW5lU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZHJh
d0VsbGlwc2UoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkcmF3UGF0aChj
b25zdCBQYXRoJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRyYXdGb2N1c1JpbmcoY29uc3QgUGF0
aCYsIGZsb2F0LCBmbG9hdCwgY29uc3QgQ29sb3ImKSBvdmVycmlkZTsKLSAgICB2b2lkIGRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mLCBmbG9hdCwgZmxvYXQsIGNvbnN0IENv
bG9yJikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHNhdmUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
c3RvcmUoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0LCBmbG9hdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2NhbGUo
Y29uc3QgRmxvYXRTaXplJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJikgb3ZlcnJpZGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGdldENUTShHcmFwaGljc0Nv
bnRleHQ6OkluY2x1ZGVEZXZpY2VTY2FsZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoZmxvYXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgY2xpcChjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmLCBXaW5kUnVsZSkgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBjbGlwQm91bmRzKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYsIGNvbnN0
IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xpcFRvRHJhd2luZ0NvbW1hbmRzKGNv
bnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIERlc3RpbmF0aW9uQ29sb3JTcGFjZSwgRnVuY3Rp
b248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mJikgb3ZlcnJpZGU7Ci0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZvaWQgcGFpbnRGcmFtZUZvck1lZGlhKE1lZGlhUGxheWVyJiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0aW5hdGlvbikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5QYWludEZyYW1lRm9yTWVk
aWEoY29uc3QgTWVkaWFQbGF5ZXImKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQot
I2VuZGlmCi0gICAgCi0gICAgdm9pZCBhcHBseURldmljZVNjYWxlRmFjdG9yKGZsb2F0KSBvdmVy
cmlkZTsKLQotICAgIEZsb2F0UmVjdCByb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVj
dCYsIEdyYXBoaWNzQ29udGV4dDo6Um91bmRpbmdNb2RlKSBvdmVycmlkZTsKLQotcHJpdmF0ZToK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fb3duZWRQbGF0
Zm9ybUNvbnRleHQ7Ci0gICAgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIG1fcGxhdGZvcm1Db250
ZXh0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZT4gbV9wcml2YXRlOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAppbmRleCAxZDgwNDIwY2Y3ZWM2Y2Q3
NzVhNjJiYWVhMjJmOTkwNjA3ZWI0Y2JkLi43N2RhZmUzMjBiYjA3MzA4OTAxMDBkN2M0YWYxMDQx
NjM2OWU3MjM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcApAQCAtNTYsMTIgKzU2LDEyIEBAIHN0
YXRpYyB2b2lkIGZpbGxXaXRoQ2xlYXJDb2xvcihIQklUTUFQIGJpdG1hcCkKICNpZiBQTEFURk9S
TShXSU4pCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93
cyhib29sIGluY2x1ZGUpCiB7Ci0gICAgbV9kYXRhLT5tX3Nob3VsZEluY2x1ZGVDaGlsZFdpbmRv
d3MgPSBpbmNsdWRlOworICAgIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX3Nob3VsZElu
Y2x1ZGVDaGlsZFdpbmRvd3MgPSBpbmNsdWRlOwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDo6
c2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+
bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOworICAgIHJldHVybiBkZXByZWNhdGVkUHJpdmF0
ZUNvbnRleHQoKS0+bV9zaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzOwogfQogCiBHcmFwaGljc0Nv
bnRleHQ6OldpbmRvd3NCaXRtYXA6OldpbmRvd3NCaXRtYXAoSERDIGhkYywgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKQEAgLTk1LDE1ICs5NSwxMyBAQCBHcmFwaGljc0NvbnRleHQ6OldpbmRvd3NCaXRt
YXA6On5XaW5kb3dzQml0bWFwKCkKIAogc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dDo6
V2luZG93c0JpdG1hcD4gR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVXaW5kb3dzQml0bWFwKGNvbnN0
IEludFNpemUmIHNpemUpCiB7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1hcD4o
bV9kYXRhLT5tX2hkYywgc2l6ZSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8V2luZG93c0JpdG1h
cD4oZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPm1faGRjLCBzaXplKTsKIH0KICNlbmRpZgog
CiBIREMgR3JhcGhpY3NDb250ZXh0OjpnZXRXaW5kb3dzQ29udGV4dChjb25zdCBJbnRSZWN0JiBk
c3RSZWN0LCBib29sIHN1cHBvcnRBbHBoYUJsZW5kKQogewotICAgIEhEQyBoZGMgPSBudWxscHRy
OwotICAgIGlmICghbV9pbXBsKQotICAgICAgICBoZGMgPSBtX2RhdGEtPm1faGRjOworICAgIEhE
QyBoZGMgPSBkZXByZWNhdGVkUHJpdmF0ZUNvbnRleHQoKS0+bV9oZGM7CiAgICAgLy8gRklYTUU6
IFNob3VsZCBhIGJpdG1hcCBiZSBjcmVhdGVkIGFsc28gd2hlbiBhIHNoYWRvdyBpcyBzZXQ/CiAg
ICAgaWYgKCFoZGMgfHwgaXNJblRyYW5zcGFyZW5jeUxheWVyKCkpIHsKICAgICAgICAgaWYgKGRz
dFJlY3QuaXNFbXB0eSgpKQpAQCAtMTM1LDE3ICsxMzMsMTcgQEAgSERDIEdyYXBoaWNzQ29udGV4
dDo6Z2V0V2luZG93c0NvbnRleHQoY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vbCBzdXBwb3J0
QWxwaGEKICAgICAgICAgcmV0dXJuIGJpdG1hcERDLmxlYWsoKTsKICAgICB9CiAKLSAgICBtX2Rh
dGEtPmZsdXNoKCk7Ci0gICAgbV9kYXRhLT5zYXZlKCk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV9o
ZGM7CisgICAgZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0KCktPmZsdXNoKCk7CisgICAgZGVwcmVj
YXRlZFByaXZhdGVDb250ZXh0KCktPnNhdmUoKTsKKyAgICByZXR1cm4gZGVwcmVjYXRlZFByaXZh
dGVDb250ZXh0KCktPm1faGRjOwogfQogCiBIREMgR3JhcGhpY3NDb250ZXh0OjpoZGMoKSBjb25z
dAogewotICAgIGlmICghbV9kYXRhKQorICAgIGlmICghZGVwcmVjYXRlZFByaXZhdGVDb250ZXh0
KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG1fZGF0YS0+bV9oZGM7
CisgICAgcmV0dXJuIGRlcHJlY2F0ZWRQcml2YXRlQ29udGV4dCgpLT5tX2hkYzsKIH0KIAogI2lm
IFBMQVRGT1JNKFdJTikgJiYgIVVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRXaW4uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNTk5YWY5M2Y0MTliMTk0Yzc3NmI5MWEwYTNjNzljMGNiYzBjNDc2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dFdpbi5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENHLmgiCisjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFdpbiBHcmFwaGlj
c0NvbnRleHRDRworCisjZWxpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHREaXJlY3QyRC5oIgorI2RlZmluZSBHcmFwaGljc0NvbnRleHRXaW4gR3JhcGhpY3NDb250
ZXh0RGlyZWN0MkQKKworI2VsaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uaCIKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0V2luIEdyYXBoaWNzQ29udGV4dENh
aXJvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKaW5kZXgg
YThlZTM1YzUyNzc4MTI3M2Y0N2ZiNWQyZjRiY2RmODhjNDRlMDhjNC4uYWQ5NTU0YzA1MGFlZTJl
MTBlYzE1MzU5ZWI4YjQ4NWQzNTBjZGE0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQuY3BwCkBAIC03OCw3ICs3OCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjCiAgICAg
aWYgKCFwbGF0Zm9ybUNvbnRleHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0
byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4dC5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVt
b3J5KTsKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dERpcmVj
dDJEPihwbGF0Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVy
aW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAgICAgaWYgKCFjb250ZXh0KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ0dXaW4uY3BwCmluZGV4IGY4YTEwZDVjNDM2ZTcwNjA4OTg3MDdiYThiNjU0
NjQxY2UyYmRmNTQuLjUzMzhmZmNjN2I1NjVmNDg3ZDllN2NmYjhmMjY0ZjdlYTEyOTY5ZWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNHV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VDR1dp
bi5jcHAKQEAgLTczLDcgKzczLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0SEJJVE1BUE9mU2l6
ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBhdXRvIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGJtcEluZm8uYm1CaXRzLCBibXBJbmZvLmJt
V2lkdGgsIGJtcEluZm8uYm1IZWlnaHQsCiAgICAgICAgIDgsIGJtcEluZm8uYm1XaWR0aEJ5dGVz
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpKTsKICAgCi0gICAgR3JhcGhpY3NDb250ZXh0IGdj
KGNnQ29udGV4dC5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgZ2MoY2dDb250ZXh0Lmdl
dCgpKTsKIAogICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBCaXRtYXBJbWFnZTo6c2l6ZSgpOwog
ICAgIGlmIChzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQ2Fpcm9XaW4uY3BwCmluZGV4IDJjZWM5OWRjNzI5ZmU2NWUwODU0ZWVlNzJk
ZmM0ZWQ3YWYwOTUyM2MuLmM5ZWIwMGM0ODI0MWY1YmNiZjVjNWUyZDgzYjk0N2NiN2M5NDk3NGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUNh
aXJvV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VDYWlyb1dpbi5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
aCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVk
ZSA8Y2Fpcm8td2luMzIuaD4KQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Z2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQIGJtcCwgY29uc3QgSW50U2l6ZSogc2l6ZSkKICAgICBjYWly
b190KiB0YXJnZXRSZWYgPSBjYWlyb19jcmVhdGUoaW1hZ2UpOwogICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveShpbWFnZSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KHRhcmdldFJlZikpOworICAgIEdyYXBoaWNzQ29udGV4
dENhaXJvIGdjKHRhcmdldFJlZik7CiAKICAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gQml0bWFw
SW1hZ2U6OnNpemUoKTsKICAgICBpZiAoc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKaW5kZXggZDk2MjAzMDBhYmNl
YmE0OTRjYTY2MTUxZDAwMWU1MmYxYzc4OTQ0Yi4uOTEyOWExN2I3NzhhMjQ4MGNkZjNjMGViZmEy
ZDZlNzI3MWE2MDc5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAKQEAgLTIzMiw3ICsyMzIsNyBAQCBib29sIFBhdGg6
OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBGdW5jdGlvbjx2
b2lkKEdyYXBoaWNzQwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dEQyRChzY3JhdGNoUmVuZGVyVGFyZ2V0KCkpOwotICAg
IEdyYXBoaWNzQ29udGV4dCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBo
aWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CisgICAg
R3JhcGhpY3NDb250ZXh0RGlyZWN0MkQgc2NyYXRjaENvbnRleHQoJnNjcmF0Y2hDb250ZXh0RDJE
LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkp
OwogICAgIHN0cm9rZVN0eWxlQXBwbGllcihzY3JhdGNoQ29udGV4dCk7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRApAQCAtMzQyLDcgKzM0Miw3IEBAIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGlu
Z1JlY3QoY29uc3QgRnVuY3Rpb248dm9pZChHcmFwaGljc0NvbnRleHQmKT4mIHN0cm9rCiAgICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEIHNj
cmF0Y2hDb250ZXh0RDJEKHNjcmF0Y2hSZW5kZXJUYXJnZXQoKSk7Ci0gICAgR3JhcGhpY3NDb250
ZXh0IHNjcmF0Y2hDb250ZXh0KCZzY3JhdGNoQ29udGV4dEQyRCwgR3JhcGhpY3NDb250ZXh0OjpC
aXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGljc0NvbnRl
eHREaXJlY3QyRCBzY3JhdGNoQ29udGV4dCgmc2NyYXRjaENvbnRleHREMkQsIEdyYXBoaWNzQ29u
dGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7CiAKICAgICBpZiAo
c3Ryb2tlU3R5bGVBcHBsaWVyKQogICAgICAgICBzdHJva2VTdHlsZUFwcGxpZXIoc2NyYXRjaENv
bnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5k
ZXggNzM1OTMzZjE3MjA4NWI5ZTY2OTNhZDQ0YjJhZjE2MGIzNDBjNGY5OS4uMzYxNjAyZTU3YjI0
ZmIxNmNiZTJhN2E5OWY2ZTVjODBhMzM5ZmFiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC05NCw3ICs5NCw3IEBAIERyYWdJbWFnZVJlZiBjcmVh
dGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltYWdlLCBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uCiAKICAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9
IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5p
dFdpdGhTaXplOmltYWdlU2l6ZV0pOwogICAgIFVJSW1hZ2UgKmltYWdlQ29weSA9IFtyZW5kZXIu
Z2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAq
cmVuZGVyZXJDb250ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRl
cmVyQ29udGV4dC5DR0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0
KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgw
LCBpbWFnZVNpemUuaGVpZ2h0KTsKICAgICAgICAgY29udGV4dC5zY2FsZSh7IGFkanVzdGVkSW1h
Z2VTY2FsZSwgLWFkanVzdGVkSW1hZ2VTY2FsZSB9KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1h
Z2UoKmltYWdlLCBGbG9hdFBvaW50KCksIHsgb3JpZW50YXRpb24gfSk7CkBAIC0xMzYsNyArMTM2
LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYgbGlua0Vs
ZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9w
dE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRo
U2l6ZTppbWFnZVJlY3Quc2l6ZV0pOwogICAgIGF1dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VX
aXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250
ZXh0KSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5D
R0NvbnRleHQpOworICAgICAgICBHcmFwaGljc0NvbnRleHRDRyBjb250ZXh0KHJlbmRlcmVyQ29u
dGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRI
ZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAg
ICAgICAgY29udGV4dC5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChpbWFnZVJlY3Qs
IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKDQpKSwgQ29sb3I6OndoaXRlKTsKQEAgLTIwNCw3ICsy
MDQsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiBm
cmFtZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGljYQogCiAgICAgYXV0byByZW5kZXJlciA9IGFk
b3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdp
dGhTaXplOmltYWdlUmVjdC5zaXplKCldKTsKICAgICByZXR1cm4gW3JlbmRlcmVyIGltYWdlV2l0
aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4
dCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dD
b250ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRl
eHQuQ0dDb250ZXh0KTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBjb250ZXh0IGZsaXAgaGVyZSBz
aG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYW5kIHN1Z2dlc3RzIHRoYXQgc29tZXdoZXJlIGVsc2Ug
aW4gdGhlIHJlZ3VsYXIKICAgICAgICAgLy8gZHJhZyBpbml0aWF0aW9uIGZsb3csIHdlIHVubmVj
ZXNzYXJpbHkgZmxpcCB0aGUgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgY29udGV4dC50cmFu
c2xhdGUoMCwgaW1hZ2VSZWN0LmhlaWdodCgpKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIGJvbwogICAgIGF1dG8mIGltYWdlID0gKnRleHRJbmRpY2F0b3ItPmNvbnRl
bnRJbWFnZSgpOwogICAgIGF1dG8gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhp
Y3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2Uuc2l6ZSgpXSk7CiAg
ICAgVUlJbWFnZSAqZmluYWxJbWFnZSA9IFtyZW5kZXIuZ2V0KCkgaW1hZ2VXaXRoQWN0aW9uczpb
JmltYWdlXShVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkg
ewotICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChyZW5kZXJlckNvbnRleHQuQ0dDb250
ZXh0KTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4dChyZW5kZXJlckNvbnRleHQu
Q0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIEZsb2F0UG9pbnQo
KSk7CiAgICAgfV07CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFJlY3QmIGVsZW1l
bgogCiAgICAgYXV0byByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdl
UmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CiAgICAg
VUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1h
Z2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewotICAgICAgICBHcmFwaGljc0Nv
bnRleHQgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0Q0cgY29udGV4dCB7IHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQgfTsKICAg
ICAgICAgY29udGV4dC50cmFuc2xhdGUoMCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwog
ICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZmlsbFJv
dW5kZWRSZWN0KHN3YXRjaCwgY29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vY29jb2EvQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJDb2Nv
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAppbmRleCAwOWZhZWVlZTllYWNiNTAzMmYx
YTc5ZDczYmEwMThhOWI2NTViZDJiLi41ZWMzOGU2NDFiZDZlZDAzYWQwNTI1NjFkMDRjOWNkYWZk
ZmI0MTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9j
b2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlckNvY29hLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9jb2NvYS9BdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlckNvY29hLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5oIgogI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkxpYldlYlJUQ0F1ZGlvTW9kdWxlLmgiCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25I
YW5kbGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcAppbmRleCBkMDIyZTdlMTkxZGFjODE2MzZkNTI5NTFk
NDBkNTNiODg3M2Y1NTA5Li5hYzZlMjQ0ZDA0MWU5ZmU2YmY2MmYxZTYxNWFmOTllNmNmMjUwMmU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2luLmNwcApAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZv
bnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFdpbi5oIgogI2luY2x1ZGUgIkhXbmREQy5oIgogI2luY2x1ZGUgIkltYWdl
LmgiCiAjaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCkBAIC0xODYsNyArMTg3LDcgQEAgRHJh
Z0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGluTGFiZWwsIFQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAogICAgIDo6
U2VsZWN0T2JqZWN0KHdvcmtpbmdEQy5nZXQoKSwgaW1hZ2UuZ2V0KCkpOwotICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KGNvbnRleHRSZWYpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBjb250
ZXh0KGNvbnRleHRSZWYpOwogICAgIC8vIE9uIE1hYyBhbHBoYSBpcyB7MC43LCAwLjcsIDAuNywg
MC44fSwgaG93ZXZlciB3ZSBjYW4ndCBjb250cm9sIGFscGhhCiAgICAgLy8gZm9yIGRyYWcgaW1h
Z2VzIG9uIHdpbiwgc28gd2UgdXNlIDEKICAgICBjb25zdGV4cHIgYXV0byBiYWNrZ3JvdW5kQ29s
b3IgPSBTUkdCQTx1aW50OF90PiB7IDE0MCwgMTQwLCAxNDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKaW5kZXggOTM5YTc5YWVmM2JiZjgyMDc2NmI5
ZmVmN2FiNmIxM2FmODM0NzJlNy4uMjQ4ZTNkYzFlMzgyMTI4M2FlMDNkYjJlMzIyY2YxNWY2Y2Zi
YWIzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHRElV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRXaW4uaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIV25k
REMuaCIKICNpbmNsdWRlICJIb3N0V2luZG93LmgiCkBAIC02MDksNyArNjEwLDcgQEAgdm9pZCBQ
b3B1cE1lbnVXaW46OnBhaW50KGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIEhEQyBoZGMpCiAg
ICAgICAgIDo6U2VsZWN0T2JqZWN0KG1fREMuZ2V0KCksIG1fYm1wLmdldCgpKTsKICAgICB9CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dChtX0RDLmdldCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRXaW4gY29udGV4dChtX0RDLmdldCgpKTsKIAogICAgIC8vIGxpc3RSZWN0IGlzIHRoZSBk
YW1hZ2VSZWN0IHRyYW5zbGF0ZWQgaW50byB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGVudGlyZSBt
ZW51IGxpc3QgKHdoaWNoIGlzIGxpc3RTaXplICogbV9pdGVtSGVpZ2h0IHBpeGVscyB0YWxsKQog
ICAgIEludFJlY3QgbGlzdFJlY3QgPSBkYW1hZ2VSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbnRlbnRmdWxQYWludENoZWNrZXIuY3BwCmluZGV4IGRhOTUyYmY2YjNj
ZmEyZmI2YzA5YWYwZDJkNjlmNDYzZDc2YWVjMjYuLjFiMTgyYTFkMzZiN2NmYWFhMGIxNjlkMGQ4
Yzg1NDM1ZjQzYjc2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db250
ZW50ZnVsUGFpbnRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29u
dGVudGZ1bFBhaW50Q2hlY2tlci5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk51bGxH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM4LDcgKzM5LDcgQEAgYm9vbCBDb250ZW50ZnVsUGFpbnRDaGVja2VyOjpx
dWFsaWZpZXNGb3JDb250ZW50ZnVsUGFpbnQoRnJhbWVWaWV3JiBmcmFtZVZpZXcpCiAgICAgZnJh
bWVWaWV3LnNldFBhaW50QmVoYXZpb3IoUGFpbnRCZWhhdmlvcjo6RmxhdHRlbkNvbXBvc2l0aW5n
TGF5ZXJzKTsKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHModHJ1ZSk7CiAK
LSAgICBHcmFwaGljc0NvbnRleHQgY2hlY2tlckNvbnRleHQoR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CisgICAgTnVs
bEdyYXBoaWNzQ29udGV4dCBjaGVja2VyQ29udGV4dChOdWxsR3JhcGhpY3NDb250ZXh0OjpQYWlu
dEludmFsaWRhdGlvblJlYXNvbnM6OkRldGVjdGluZ0NvbnRlbnRmdWxQYWludCk7CiAgICAgZnJh
bWVWaWV3LnBhaW50KGNoZWNrZXJDb250ZXh0LCBmcmFtZVZpZXcucmVuZGVyVmlldygpLT5kb2N1
bWVudFJlY3QoKSk7CiAKICAgICBmcmFtZVZpZXcuc2V0UGFpbnRzRW50aXJlQ29udGVudHMob2xk
RW50aXJlQ29udGVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAKaW5kZXggMDI1NDIyNWJiMzEzOGMzODJjMzY4YjA5NDhkNjVhZTZm
YjBiN2MwYi4uMTQzYTM1OWNiYWU4OGUzZTNjNmIzYzZhN2M3MzViY2ZmYzU1ZTRlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBA
IC02OTAsMTAgKzY5MCw3IEBAIHN0YXRpYyB2b2lkIGFwcGx5Qm94U2hhZG93Rm9yQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IFJlbmRlclN0CiAgICAgICAgIGJveFNo
YWRvdyA9IGJveFNoYWRvdy0+bmV4dCgpOwogCiAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldChi
b3hTaGFkb3ctPngoKSwgYm94U2hhZG93LT55KCkpOwotICAgIGlmICghYm94U2hhZG93LT5pc1dl
YmtpdEJveFNoYWRvdygpKQotICAgICAgICBjb250ZXh0LnNldFNoYWRvdyhzaGFkb3dPZmZzZXQs
IGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBseWluZ0NvbG9yRmlsdGVyKGJv
eFNoYWRvdy0+Y29sb3IoKSkpOwotICAgIGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRMZWdhY3lT
aGFkb3coc2hhZG93T2Zmc2V0LCBib3hTaGFkb3ctPnJhZGl1cygpLCBzdHlsZS5jb2xvckJ5QXBw
bHlpbmdDb2xvckZpbHRlcihib3hTaGFkb3ctPmNvbG9yKCkpKTsKKyAgICBjb250ZXh0LnNldFNo
YWRvdyhzaGFkb3dPZmZzZXQsIGJveFNoYWRvdy0+cmFkaXVzKCksIHN0eWxlLmNvbG9yQnlBcHBs
eWluZ0NvbG9yRmlsdGVyKGJveFNoYWRvdy0+Y29sb3IoKSksIGJveFNoYWRvdy0+aXNXZWJraXRC
b3hTaGFkb3coKSA/IFNoYWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6
OkRlZmF1bHQpOwogfQogCiBJbnRlcnBvbGF0aW9uUXVhbGl0eSBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y2hvb3NlSW50ZXJwb2xhdGlvblF1YWxpdHkoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBJ
bWFnZSYgaW1hZ2UsIGNvbnN0IHZvaWQqIGxheWVyLCBjb25zdCBMYXlvdXRTaXplJiBzaXplKQpA
QCAtMjQzOSwxMCArMjQzNiw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm94
U2hhZG93KGNvbnN0IFBhaW50SW5mbyYgaW5mbywgY29uc3QgTGF5b3V0UmVjCiAgICAgICAgICAg
ICBGbG9hdFBvaW50IHNuYXBwZWRTaGFkb3dPcmlnaW4gPSBGbG9hdFBvaW50KHJvdW5kVG9EZXZp
Y2VQaXhlbChzaGFkb3dSZWN0T3JpZ2luLngoKSwgZGV2aWNlU2NhbGVGYWN0b3IpLCByb3VuZFRv
RGV2aWNlUGl4ZWwoc2hhZG93UmVjdE9yaWdpbi55KCksIGRldmljZVNjYWxlRmFjdG9yKSk7CiAg
ICAgICAgICAgICBGbG9hdFNpemUgc25hcHBlZFNoYWRvd09mZnNldCA9IHNuYXBwZWRTaGFkb3dP
cmlnaW4gLSBwaXhlbFNuYXBwZWRGaWxsUmVjdC5yZWN0KCkubG9jYXRpb24oKTsKIAotICAgICAg
ICAgICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBj
b250ZXh0LnNldExlZ2FjeVNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMs
IHNoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250ZXh0
LnNldFNoYWRvdyhzbmFwcGVkU2hhZG93T2Zmc2V0LCBzaGFkb3dSYWRpdXMsIHNoYWRvd0NvbG9y
KTsKKyAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93KHNuYXBwZWRTaGFkb3dPZmZzZXQsIHNo
YWRvd1JhZGl1cywgc2hhZG93Q29sb3IsIHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/IFNo
YWRvd1JhZGl1c01vZGU6OkxlZ2FjeSA6IFNoYWRvd1JhZGl1c01vZGU6OkRlZmF1bHQpOwogCiAg
ICAgICAgICAgICBpZiAoaGFzQm9yZGVyUmFkaXVzKSB7CiAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGJveCBpcyBvcGFxdWUsIGl0IGlzIHVubmVjZXNzYXJ5IHRvIGNsaXAgaXQgb3V0LiBIb3dl
dmVyLCBkb2luZyBzbyBzYXZlcyB0aW1lCkBAIC0yNTQzLDExICsyNTM3LDcgQEAgdm9pZCBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBj
b25zdCBMYXlvdXRSZWMKICAgICAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGV4dHJhT2Zmc2V0
KTsKICAgICAgICAgICAgIHNoYWRvd09mZnNldCAtPSBleHRyYU9mZnNldDsKIAotICAgICAgICAg
ICAgaWYgKHNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSkKLSAgICAgICAgICAgICAgICBjb250
ZXh0LnNldExlZ2FjeVNoYWRvdyhzaGFkb3dPZmZzZXQsIHNoYWRvd1JhZGl1cywgc2hhZG93Q29s
b3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0U2hhZG93
KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xvcik7Ci0KKyAgICAgICAgICAg
IGNvbnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93UmFkaXVzLCBzaGFkb3dDb2xv
ciwgc2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gU2hhZG93UmFkaXVzTW9kZTo6TGVnYWN5
IDogU2hhZG93UmFkaXVzTW9kZTo6RGVmYXVsdCk7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxS
ZWN0V2l0aFJvdW5kZWRIb2xlKHBpeGVsU25hcHBlZE91dGVyUmVjdCwgcGl4ZWxTbmFwcGVkSG9s
ZVJlY3QsIGZpbGxDb2xvcik7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDQ5YjcyZDE0YzNiZDY2MjYy
MWU3NmQ2N2NjNjZlZTVhMjVjNzRkZmUuLjI5YWExOTA2Y2FkMmZlOWI0OGZmZTI5YjQyOGJmMTNj
YzYwNTdjNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJBbmNlc3RvckNsaXBw
aW5nU3RhY2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTW9kZWwuaCIKKyNp
bmNsdWRlICJOdWxsR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBlcmZvcm1hbmNlTG9nZ2luZ0NsaWVudC5oIgogI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNl
LmgiCkBAIC0xNzg5LDcgKzE3OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRl
RXZlbnRSZWdpb24oKQogICAgIH07CiAKICAgICBhdXRvIHVwZGF0ZUV2ZW50UmVnaW9uRm9yTGF5
ZXIgPSBbJl0oR3JhcGhpY3NMYXllciYgZ3JhcGhpY3NMYXllcikgewotICAgICAgICBHcmFwaGlj
c0NvbnRleHQgbnVsbENvbnRleHQobnVsbHB0cik7CisgICAgICAgIE51bGxHcmFwaGljc0NvbnRl
eHQgbnVsbENvbnRleHQoTnVsbEdyYXBoaWNzQ29udGV4dDo6UGFpbnRJbnZhbGlkYXRpb25SZWFz
b25zOjpOb25lKTsKICAgICAgICAgRXZlbnRSZWdpb24gZXZlbnRSZWdpb247CiAjaWYgRU5BQkxF
KEVESVRBQkxFX1JFR0lPTikKICAgICAgICAgaWYgKHJlbmRlcmVyKCkucGFnZSgpLnNob3VsZEJ1
aWxkRWRpdGFibGVSZWdpb24oKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2Nh
aXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL2NhaXJv
L1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcAppbmRleCA5Y2VhNWZhMzRjNGE2YzA4N2ZkZTI4YzI1
MmEzMWYxNTU4ZGU2MWZmLi4xNjE3N2MwMDA3MWVlODI2ZTgwOTZmM2VkZjliODJiYjhjODUwZmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jYWlyby9TaGFyZWFibGVCaXRtYXBD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFw
Q2Fpcm8uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9CaXRtYXBJbWFn
ZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9PcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9DYWlyb1V0aWxpdGllcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KICNpbmNsdWRlIDxXZWJD
b3JlL05vdEltcGxlbWVudGVkLmg+CiAKQEAgLTYwLDcgKzYwLDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFwaGljc0NvbnRleHQo
KQogewogICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlID0gY3JlYXRlQ2Fpcm9TdXJm
YWNlKCk7CiAgICAgUmVmUHRyPGNhaXJvX3Q+IGJpdG1hcENvbnRleHQgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShiaXRtYXBDb250
ZXh0LmdldCgpKSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Q2Fpcm8+
KGJpdG1hcENvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9T
aGFyZWFibGVCaXRtYXBDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9jZy9TaGFyZWFibGVC
aXRtYXBDRy5jcHAKaW5kZXggMzZkYzI0YjgyZmRlZWMxNTU1MTA0NzY5OTRlODdkYjFkNzY2MmRh
Ny4uMWQwNmY0NmMyZjM0NmI5MWM0ODE3MmExMjZlNzY5OWY5ZWI0MTRkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TaGFyZWQvY2cvU2hhcmVhYmxlQml0bWFwQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL2NnL1NoYXJlYWJsZUJpdG1hcENHLmNwcApAQCAtMTA3LDcgKzEwNyw3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0KCkKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oYml0bWFwQ29u
dGV4dC5nZXQoKSwgMCwgbV9zaXplLmhlaWdodCgpKTsKICAgICBDR0NvbnRleHRTY2FsZUNUTShi
aXRtYXBDb250ZXh0LmdldCgpLCAxLCAtMSk7CiAKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KGJpdG1hcENvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dENHPihiaXRtYXBDb250ZXh0LmdldCgpKTsKIH0KIAogdm9pZCBTaGFy
ZWFibGVCaXRtYXA6OnBhaW50KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSW50UG9pbnQmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3Bw
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvd2luL1NoYXJlYWJsZUJpdG1hcERpcmVjdDJELmNwcApp
bmRleCAwOGY2ZmI1MmM4MGMzN2NlZGQxNmZlMDcwMmE1NGJiYjU4OGQ3ZWYzLi5jZDE1OGYwY2I2
NDc2YmQyNDhmOTdjMDA2OTY1OWI0ZjFiZjY0ZTAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC93aW4vU2hhcmVhYmxlQml0bWFwRGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL3dpbi9TaGFyZWFibGVCaXRtYXBEaXJlY3QyRC5jcHAKQEAgLTM0LDcgKzM0LDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0RJQlBpeGVsRGF0YS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
RGlyZWN0MkRPcGVyYXRpb25zLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaXJlY3QyRFV0aWxpdGll
cy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbERpcmVjdDJELmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMV8xLmg+CkBAIC0xMDQsNyArMTA0LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVHcmFw
aGljc0NvbnRleHQoKQogICAgIGlmICghc3VyZmFjZUNvbnRleHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGlj
c0NvbnRleHRJbXBsRGlyZWN0MkQ6OmNyZWF0ZUZhY3Rvcnkoc3VyZmFjZUNvbnRleHQuZ2V0KCkp
KTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHREaXJlY3QyRD4oc3VyZmFj
ZUNvbnRleHQuZ2V0KCkpOwogfQogCiB2b2lkIFNoYXJlYWJsZUJpdG1hcDo6cGFpbnQoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgZHN0UG9pbnQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9C
YWNraW5nU3RvcmVDYWlyby5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9jYWlyby9CYWNr
aW5nU3RvcmVDYWlyby5jcHAKaW5kZXggZGMwYTcwYjg4MjRhZmRjN2VjM2RkMWY2OWY0ZDliNTE5
NDI5MjRmNi4uNGY3OGI1ZWI1Y2RiNTFmMmViZmNhZmY2NGVjZDE5YjFlNjMwYWQ5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2NhaXJvL0JhY2tpbmdTdG9yZUNhaXJvLmNw
cApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ2Fpcm9VdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q2Fpcm8uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZWZQdHJDYWlyby5oPgogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC04NCw3ICs4NCw3IEBAIHZv
aWQgQmFja2luZ1N0b3JlOjppbmNvcnBvcmF0ZVVwZGF0ZShTaGFyZWFibGVCaXRtYXAqIGJpdG1h
cCwgY29uc3QgVXBkYXRlSW5mbyYKICAgICAvLyBQYWludCBhbGwgdXBkYXRlIHJlY3RzLgogICAg
IEludFBvaW50IHVwZGF0ZVJlY3RMb2NhdGlvbiA9IHVwZGF0ZUluZm8udXBkYXRlUmVjdEJvdW5k
cy5sb2NhdGlvbigpOwogICAgIFJlZlB0cjxjYWlyb190PiBjYWlyb0NvbnRleHQgPSBhZG9wdFJl
ZihjYWlyb19jcmVhdGUobV9iYWNrZW5kLT5zdXJmYWNlKCkpKTsKLSAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9y
eShjYWlyb0NvbnRleHQuZ2V0KCkpKTsKKyAgICBHcmFwaGljc0NvbnRleHRDYWlybyBncmFwaGlj
c0NvbnRleHQoY2Fpcm9Db250ZXh0LmdldCgpKTsKIAogICAgIC8vIFdoZW4gbV93ZWJQYWdlUHJv
eHkuZHJhd3NCYWNrZ3JvdW5kKCkgaXMgZmFsc2UsIGJpdG1hcCBjb250YWlucyB0cmFuc3BhcmVu
dCBwYXJ0cyBhcyBhIGJhY2tncm91bmQgb2YgdGhlIHdlYnBhZ2UuCiAgICAgLy8gRm9yIHN1Y2gg
Y2FzZSwgYml0bWFwIG11c3QgYmUgZHJhd24gdXNpbmcgQ29tcG9zaXRlT3BlcmF0b3I6OkNvcHkg
dG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBzdXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1dLUHJpbnRpbmdWaWV3Lm1tCmluZGV4IGYxOGJhOGYwMWIyNmRlM2ZkM2NkZmIw
MjgxMjg1Y2YwZDRhNjY2OWYuLmQwM2U2NDM0YjFhYjJmYmQ1ZTU1NDMyOTY4YjNlOWY1NjU5MmJh
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9XS1ByaW50aW5nVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvV0tQcmludGluZ1ZpZXcubW0K
QEAgLTMwLDE1ICszMCwxNiBAQAogCiAjaW1wb3J0ICJBUElEYXRhLmgiCiAjaW1wb3J0ICJMb2dn
aW5nLmgiCi0jaW1wb3J0ICJQREZLaXRTb2Z0TGluay5oIgogI2ltcG9ydCAiUHJpbnRJbmZvLmgi
CiAjaW1wb3J0ICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eS5oIgog
I2ltcG9ydCA8UXVhcnR6L1F1YXJ0ei5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdl
YkNvcmUvTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZS5oPgogI2ltcG9ydCA8d3RmL1J1bkxv
b3AuaD4KIAorI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKKwogTlNTdHJpbmcgKiBjb25zdCBX
ZWJLaXRPcmlnaW5hbFRvcFByaW50aW5nTWFyZ2luS2V5ID0gQCJXZWJLaXRPcmlnaW5hbFRvcE1h
cmdpbiI7CiBOU1N0cmluZyAqIGNvbnN0IFdlYktpdE9yaWdpbmFsQm90dG9tUHJpbnRpbmdNYXJn
aW5LZXkgPSBAIldlYktpdE9yaWdpbmFsQm90dG9tTWFyZ2luIjsKIApAQCAtNTU1LDcgKzU1Niw3
IEBAIC0gKHZvaWQpX2RyYXdQcmV2aWV3OihOU1JlY3QpbnNSZWN0CiAKICAgICBSZWZQdHI8V2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IHBhZ2VQcmV2aWV3SXRlcmF0b3ItPnZhbHVl
OwogCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBDR0Nv
bnRleHRdKTsKICAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIoY29udGV4dCk7CiAKICAgICBiaXRtYXAtPnBhaW50KGNvbnRleHQsIF93ZWJGcmFtZS0+cGFn
ZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpLCBXZWJDb3JlOjpJbnRQb2ludChuc1JlY3Qub3JpZ2lu
KSwgYml0bWFwLT5ib3VuZHMoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy93aW4vQmFja2luZ1N0b3JlRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
d2luL0JhY2tpbmdTdG9yZURpcmVjdDJELmNwcAppbmRleCBhYmRhYTZlYjJjNTdkZTNlZTY2YzJj
M2ZmMTY0YTMzNGIxMjQxNWQ5Li45MGI0MjRhY2UyOTgzN2QwNWI5NzA2ZDAwNDg1ZDk1ZjdlMWUy
ZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vQmFja2luZ1N0b3Jl
RGlyZWN0MkQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9CYWNraW5nU3Rv
cmVEaXJlY3QyRC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0JhY2tp
bmdTdG9yZUJhY2tlbmREaXJlY3QyREltcGwuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvRGlyZWN0MkRVdGlsaXRpZXMuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dEltcGxEaXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0RGlyZWN0MkQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdp
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4u
Y3BwCmluZGV4IDNjYWNiOWFlYzY0Yzg5YTUxMjA4NzAwMGQyNmE1N2UwNmUxODFlMzQuLmU0YzEx
ZjNlYjA4NjI5ZjYxM2QzMWI4NDczOTkzM2UyOTIzMWIxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcApAQCAtMzUsNiAr
MzUsNyBAQAogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0JpdG1hcElu
Zm8uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dESVV0aWxpdGllcy5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IV25kREMuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
U2Nyb2xsYmFyVGhlbWUuaD4KQEAgLTg1Miw3ICs4NTMsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogICAgICAg
ICA6OlNlbGVjdE9iamVjdChtX0RDLmdldCgpLCBtX2JtcC5nZXQoKSk7CiAgICAgfQogCi0gICAg
R3JhcGhpY3NDb250ZXh0IGNvbnRleHQobV9EQy5nZXQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0
V2luIGNvbnRleHQobV9EQy5nZXQoKSk7CiAjZWxzZQogICAgIENPTVB0cjxJRDNEMTFUZXh0dXJl
MkQ+IGJhY2tCdWZmZXI7IAogICAgIEhSRVNVTFQgaHIgPSBtX3N3YXBDaGFpbi0+R2V0QnVmZmVy
KDAsIF9fdXVpZG9mKElEM0QxMVRleHR1cmUyRCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigm
YmFja0J1ZmZlcikpOyAKQEAgLTg2Nyw3ICs4NjgsNyBAQCB2b2lkIFdlYlBvcHVwTWVudVByb3h5
V2luOjpwYWludChjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBIREMgaGRjKQogCiAgICAgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQgcGxhdGZvcm1Db250ZXh0KHJlbmRlclRhcmdldC5nZXQoKSk7
CiAgICAgcGxhdGZvcm1Db250ZXh0LnNldEQzRERldmljZShtX2QzZERldmljZS5nZXQoKSk7Ci0g
ICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoJnBsYXRmb3JtQ29udGV4dCwgR3JhcGhpY3NDb250
ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBHcmFwaGlj
c0NvbnRleHRXaW4gY29udGV4dCgmcGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJp
dG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwogI2VuZGlmCiAKICAgICBJbnRS
ZWN0IHRyYW5zbGF0ZWREYW1hZ2VSZWN0ID0gZGFtYWdlUmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDA0YTQwZGYwMmU0
NzQ0OGY1Yjk4Yzg5ZGY0ODViNzA2ZjBiZTAzN2MuLmU0N2E0NGNjNDdlOTkxZGVlOThmOWI0YTM2
YzVhMmNkZjZmMGQwNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1BsdWdp
bnMvUERGL1BERlBsdWdpbi5tbQpAQCAtMzUsNyArMzUsNiBAQAogI2ltcG9ydCAiTG9nZ2luZy5o
IgogI2ltcG9ydCAiUERGQW5ub3RhdGlvblRleHRXaWRnZXREZXRhaWxzLmgiCiAjaW1wb3J0ICJQ
REZDb250ZXh0TWVudS5oIgotI2ltcG9ydCAiUERGS2l0U29mdExpbmsuaCIKICNpbXBvcnQgIlBE
RkxheWVyQ29udHJvbGxlclNQSS5oIgogI2ltcG9ydCAiUERGUGx1Z2luQW5ub3RhdGlvbi5oIgog
I2ltcG9ydCAiUERGUGx1Z2luUGFzc3dvcmRGaWVsZC5oIgpAQCAtNzIsNyArNzEsNyBAQAogI2lt
cG9ydCA8V2ViQ29yZS9GcmFtZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3ND
b250ZXh0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0hUTUxCb2R5RWxlbWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRWxlbWVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRm9ybUVsZW1lbnQuaD4KQEAgLTEwNiw2ICsxMDUs
OCBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNvY29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKKyNpbXBvcnQgIlBERktpdFNvZnRMaW5rLmgiCisKICNpZiBIQVZF
KElOQ1JFTUVOVEFMX1BERl9BUElTKQogQGludGVyZmFjZSBQREZEb2N1bWVudCAoKQogLShpbnN0
YW5jZXR5cGUpaW5pdFdpdGhQcm92aWRlcjooQ0dEYXRhUHJvdmlkZXJSZWYpZGF0YVByb3ZpZGVy
OwpAQCAtMTk0NCw3ICsxOTQ1LDcgQEAgdm9pZCBQREZQbHVnaW46OnBhaW50Q29udHJvbEZvckxh
eWVySW5Db250ZXh0KENBTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGUKICAgICBMb2Nh
bERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShwYWdlLT51c2VEYXJrQXBw
ZWFyYW5jZSgpKTsKICNlbmRpZgogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjb250ZXh0KTsKKyAgICBHcmFwaGljc0NvbnRleHRDRyBncmFwaGljc0NvbnRleHQoY29udGV4
dCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29u
dGV4dCk7CiAKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbQppbmRleCAxNjI1M2M4ODcwNzMwNzc4MDAwZDg1M2Q0ZGRmZDMyMjc5ZDgxODll
Li5mN2JkYjk1NzA0ZGM0NTYwMjM1OTI2MzgxZGY2MDRmMDI4MGQwMTBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1t
CkBAIC00Miw2ICs0Miw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0V2ZW50TmFtZXMuaD4KICNpbXBv
cnQgPFdlYkNvcmUvRm9jdXNDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmll
dy5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxPTGlzdEVsZW1lbnQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTFVMaXN0RWxlbWVudC5oPgpAQCAtMzE3LDcgKzMxOCw3
IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFdlYlBhZ2U6OnBkZlNuYXBzaG90QXRTaXplKEludFJl
Y3QgcmVjdCwgSW50U2l6ZSBiaXRtYXBTaXplCiAKICAgICAgICAgQ0dQREZDb250ZXh0QmVnaW5Q
YWdlKHBkZkNvbnRleHQuZ2V0KCksIGRpY3Rpb25hcnkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBncmFwaGljc0NvbnRleHQgeyBwZGZDb250ZXh0LmdldCgpIH07CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dENHIGdyYXBoaWNzQ29udGV4dCB7IHBkZkNvbnRleHQuZ2V0KCkgfTsKICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC50cmFuc2xhdGUoMCwgLWJpdG1hcFNpemUuaGVpZ2h0KCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdp
bmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0RyYXdpbmdBcmVhQ29vcmRpbmF0ZWRHcmFwaGlj
cy5jcHAKaW5kZXggODcxNmRmNDliZDE5MmQwMTA1MTE2YjZiZGIwYWI2OTYzMTg3N2JiOC4uZTk5
NDU3Yzc0MjMyMWI1M2UxZjZlYTVkYzkwZGRlYTg2NTIzZWI4NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJl
YUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvRHJhd2luZ0FyZWFDb29yZGluYXRlZEdyYXBoaWNz
LmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvU2V0dGluZ3MuaD4KIAog
I2lmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dEltcGxE
aXJlY3QyRC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmg+CiAjaW5jbHVkZSA8
ZDJkMS5oPgogI2luY2x1ZGUgPGQzZDExXzEuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMGE3NmU3MjlmZTAzN2I1MWE3MzVhNmQyNzdlNmE2
MzUxNzQxYzVjMy4uOTY4MmYwOTNhZTBkNDRjZGVjODY5OTFjZDA0OWY3MmZiZWU3MTc4YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTM3Miw2
ICszNzIsMTEgQEAKICNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc0RlZmF1bHRWYWx1ZXNJT1MuaCIK
ICNlbmRpZgogCisjaWYgVVNFKENHKQorLy8gRklYTUU6IE1vdmUgdGhlIENHLXNwZWNpZmljIFBE
RiBwYWludGluZyBjb2RlIG91dCBvZiBXZWJQYWdlLmNwcC4KKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dENHLmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgSlNDOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC01Mzc1LDcgKzUzODAs
NyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1RvUERGSW1wbChGcmFtZUlkZW50aWZpZXIgZnJh
bWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludAogICAgICAgICAgICAgICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IHBhZ2VJbmZvID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGVNdXRh
YmxlKDAsIDAsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKICAgICAgICAgICAgICAgICBDR1BERkNvbnRleHRCZWdpblBh
Z2UoY29udGV4dC5nZXQoKSwgcGFnZUluZm8uZ2V0KCkpOwogCi0gICAgICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGN0eChjb250ZXh0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHRDRyBjdHgoY29udGV4dC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY3R4LnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOwogICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUoMCwgLW1f
cHJpbnRDb250ZXh0LT5wYWdlUmVjdChwYWdlKS5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAg
bV9wcmludENvbnRleHQtPnNwb29sUGFnZShjdHgsIHBhZ2UsIG1fcHJpbnRDb250ZXh0LT5wYWdl
UmVjdChwYWdlKS53aWR0aCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCmluZGV4IGRlMWYw
NmRkOGFkYThmZGZmYzVhMDk4NzM5YzRhZWFiOWJiMzNhODUuLjM5OWIxZTgwYTNkODRkMWQwZDMw
MDk2YWM0NDY1MGFjOThmNTgxNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAtMzQs
NyArMzQsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnRMb2FkZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0ZyYW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlci5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmg+CisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDYWlyby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBXZWJQcmlu
dE9wZXJhdGlvbkd0azo6cmVuZGVyUGFnZShpbnQgcGFnZU51bWJlcikKICAgICBwcmVwYXJlQ29u
dGV4dFRvRHJhdygpOwogCiAgICAgZG91YmxlIHBhZ2VXaWR0aCA9IGd0a19wYWdlX3NldHVwX2dl
dF9wYWdlX3dpZHRoKG1fcGFnZVNldHVwLmdldCgpLCBHVEtfVU5JVF9JTkNIKSAqIG1feERQSTsK
LSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2NhaXJvQ29udGV4dC5nZXQo
KSkpOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dENhaXJvIGdyYXBoaWNzQ29udGV4dCht
X2NhaXJvQ29udGV4dC5nZXQoKSk7CiAgICAgbV9wcmludENvbnRleHQtPnNwb29sUGFnZShncmFw
aGljc0NvbnRleHQsIHBhZ2VOdW1iZXIsIHBhZ2VXaWR0aCAvIG1fc2NhbGUpOwogCiAgICAgY2Fp
cm9fcmVzdG9yZShtX2NhaXJvQ29udGV4dC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQppbmRleCBkNTQxYzRjMDRmMmQ3NWQw
NmJlZTA4MGViY2ZlNjZiMGE0NWZiZWY2Li45MjhhZTdkNTFlM2YwYjdkOTEwMjBjN2RhMjg4ZWRl
MjQ1YzM4NTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYkNv
cmVTdGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViQ29y
ZVN0YXRpc3RpY3MubW0KQEAgLTM5LDcgKzM5LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUu
aD4KICNpbXBvcnQgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ds
eXBoUGFnZS5oPgotI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbXBvcnQg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KICNpbXBvcnQgPFdlYkNvcmUvSlNET01XaW5k
b3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvUGFnZUNvbnNvbGVDbGllbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvUHJpbnRDb250ZXh0Lmg+CkBAIC0zMDUsNyArMzA1LDcgQEAgLSAodm9pZClwcmludFRv
Q0dDb250ZXh0OihDR0NvbnRleHRSZWYpY2dDb250ZXh0IHBhZ2VXaWR0aDooZmxvYXQpcGFnZVdp
ZHRoSW5QaXgKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOworICAgIEdyYXBoaWNzQ29u
dGV4dENHIGdyYXBoaWNzQ29udGV4dChjZ0NvbnRleHQpOwogICAgIFByaW50Q29udGV4dDo6c3Bv
b2xBbGxQYWdlc1dpdGhCb3VuZGFyaWVzKCpjb3JlRnJhbWUsIGdyYXBoaWNzQ29udGV4dCwgRmxv
YXRTaXplKHBhZ2VXaWR0aEluUGl4ZWxzLCBwYWdlSGVpZ2h0SW5QaXhlbHMpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJh
cy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL01pc2MvV2ViS2l0TlNTdHJpbmdFeHRyYXMu
bW0KaW5kZXggMmJhMDA2ZGQzZTdiMmFmYzUwZWZmMjg0NTMyMGQ5NjUwNWJhNzFiYS4uNzgzMjU2
MTljMWFjNzc0NGU4OGZkNDkyNTM2Yzk1N2EwNDI0NGY3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9NaXNjL1dlYktpdE5TU3RyaW5nRXh0cmFzLm1tCkBAIC0zMCw3ICsz
MCw3IEBACiAKICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KICNpbXBvcnQgPFdlYkNvcmUv
Rm9udENhc2NhZGUuaD4KLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW1w
b3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0xvYWRl
ck5TVVJMRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RleHRSdW4uaD4KICNpbXBvcnQgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC03OCw3ICs3OCw3IEBAIC0gKHZvaWQpX3dl
Yl9kcmF3QXRQb2ludDooTlNQb2ludClwb2ludCBmb250OihOU0ZvbnQgKilmb250IHRleHRDb2xv
cjooTlNDb2xvciAqCiAKICAgICAgICAgTlNHcmFwaGljc0NvbnRleHQgKm5zQ29udGV4dCA9IFtO
U0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAgICAgICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBbbnNDb250ZXh0IENHQ29udGV4dF07Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQgeyBjZ0NvbnRleHQgfTsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
Q0cgZ3JhcGhpY3NDb250ZXh0IHsgY2dDb250ZXh0IH07CiAKICAgICAgICAgLy8gV2ViQ29yZSBy
ZXF1aXJlcyBhIGZsaXBwZWQgZ3JhcGhpY3MgY29udGV4dC4KICAgICAgICAgYm9vbCBmbGlwcGVk
ID0gW25zQ29udGV4dCBpc0ZsaXBwZWRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViSW5zcGVjdG9yL1dlYk5vZGVIaWdobGlnaHRWaWV3Lm1tCmluZGV4IGQz
OTczZTI5NDQ1OWVjZjFkYmRlZjQ0OWVmMmNmZDJjYWNiOGVkMzUuLjk1MGFlOGUwMGQzMGE0NTIw
OWY5YWRkYTNjMmIzM2YxMzEwMDIyYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkluc3BlY3Rvci9XZWJOb2RlSGlnaGxpZ2h0Vmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJJbnNwZWN0b3IvV2ViTm9kZUhpZ2hsaWdodFZpZXcubW0KQEAgLTI5
LDcgKzI5LDcgQEAKICNpbXBvcnQgIldlYk5vZGVIaWdobGlnaHRWaWV3LmgiCiAjaW1wb3J0ICJX
ZWJOb2RlSGlnaGxpZ2h0LmgiCiAKLSNpbXBvcnQgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW1wb3J0IDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0luc3BlY3RvckNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAg
LTk4LDcgKzk4LDcgQEAgLSAodm9pZClkcmF3UmVjdDooTlNSZWN0KXJlY3QKIAogICAgICAgICBB
U1NFUlQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CiAK
LSAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dENHIGNvbnRl
eHQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gQ0dDb250ZXh0XSk7CiAgICAg
ICAgIFtfd2ViTm9kZUhpZ2hsaWdodCBpbnNwZWN0b3JDb250cm9sbGVyXS0+ZHJhd0hpZ2hsaWdo
dChjb250ZXh0KTsKICAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0
YXRlXTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQppbmRleCBmMzVkN2JkNWEyMzUxYjJiMDFiNjhiYjFlMjE2Zjc0NTdlNDE4YTcxLi45NWJkYTM5
MGNhNjliYTZiOTYyMGY1MWJlZTY5NmIyMTIzOWFiMTRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTgxLDcgKzgxLDcgQEAKICNpbXBvcnQgPFdl
YkNvcmUvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVT
ZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVUcmVlLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRD
Ry5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MRnJhbWVPd25lckVsZW1lbnQuaD4KICNpbXBvcnQg
PFdlYkNvcmUvSFRNTE5hbWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hpc3RvcnlJdGVtLmg+CkBA
IC02MTMsNyArNjEzLDcgQEAgLSAodm9pZClfZHJhd1JlY3Q6KE5TUmVjdClyZWN0IGNvbnRlbnRz
T25seTooQk9PTCljb250ZW50c09ubHkKICNlbHNlCiAgICAgQ0dDb250ZXh0UmVmIGN0eCA9IFdL
R2V0Q3VycmVudEdyYXBoaWNzQ29udGV4dCgpOwogI2VuZGlmCi0gICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQoY3R4KTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRDRyBj
b250ZXh0KGN0eCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIFdlYkNvcmU6OkZy
YW1lICpmcmFtZSA9IGNvcmUoc2VsZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCmluZGV4IDUxOWE1NzM2ZDJhMzUwZDcy
Nzg2NzY1ZmIxOGZjZjMzOWM1ZWM2OGUuLmFkNjYwN2U0NTEwZTU5ZjUxOGZlZWYxZDhjYzYzNjU2
YTg0ZWQ0NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0Z1bGxzY3Jl
ZW5WaWRlb0NvbnRyb2xsZXIuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9Gb250Q2FzY2FkZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRm9udFNlbGVjdG9yLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBo
aWNzQ29udGV4dFdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSFduZERDLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0UnVuLmg+CkBAIC00OTAsNyAr
NDkxLDcgQEAgdm9pZCBGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpkcmF3KCkKICAgICBhdXRv
IGJpdG1hcERDID0gYWRvcHRHRElPYmplY3QoOjpDcmVhdGVDb21wYXRpYmxlREMoSFduZERDKG1f
aHVkV2luZG93KSkpOwogICAgIEhHRElPQkogb2xkQml0bWFwID0gU2VsZWN0T2JqZWN0KGJpdG1h
cERDLmdldCgpLCBtX2JpdG1hcC5nZXQoKSk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChiaXRtYXBEQy5nZXQoKSwgdHJ1ZSk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGNvbnRleHQo
Yml0bWFwREMuZ2V0KCksIHRydWUpOwogCiAgICAgY29udGV4dC5zYXZlKCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYkZyYW1lLmNwcAppbmRleCAyZjUxMTAzMTM2MTk0NTdjZGFjM2IzMWNhNWJk
NTM3NmFiY2IyMTc3Li44ZGE5MTk0ODNiMGRhYTcxMGQ2MjM2MmU5YjNhMDQ2OWQ1MDJiZGNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCkBAIC03NCw2ICs3NCw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZVdpbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR0RJT2JqZWN0Q291
bnRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHRXaW4uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxGb3JtRWxlbWVudC5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSFRNTEZyYW1lT3duZXJFbGVtZW50Lmg+CkBAIC0zMjEsNyArMzIy
LDcgQEAgSFJFU1VMVCBXZWJGcmFtZTo6cGFpbnREb2N1bWVudFJlY3RUb0NvbnRleHQoUkVDVCBy
ZWN0LCBfSW5fIEhEQyBkZXZpY2VDb250ZXh0KQogICAgIC8vIFdlIGNhbid0IHBhaW50IHdpdGgg
YSBsYXlvdXQgc3RpbGwgcGVuZGluZy4KICAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlm
TmVlZGVkUmVjdXJzaXZlKCk7CiAKLSAgICBHcmFwaGljc0NvbnRleHQgZ2MoZGV2aWNlQ29udGV4
dCk7CisgICAgR3JhcGhpY3NDb250ZXh0V2luIGdjKGRldmljZUNvbnRleHQpOwogICAgIGdjLnNl
dFNob3VsZEluY2x1ZGVDaGlsZFdpbmRvd3ModHJ1ZSk7CiAgICAgZ2Muc2F2ZSgpOwogICAgIExP
Tkcgd2lkdGggPSByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0OwpAQCAtMzUyLDcgKzM1Myw3IEBAIEhS
RVNVTFQgV2ViRnJhbWU6OnBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KFJFQ1Qg
cmVjdCwgUE9JTlQgcHQsIF9Jbl8KICAgICAvLyBXZSBjYW4ndCBwYWludCB3aXRoIGEgbGF5b3V0
IHN0aWxsIHBlbmRpbmcuCiAgICAgdmlldy0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJl
Y3Vyc2l2ZSgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGdjKGRldmljZUNvbnRleHQpOworICAg
IEdyYXBoaWNzQ29udGV4dFdpbiBnYyhkZXZpY2VDb250ZXh0KTsKICAgICBnYy5zZXRTaG91bGRJ
bmNsdWRlQ2hpbGRXaW5kb3dzKHRydWUpOwogICAgIGdjLnNhdmUoKTsKICAgICBJbnRSZWN0IGRp
cnR5UmVjdChyZWN0KTsKQEAgLTE4MDgsNyArMTgwOSw3IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnNw
b29sUGFnZXMoSERDIHByaW50REMsIFVJTlQgc3RhcnRQYWdlLCBVSU5UIGVuZFBhZ2UsIHZvaWQq
IGN0CiAgICAgZmxvYXQgaGVhZGVySGVpZ2h0ID0gMCwgZm9vdGVySGVpZ2h0ID0gMDsKICAgICBo
ZWFkZXJBbmRGb290ZXJIZWlnaHRzKCZoZWFkZXJIZWlnaHQsICZmb290ZXJIZWlnaHQpOwogI2lm
IFVTRShDRykgfHwgVVNFKENBSVJPKQotICAgIEdyYXBoaWNzQ29udGV4dCBzcG9vbEN0eChwY3R4
KTsKKyAgICBHcmFwaGljc0NvbnRleHRXaW4gc3Bvb2xDdHgocGN0eCk7CiAgICAgc3Bvb2xDdHgu
c2V0U2hvdWxkSW5jbHVkZUNoaWxkV2luZG93cyh0cnVlKTsKIAogICAgIGZvciAoVUlOVCBpaSA9
IHN0YXJ0UGFnZTsgaWkgPCBlbmRQYWdlOyBpaSsrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViTm9kZUhpZ2hsaWdodC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJOb2RlSGlnaGxpZ2h0LmNwcAppbmRleCAwN2EyZjYwNGYzOTdhMmE1OGIyZDc3NTFjNDRl
YTkyMTk0MzE4NzMwLi40OGU5ZDFhOGQ3NjY3MjViNTc5YzM0MTFjM2VjZDQ1YjZkYmY0Y2Y5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJOb2RlSGlnaGxpZ2h0LmNwcApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvQml0bWFwSW5mby5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvQ29sb3IuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9I
V25kREMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0luc3BlY3RvckNvbnRyb2xsZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1BhZ2UuaD4KQEAgLTE1Nyw3ICsxNTgsNyBAQCB2b2lkIFdlYk5vZGVIaWdo
bGlnaHQ6OnVwZGF0ZSgpCiAKICAgICA6OlNlbGVjdE9iamVjdChoZGMuZ2V0KCksIGhibXAuZ2V0
KCkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoaGRjLmdldCgpKTsKKyAgICBHcmFw
aGljc0NvbnRleHRXaW4gY29udGV4dChoZGMuZ2V0KCkpOwogICAgIGNvbnRleHQuc2NhbGUobV9p
bnNwZWN0ZWRXZWJWaWV3LT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIG1faW5z
cGVjdGVkV2ViVmlldy0+cGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCkuZHJhd0hpZ2hsaWdo
dChjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBjMTFhYzlk
OTdkYmFmZTJhM2YyODQ3N2NjZTA0NDFkOWI5NzcwMzYwLi43ZTE3ZjcxZDE0MmMxNmRhNTNmZTcy
NjZmNDRjODg5Y2Q0MzgyZTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAt
MTE2LDYgKzExNiw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HZW9sb2NhdGlvbkNvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0dlb2xvY2F0aW9uRXJyb3IuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0
V2luLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9IVE1MTmFtZXMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0hUTUxWaWRlb0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hXbmREQy5oPgpAQCAtMTI1
MCw3ICsxMjUxLDcgQEAgdm9pZCBXZWJWaWV3OjpwYWludFdpdGhEaXJlY3QyRCgpCiAKICAgICBS
RUNUIGNsaWVudFJlY3QgPSB7fTsKICAgICBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCBwbGF0Zm9y
bUNvbnRleHQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBnYygm
cGxhdGZvcm1Db250ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRU
eXBlOjpHUFVNZW1vcnkpOworICAgIEdyYXBoaWNzQ29udGV4dFdpbiBnYygmcGxhdGZvcm1Db250
ZXh0LCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1v
cnkpOwogCiAgICAgewogICAgICAgICBtX3JlbmRlclRhcmdldC0+U2V0VGFncyhXRUJLSVRfRFJB
V0lORywgX19MSU5FX18pOwpAQCAtMTQwNyw3ICsxNDA4LDcgQEAgdm9pZCBXZWJWaWV3OjpwYWlu
dEludG9CYWNraW5nU3RvcmUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIEhEQyBiaXRtYXBEQywgY29u
c3QgSW4KICAgICBtX2JhY2tpbmdTdG9yZVJlbmRlclRhcmdldCA9IG51bGxwdHI7CiAjZW5kaWYK
IAotICAgIEdyYXBoaWNzQ29udGV4dCBnYyhiaXRtYXBEQywgbV90cmFuc3BhcmVudCk7CisgICAg
R3JhcGhpY3NDb250ZXh0V2luIGdjKGJpdG1hcERDLCBtX3RyYW5zcGFyZW50KTsKICAgICBnYy5z
ZXRTaG91bGRJbmNsdWRlQ2hpbGRXaW5kb3dzKHdpbmRvd3NUb1BhaW50ID09IFBhaW50V2ViVmll
d0FuZENoaWxkcmVuKTsKICAgICBnYy5zYXZlKCk7CiAgICAgaWYgKG1fdHJhbnNwYXJlbnQpCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggY2EwOGE0
NDRjMTg4NzEzN2EwOGZjYTc1MWVhMmNkNmQ5YzUxNzhlOS4uNWNmMDcyZWY2NGI5MTNiZmUzODdl
ZTc5NTdkMzY1NWM5ZGM2MmI5MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA1LTI1ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFZpcnR1YWxpemUgR3JhcGhpY3ND
b250ZXh0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjYxNzAKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY2cvRGlzcGxheUxpc3RUZXN0c0NHLmNwcDoKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDIxLTA1LTI0ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTd2l0Y2ggZnJvbSBXVEY6Ok9wdGlvbmFsIHRv
IHN0ZDo6b3B0aW9uYWwKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jZy9EaXNwbGF5TGlzdFRlc3RzQ0cuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKaW5kZXggODdhMzZhY2ZlNmExMDBj
YzMyM2UyNDg5N2ZjZTM4MDNmMjM0YTc3OC4uYTU5OGQ1NGEyNzUyOTU4YzQyZTRlMmI3OWU1MzM3
YzU3YjE3NGI0NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJDb3JlL2NnL0Rpc3BsYXlMaXN0VGVzdHNDRy5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dyYWRpZW50Lmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgogCiBuYW1lc3BhY2UgVGVzdFdlYktp
dEFQSSB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ5LDcgKzUwLDcgQEAgVEVTVChE
aXNwbGF5TGlzdFRlc3RzLCBSZXBsYXlXaXRoTWlzc2luZ1Jlc291cmNlKQogCiAgICAgYXV0byBj
b2xvclNwYWNlID0gRGVzdGluYXRpb25Db2xvclNwYWNlOjpTUkdCKCk7CiAgICAgYXV0byBjZ0Nv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lk
dGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UucGxhdGZv
cm1Db2xvclNwYWNlKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdy
YXBoaWNzQ29udGV4dCBjb250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3ND
b250ZXh0Q0cgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgYXV0byBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIgPSBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7
CiAKQEAgLTExMyw3ICsxMTQsNyBAQCBURVNUKERpc3BsYXlMaXN0VGVzdHMsIE91dE9mTGluZUl0
ZW1EZWNvZGluZ0ZhaWx1cmUpCiAKICAgICBhdXRvIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29s
b3JTcGFjZUNyZWF0ZVdpdGhOYW1lKGtDR0NvbG9yU3BhY2VTUkdCKSk7CiAgICAgYXV0byBjZ0Nv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShudWxscHRyLCBjb250ZXh0V2lk
dGgsIGNvbnRleHRIZWlnaHQsIDgsIDQgKiBjb250ZXh0V2lkdGgsIGNvbG9yU3BhY2UuZ2V0KCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0IHsgY2dDb250ZXh0LmdldCgpIH07CisgICAgR3JhcGhpY3NDb250ZXh0Q0cgY29udGV4
dCB7IGNnQ29udGV4dC5nZXQoKSB9OwogCiAgICAgRGlzcGxheUxpc3Qgb3JpZ2luYWxMaXN0Owog
ICAgIFdyaXRpbmdDbGllbnQgd3JpdGVyOwpAQCAtMTQ0LDcgKzE0NSw3IEBAIFRFU1QoRGlzcGxh
eUxpc3RUZXN0cywgSW5saW5lSXRlbVZhbGlkYXRpb25GYWlsdXJlKQogCiAgICAgYXV0byBjb2xv
clNwYWNlID0gYWRvcHRDRihDR0NvbG9yU3BhY2VDcmVhdGVXaXRoTmFtZShrQ0dDb2xvclNwYWNl
U1JHQikpOwogICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUobnVsbHB0ciwgY29udGV4dFdpZHRoLCBjb250ZXh0SGVpZ2h0LCA4LCA0ICogY29udGV4dFdp
ZHRoLCBjb2xvclNwYWNlLmdldCgpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsK
LSAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCB7IGNnQ29udGV4dC5nZXQoKSB9OworICAgIEdy
YXBoaWNzQ29udGV4dENHIGNvbnRleHQgeyBjZ0NvbnRleHQuZ2V0KCkgfTsKIAogICAgIGF1dG8g
cnVuVGVzdFdpdGhJbnZhbGlkSWRlbnRpZmllciA9IFsmXShGbHVzaElkZW50aWZpZXIgaWRlbnRp
ZmllcikgewogICAgICAgICBFWFBFQ1RfRkFMU0UoaWRlbnRpZmllci5pc1ZhbGlkKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>